Commit 8316a1fe authored by Jonathan Maw's avatar Jonathan Maw

tests: Add track tests for the filter element

parent ec16561f
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment