summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2019-03-19 11:23:32 +0000
committerRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2019-03-19 11:42:18 +0000
commit743cdb6c2d964f6ddf7afa7181f9bf01db05e254 (patch)
tree2a7c4f40a91aa2edd77842f5a36e5d33b7665e37
parentfcfbc380b88a75af3eff17fa6b676f821ef6aa3c (diff)
downloadbuildstream-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.py27
-rw-r--r--tests/sources/project_key_test/elements/key-test.bst4
-rw-r--r--tests/sources/project_key_test/plugins/sources/key-test.py48
-rw-r--r--tests/sources/project_key_test/project.conf10
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