summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2018-09-24 14:42:41 +0100
committerJürg Billeter <j@bitron.ch>2018-09-24 14:59:59 +0100
commit86ea1173a485024a3f241263814632a70c43b867 (patch)
treef5ea23d1c0b657cbb5ece3261bd68c7b4f9669f4
parentda7e038bb2b256b7e880f9fcd86f6bf1403cb986 (diff)
downloadbuildstream-juerg/rebuild.tar.gz
tests/frontend/rebuild.py: Add strict/non-strict rebuild testjuerg/rebuild
Test rebuild that requires staging of weakly cached dependency. This is a regression test for #607.
-rw-r--r--tests/frontend/project/elements/rebuild-target.bst4
-rw-r--r--tests/frontend/rebuild.py36
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/frontend/project/elements/rebuild-target.bst b/tests/frontend/project/elements/rebuild-target.bst
new file mode 100644
index 000000000..49a02c217
--- /dev/null
+++ b/tests/frontend/project/elements/rebuild-target.bst
@@ -0,0 +1,4 @@
+kind: compose
+
+build-depends:
+- target.bst
diff --git a/tests/frontend/rebuild.py b/tests/frontend/rebuild.py
new file mode 100644
index 000000000..d93aac0dc
--- /dev/null
+++ b/tests/frontend/rebuild.py
@@ -0,0 +1,36 @@
+import os
+import pytest
+from tests.testutils import cli
+
+# Project directory
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ "project",
+)
+
+
+def strict_args(args, strict):
+ if strict != "strict":
+ return ['--no-strict'] + args
+ return args
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("strict", ["strict", "non-strict"])
+def test_rebuild(datafiles, cli, strict):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ checkout = os.path.join(cli.directory, 'checkout')
+
+ # First build intermediate target.bst
+ result = cli.run(project=project, args=strict_args(['build', 'target.bst'], strict))
+ result.assert_success()
+
+ # Modify base import
+ with open(os.path.join(project, 'files', 'dev-files', 'usr', 'include', 'new.h'), "w") as f:
+ f.write("#define NEW")
+
+ # Rebuild base import and build top-level rebuild-target.bst
+ # In non-strict mode, this does not rebuild intermediate target.bst,
+ # which means that a weakly cached target.bst will be staged as dependency.
+ result = cli.run(project=project, args=strict_args(['build', 'rebuild-target.bst'], strict))
+ result.assert_success()