diff options
author | Jonathan Maw <jonathan.maw@codethink.co.uk> | 2018-04-04 14:43:15 +0100 |
---|---|---|
committer | Jonathan Maw <jonathan.maw@codethink.co.uk> | 2018-05-17 16:45:50 +0100 |
commit | 8316a1fe2b2bc43865bfa01a983b2b792e834b11 (patch) | |
tree | e6f10befed63a32c1e41976185b159113fd103c4 /tests/plugins | |
parent | ec16561f114430e54526bbff2202aa69c849de81 (diff) | |
download | buildstream-8316a1fe2b2bc43865bfa01a983b2b792e834b11.tar.gz |
tests: Add track tests for the filter element
Diffstat (limited to 'tests/plugins')
-rw-r--r-- | tests/plugins/filter.py | 289 |
1 files changed, 288 insertions, 1 deletions
diff --git a/tests/plugins/filter.py b/tests/plugins/filter.py index 9c7e74b7e..45d679439 100644 --- a/tests/plugins/filter.py +++ b/tests/plugins/filter.py @@ -1,8 +1,9 @@ import os import pytest import shutil -from tests.testutils.runcli import cli +from tests.testutils import cli, create_repo, ALL_REPO_KINDS from buildstream._exceptions import ErrorDomain +from buildstream import _yaml DATA_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), @@ -155,3 +156,289 @@ def test_filter_workspace_reset(datafiles, cli, tmpdir): result = cli.run(project=project, args=['checkout', 'output-orphans.bst', checkout_dir]) result.assert_success() assert not os.path.exists(os.path.join(checkout_dir, "quux")) + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS if kind not in ("patch", "local")]) +def test_filter_track(datafiles, cli, tmpdir, kind): + repo = create_repo(kind, str(tmpdir)) + ref = repo.create(os.path.join(str(datafiles), "files")) + elements_dir = os.path.join(str(tmpdir), "elements") + project = str(tmpdir) + input_name = "input.bst" + + project_config = { + "name": "filter-track-test", + "element-path": "elements", + } + project_file = os.path.join(str(tmpdir), "project.conf") + _yaml.dump(project_config, project_file) + + input_config = { + "kind": "import", + "sources": [repo.source_config()], + } + + input_file = os.path.join(elements_dir, input_name) + _yaml.dump(input_config, input_file) + + filter1_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter1_file = os.path.join(elements_dir, "filter1.bst") + _yaml.dump(filter1_config, filter1_file) + + filter2_config = { + "kind": "filter", + "depends": [ + {"filename": "filter1.bst", "type": "build"} + ] + } + filter2_file = os.path.join(elements_dir, "filter2.bst") + _yaml.dump(filter2_config, filter2_file) + + # Assert that a fetch is needed + assert cli.get_element_state(project, input_name) == 'no reference' + + # Now try to track it + result = cli.run(project=project, args=["track", "filter2.bst"]) + result.assert_success() + + # Now check that a ref field exists + new_input = _yaml.load(input_file) + assert new_input["sources"][0]["ref"] == ref + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS if kind not in ("patch", "local")]) +def test_filter_track_excepted(datafiles, cli, tmpdir, kind): + repo = create_repo(kind, str(tmpdir)) + ref = repo.create(os.path.join(str(datafiles), "files")) + elements_dir = os.path.join(str(tmpdir), "elements") + project = str(tmpdir) + input_name = "input.bst" + + project_config = { + "name": "filter-track-test", + "element-path": "elements", + } + project_file = os.path.join(str(tmpdir), "project.conf") + _yaml.dump(project_config, project_file) + + input_config = { + "kind": "import", + "sources": [repo.source_config()], + } + + input_file = os.path.join(elements_dir, input_name) + _yaml.dump(input_config, input_file) + + filter1_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter1_file = os.path.join(elements_dir, "filter1.bst") + _yaml.dump(filter1_config, filter1_file) + + filter2_config = { + "kind": "filter", + "depends": [ + {"filename": "filter1.bst", "type": "build"} + ] + } + filter2_file = os.path.join(elements_dir, "filter2.bst") + _yaml.dump(filter2_config, filter2_file) + + # Assert that a fetch is needed + assert cli.get_element_state(project, input_name) == 'no reference' + + # Now try to track it + result = cli.run(project=project, args=["track", "filter2.bst", "--except", "input.bst"]) + result.assert_success() + + # Now check that a ref field exists + new_input = _yaml.load(input_file) + assert "ref" not in new_input["sources"][0] + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS if kind not in ("patch", "local")]) +def test_filter_track_multi_to_one(datafiles, cli, tmpdir, kind): + repo = create_repo(kind, str(tmpdir)) + ref = repo.create(os.path.join(str(datafiles), "files")) + elements_dir = os.path.join(str(tmpdir), "elements") + project = str(tmpdir) + input_name = "input.bst" + + project_config = { + "name": "filter-track-test", + "element-path": "elements", + } + project_file = os.path.join(str(tmpdir), "project.conf") + _yaml.dump(project_config, project_file) + + input_config = { + "kind": "import", + "sources": [repo.source_config()], + } + + input_file = os.path.join(elements_dir, input_name) + _yaml.dump(input_config, input_file) + + filter1_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter1_file = os.path.join(elements_dir, "filter1.bst") + _yaml.dump(filter1_config, filter1_file) + + filter2_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter2_file = os.path.join(elements_dir, "filter2.bst") + _yaml.dump(filter2_config, filter2_file) + + # Assert that a fetch is needed + assert cli.get_element_state(project, input_name) == 'no reference' + + # Now try to track it + result = cli.run(project=project, args=["track", "filter1.bst", "filter2.bst"]) + result.assert_success() + + # Now check that a ref field exists + new_input = _yaml.load(input_file) + assert new_input["sources"][0]["ref"] == ref + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS if kind not in ("patch", "local")]) +def test_filter_track_multi(datafiles, cli, tmpdir, kind): + repo = create_repo(kind, str(tmpdir)) + ref = repo.create(os.path.join(str(datafiles), "files")) + elements_dir = os.path.join(str(tmpdir), "elements") + project = str(tmpdir) + input_name = "input.bst" + input2_name = "input2.bst" + + project_config = { + "name": "filter-track-test", + "element-path": "elements", + } + project_file = os.path.join(str(tmpdir), "project.conf") + _yaml.dump(project_config, project_file) + + input_config = { + "kind": "import", + "sources": [repo.source_config()], + } + + input_file = os.path.join(elements_dir, input_name) + _yaml.dump(input_config, input_file) + + input2_config = dict(input_config) + input2_file = os.path.join(elements_dir, input2_name) + _yaml.dump(input2_config, input2_file) + + filter1_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter1_file = os.path.join(elements_dir, "filter1.bst") + _yaml.dump(filter1_config, filter1_file) + + filter2_config = { + "kind": "filter", + "depends": [ + {"filename": input2_name, "type": "build"} + ] + } + filter2_file = os.path.join(elements_dir, "filter2.bst") + _yaml.dump(filter2_config, filter2_file) + + # Assert that a fetch is needed + assert cli.get_element_state(project, input_name) == 'no reference' + assert cli.get_element_state(project, input2_name) == 'no reference' + + # Now try to track it + result = cli.run(project=project, args=["track", "filter1.bst", "filter2.bst"]) + result.assert_success() + + # Now check that a ref field exists + new_input = _yaml.load(input_file) + assert new_input["sources"][0]["ref"] == ref + new_input2 = _yaml.load(input2_file) + assert new_input2["sources"][0]["ref"] == ref + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS if kind not in ("patch", "local")]) +def test_filter_track_multi_exclude(datafiles, cli, tmpdir, kind): + repo = create_repo(kind, str(tmpdir)) + ref = repo.create(os.path.join(str(datafiles), "files")) + elements_dir = os.path.join(str(tmpdir), "elements") + project = str(tmpdir) + input_name = "input.bst" + input2_name = "input2.bst" + + project_config = { + "name": "filter-track-test", + "element-path": "elements", + } + project_file = os.path.join(str(tmpdir), "project.conf") + _yaml.dump(project_config, project_file) + + input_config = { + "kind": "import", + "sources": [repo.source_config()], + } + + input_file = os.path.join(elements_dir, input_name) + _yaml.dump(input_config, input_file) + + input2_config = dict(input_config) + input2_file = os.path.join(elements_dir, input2_name) + _yaml.dump(input2_config, input2_file) + + filter1_config = { + "kind": "filter", + "depends": [ + {"filename": input_name, "type": "build"} + ] + } + filter1_file = os.path.join(elements_dir, "filter1.bst") + _yaml.dump(filter1_config, filter1_file) + + filter2_config = { + "kind": "filter", + "depends": [ + {"filename": input2_name, "type": "build"} + ] + } + filter2_file = os.path.join(elements_dir, "filter2.bst") + _yaml.dump(filter2_config, filter2_file) + + # Assert that a fetch is needed + assert cli.get_element_state(project, input_name) == 'no reference' + assert cli.get_element_state(project, input2_name) == 'no reference' + + # Now try to track it + result = cli.run(project=project, args=["track", "filter1.bst", "filter2.bst", "--except", input_name]) + result.assert_success() + + # Now check that a ref field exists + new_input = _yaml.load(input_file) + assert "ref" not in new_input["sources"][0] + new_input2 = _yaml.load(input2_file) + assert new_input2["sources"][0]["ref"] == ref |