diff options
author | Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> | 2019-03-19 11:23:32 +0000 |
---|---|---|
committer | Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> | 2019-03-19 11:42:18 +0000 |
commit | 743cdb6c2d964f6ddf7afa7181f9bf01db05e254 (patch) | |
tree | 2a7c4f40a91aa2edd77842f5a36e5d33b7665e37 | |
parent | fcfbc380b88a75af3eff17fa6b676f821ef6aa3c (diff) | |
download | buildstream-raoul/source-key-fix.tar.gz |
tests: Check get_unique_key isn't used before trackraoul/source-key-fix
Part of a fix for !1124
-rw-r--r-- | tests/sources/keytest.py | 27 | ||||
-rw-r--r-- | tests/sources/project_key_test/elements/key-test.bst | 4 | ||||
-rw-r--r-- | tests/sources/project_key_test/plugins/sources/key-test.py | 48 | ||||
-rw-r--r-- | tests/sources/project_key_test/project.conf | 10 |
4 files changed, 89 insertions, 0 deletions
diff --git a/tests/sources/keytest.py b/tests/sources/keytest.py new file mode 100644 index 000000000..c01ea5b91 --- /dev/null +++ b/tests/sources/keytest.py @@ -0,0 +1,27 @@ +import os +import pytest + + +from buildstream._exceptions import ErrorDomain +from buildstream.plugintestutils import cli + + +DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), + "project_key_test") + + +# using the key-test plugin to ensure get_unique_key is never called before +# refs are resolved +@pytest.mark.datafiles(DATA_DIR) +def test_generate_key(cli, datafiles): + project_dir = str(datafiles) + + # check that we don't fail if not tracking due to get_unique_key + res = cli.run(project=project_dir, args=["build", "key-test.bst"]) + res.assert_main_error(ErrorDomain.PIPELINE, "inconsistent-pipeline") + + res = cli.run(project=project_dir, args=["source", "track", "key-test.bst"]) + res.assert_success() + + res = cli.run(project=project_dir, args=["build", "--track", "key-test.bst"]) + res.assert_success() diff --git a/tests/sources/project_key_test/elements/key-test.bst b/tests/sources/project_key_test/elements/key-test.bst new file mode 100644 index 000000000..a81ab7f44 --- /dev/null +++ b/tests/sources/project_key_test/elements/key-test.bst @@ -0,0 +1,4 @@ +kind: import + +sources: + - kind: key-test diff --git a/tests/sources/project_key_test/plugins/sources/key-test.py b/tests/sources/project_key_test/plugins/sources/key-test.py new file mode 100644 index 000000000..9331ba094 --- /dev/null +++ b/tests/sources/project_key_test/plugins/sources/key-test.py @@ -0,0 +1,48 @@ +from buildstream import Source, Consistency + + +class KeyTest(Source): + """ This plugin should fail if get_unique_key is called before track + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.ref = False + + def preflight(self): + pass + + def configure(self, node): + pass + + def get_unique_key(self): + assert self.ref + return "abcdefg" + + def get_consistency(self): + if self.ref: + return Consistency.RESOLVED + else: + return Consistency.INCONSISTENT + + def load_ref(self, node): + pass + + def get_ref(self): + pass + + def set_ref(self, ref, node): + pass + + def track(self, **kwargs): + self.ref = True + + def fetch(self, **kwargs): + pass + + def stage(self, directory): + pass + + +def setup(): + return KeyTest diff --git a/tests/sources/project_key_test/project.conf b/tests/sources/project_key_test/project.conf new file mode 100644 index 000000000..97ab12c05 --- /dev/null +++ b/tests/sources/project_key_test/project.conf @@ -0,0 +1,10 @@ +name: key-test + +element-path: elements + +plugins: + +- origin: local + path: plugins/sources + sources: + key-test: 0
\ No newline at end of file |