diff options
author | Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> | 2019-03-19 11:23:32 +0000 |
---|---|---|
committer | bst-marge-bot <marge-bot@buildstream.build> | 2019-03-21 18:31:26 +0000 |
commit | 8fb30a60ed68a7dde6fa9f796510cf58aa541cd0 (patch) | |
tree | 3e7359534db246b63cdc4a64c331a045249977fd | |
parent | 8cdfbfda50ba146ec4ae63af46cb2b6f7ca764a7 (diff) | |
download | buildstream-8fb30a60ed68a7dde6fa9f796510cf58aa541cd0.tar.gz |
tests: Check get_unique_key isn't used before track
Part of a fix for !1124
-rw-r--r-- | tests/sources/keytest.py | 48 | ||||
-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, 110 insertions, 0 deletions
diff --git a/tests/sources/keytest.py b/tests/sources/keytest.py new file mode 100644 index 000000000..989f4f1b0 --- /dev/null +++ b/tests/sources/keytest.py @@ -0,0 +1,48 @@ +# +# Copyright (C) 2019 Bloomberg Finance LP +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# +# Authors: +# Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> +# + +# Pylint doesn't play well with fixtures and dependency injection from pytest +# pylint: disable=redefined-outer-name + +import os +import pytest + +from buildstream._exceptions import ErrorDomain +from buildstream.plugintestutils import cli # pylint: disable=unused-import + +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 |