From 743cdb6c2d964f6ddf7afa7181f9bf01db05e254 Mon Sep 17 00:00:00 2001 From: Raoul Hidalgo Charman Date: Tue, 19 Mar 2019 11:23:32 +0000 Subject: tests: Check get_unique_key isn't used before track Part of a fix for !1124 --- tests/sources/keytest.py | 27 ++++++++++++ .../sources/project_key_test/elements/key-test.bst | 4 ++ .../project_key_test/plugins/sources/key-test.py | 48 ++++++++++++++++++++++ tests/sources/project_key_test/project.conf | 10 +++++ 4 files changed, 89 insertions(+) create mode 100644 tests/sources/keytest.py create mode 100644 tests/sources/project_key_test/elements/key-test.bst create mode 100644 tests/sources/project_key_test/plugins/sources/key-test.py create mode 100644 tests/sources/project_key_test/project.conf 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 -- cgit v1.2.1