summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Maw <jonathan.maw@codethink.co.uk>2018-04-04 14:43:15 +0100
committerJonathan Maw <jonathan.maw@codethink.co.uk>2018-05-17 16:45:50 +0100
commit8316a1fe2b2bc43865bfa01a983b2b792e834b11 (patch)
treee6f10befed63a32c1e41976185b159113fd103c4
parentec16561f114430e54526bbff2202aa69c849de81 (diff)
downloadbuildstream-8316a1fe2b2bc43865bfa01a983b2b792e834b11.tar.gz
tests: Add track tests for the filter element
-rw-r--r--tests/plugins/filter.py289
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