diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-08-12 16:53:35 -0400 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-08-31 15:58:31 +0300 |
commit | 5044fd257046073fc6f1c43029c71bef07b8cbe7 (patch) | |
tree | 61a4739380dd688ccd877c8ed86596ff377edbd9 | |
parent | b082f9aad9b33c1dcbbc457a1ae1c0b7f31f6258 (diff) | |
download | buildstream-5044fd257046073fc6f1c43029c71bef07b8cbe7.tar.gz |
tests/frontend/show.py: Test that strict dependencies behave as expected
This tests that the target which depends on a common dependency
strictly in non strict mode needs to be rebuilt after this common
dependency changes, while it is not the case when depending on the
same common target non strictly.
This is a regression test for #254
-rw-r--r-- | tests/frontend/show.py | 60 | ||||
-rw-r--r-- | tests/frontend/strict-depends/elements/base.bst | 5 | ||||
-rw-r--r-- | tests/frontend/strict-depends/elements/non-strict-depends.bst | 4 | ||||
-rw-r--r-- | tests/frontend/strict-depends/elements/strict-depends.bst | 5 | ||||
-rw-r--r-- | tests/frontend/strict-depends/files/hello.txt | 1 | ||||
-rw-r--r-- | tests/frontend/strict-depends/project.conf | 2 |
6 files changed, 73 insertions, 4 deletions
diff --git a/tests/frontend/show.py b/tests/frontend/show.py index 8bb0bab3f..92fa1f5f7 100644 --- a/tests/frontend/show.py +++ b/tests/frontend/show.py @@ -11,10 +11,8 @@ from buildstream._exceptions import ErrorDomain, LoadErrorReason from . import configure_project # Project directory -DATA_DIR = os.path.join( - os.path.dirname(os.path.realpath(__file__)), - "project", -) +TOP_DIR = os.path.dirname(os.path.realpath(__file__)) +DATA_DIR = os.path.join(TOP_DIR, "project") @pytest.mark.datafiles(DATA_DIR) @@ -371,3 +369,57 @@ def test_max_jobs(cli, datafiles, cli_value, config_value): else: # Check that we got the explicitly set value assert loaded_value == int(expected_value) + + +# This tests that cache keys behave as expected when +# dependencies have been specified as `strict` and +# when building in strict mode. +# +# This test will: +# +# * Build the target once (and assert that it is cached) +# * Modify some local files which are imported +# by an import element which the target depends on +# * Assert that the cached state of the target element +# is as expected +# +# We run the test twice, once with an element which strict +# depends on the changing import element, and one which +# depends on it regularly. +# +@pytest.mark.datafiles(os.path.join(TOP_DIR, 'strict-depends')) +@pytest.mark.parametrize("target, expected_state", [ + ("non-strict-depends.bst", "cached"), + ("strict-depends.bst", "waiting"), +]) +def test_strict_dependencies(cli, datafiles, target, expected_state): + project = str(datafiles) + + # Configure non strict mode, this will have + # an effect on the build and the `bst show` + # commands run via cli.get_element_states() + cli.configure({ + 'projects': { + 'test': { + 'strict': False + } + } + }) + + result = cli.run(project=project, silent=True, args=['build', target]) + result.assert_success() + + states = cli.get_element_states(project, target) + assert states['base.bst'] == 'cached' + assert states[target] == 'cached' + + # Now modify the file, effectively causing the common base.bst + # dependency to change it's cache key + hello_path = os.path.join(project, 'files', 'hello.txt') + with open(hello_path, 'w') as f: + f.write("Goodbye") + + # Now assert that we have the states we expect as a result + states = cli.get_element_states(project, target) + assert states['base.bst'] == 'buildable' + assert states[target] == expected_state diff --git a/tests/frontend/strict-depends/elements/base.bst b/tests/frontend/strict-depends/elements/base.bst new file mode 100644 index 000000000..ed6197699 --- /dev/null +++ b/tests/frontend/strict-depends/elements/base.bst @@ -0,0 +1,5 @@ +kind: import + +sources: +- kind: local + path: files diff --git a/tests/frontend/strict-depends/elements/non-strict-depends.bst b/tests/frontend/strict-depends/elements/non-strict-depends.bst new file mode 100644 index 000000000..9ab119bde --- /dev/null +++ b/tests/frontend/strict-depends/elements/non-strict-depends.bst @@ -0,0 +1,4 @@ +kind: stack + +build-depends: +- base.bst diff --git a/tests/frontend/strict-depends/elements/strict-depends.bst b/tests/frontend/strict-depends/elements/strict-depends.bst new file mode 100644 index 000000000..1e4e29414 --- /dev/null +++ b/tests/frontend/strict-depends/elements/strict-depends.bst @@ -0,0 +1,5 @@ +kind: stack + +build-depends: +- filename: base.bst + strict: true diff --git a/tests/frontend/strict-depends/files/hello.txt b/tests/frontend/strict-depends/files/hello.txt new file mode 100644 index 000000000..f62144808 --- /dev/null +++ b/tests/frontend/strict-depends/files/hello.txt @@ -0,0 +1 @@ +pony diff --git a/tests/frontend/strict-depends/project.conf b/tests/frontend/strict-depends/project.conf new file mode 100644 index 000000000..627522526 --- /dev/null +++ b/tests/frontend/strict-depends/project.conf @@ -0,0 +1,2 @@ +name: test +element-path: elements |