summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTristan van Berkom <tristan@codethink.co.uk>2020-10-26 17:18:24 +0900
committerTristan van Berkom <tristan@codethink.co.uk>2020-11-04 14:39:06 +0900
commit4521792d03b899eca8dd376da781e55c5b16ab65 (patch)
tree66a409a0521f84e059b9dd339922408ca9619f6d /tests
parent681501303d10f07528f295e61a3b17a88bffbf06 (diff)
downloadbuildstream-4521792d03b899eca8dd376da781e55c5b16ab65.tar.gz
tests/format/junctions.py: Testing element override scenarios
* Test that we can override an element in a subproject with a local element, the local element has a dependency on another element in the subproject through the same junction. * Test that we can override the dependency in the subproject, proving that reverse dependencies in that subproject are built against the overridden element. * Test that we can override a subproject element using a local link to another element in the same subproject. * Test that we can declare an override of a subproject element using a link in that subproject, and it will be effective even if that link is not traversed by the actual dependency chain. * Check that the same element being overridden multiple times in a subproject is overridden by the highest level project which should have the highest priority in the overrides.
Diffstat (limited to 'tests')
-rw-r--r--tests/format/junctions.py47
-rw-r--r--tests/format/junctions/override-element/element.txt0
-rw-r--r--tests/format/junctions/override-element/override-subproject-dep.bst11
-rw-r--r--tests/format/junctions/override-element/override-subproject-element-using-link.bst12
-rw-r--r--tests/format/junctions/override-element/override-subproject-element-with-link.bst12
-rw-r--r--tests/format/junctions/override-element/override-subproject-element.bst11
-rw-r--r--tests/format/junctions/override-element/override-subsubproject.bst12
-rw-r--r--tests/format/junctions/override-element/project.conf2
-rw-r--r--tests/format/junctions/override-element/subdep-override.bst4
-rw-r--r--tests/format/junctions/override-element/subdep-override.txt0
-rw-r--r--tests/format/junctions/override-element/subelement-alternative-link.bst8
-rw-r--r--tests/format/junctions/override-element/subelement-override.bst14
-rw-r--r--tests/format/junctions/override-element/subelement-override.txt0
-rw-r--r--tests/format/junctions/override-element/subproject-override-dep.bst8
-rw-r--r--tests/format/junctions/override-element/subproject-override-element-using-link.bst8
-rw-r--r--tests/format/junctions/override-element/subproject-override-element-with-link.bst8
-rw-r--r--tests/format/junctions/override-element/subproject-override-element.bst8
-rw-r--r--tests/format/junctions/override-element/subproject-override-subsubproject-element.bst8
-rw-r--r--tests/format/junctions/override-element/subproject/project.conf2
-rw-r--r--tests/format/junctions/override-element/subproject/sub-alternative.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/sub.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/subdep.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/subdependency.bst4
-rw-r--r--tests/format/junctions/override-element/subproject/subelement-alternative.bst7
-rw-r--r--tests/format/junctions/override-element/subproject/subelement-link.bst8
-rw-r--r--tests/format/junctions/override-element/subproject/subelement.bst7
-rw-r--r--tests/format/junctions/override-element/subproject/subsubdep-override.bst4
-rw-r--r--tests/format/junctions/override-element/subproject/subsubdep-override.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject-override-dep.bst8
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject/project.conf2
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject/subsub.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject/subsubdep.txt0
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject/subsubdependency.bst4
-rw-r--r--tests/format/junctions/override-element/subproject/subsubproject/subsubelement.bst7
34 files changed, 221 insertions, 5 deletions
diff --git a/tests/format/junctions.py b/tests/format/junctions.py
index c4eea2d1c..5c65a5534 100644
--- a/tests/format/junctions.py
+++ b/tests/format/junctions.py
@@ -388,11 +388,48 @@ def test_full_path_not_found(cli, tmpdir, datafiles, target, provenance):
#
-# Test the overrides feature.
+# Test overridding elements
#
-# Here we reuse the `nested` project since it already has deep
-# nesting, and add to it a couple of additional junctions to
-# test overriding of junctions at various depts
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize(
+ "target,expected",
+ [
+ # Override an element in a subproject, this dependency will depend on
+ # the same element in the subproject as the overridden element did.
+ ("override-subproject-element.bst", ["element.txt", "subelement-override.txt", "subdep.txt"]),
+ # Override an element in a subproject while depending on an element which depends
+ # on the overridden element, in this case we ensure that the reverse dependencies
+ # of the replaced element are built against the replacement.
+ ("override-subproject-dep.bst", ["element.txt", "sub.txt", "subdep-override.txt"]),
+ # Override an element in a subproject with a local link element which points to another
+ # element in the same subproject.
+ ("override-subproject-element-with-link.bst", ["element.txt", "sub-alternative.txt", "subdep.txt"]),
+ # Override a link to an element in a subproject with an alternative element
+ # in the same subproject.
+ ("override-subproject-element-using-link.bst", ["element.txt", "sub-alternative.txt", "subdep.txt"]),
+ # Override an element in a nested subsubproject, where the intermediate project also overrides
+ # the same element
+ ("override-subsubproject.bst", ["element.txt", "subsub.txt", "subdep-override.txt"]),
+ ],
+ ids=["element-with-deps", "dependency-of-element", "with-link", "using-link", "priority",],
+)
+def test_override_element(cli, tmpdir, datafiles, target, expected):
+ project = os.path.join(str(datafiles), "override-element")
+ checkoutdir = os.path.join(str(tmpdir), "checkout")
+
+ # Build, checkout
+ result = cli.run(project=project, args=["build", target])
+ result.assert_success()
+ result = cli.run(project=project, args=["artifact", "checkout", target, "--directory", checkoutdir])
+ result.assert_success()
+
+ # Check that the checkout contains the expected file(s)
+ for expect in expected:
+ assert os.path.exists(os.path.join(checkoutdir, expect))
+
+
+#
+# Test overridding junctions
#
@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
@@ -420,7 +457,7 @@ def test_full_path_not_found(cli, tmpdir, datafiles, target, provenance):
"override-subproject-with-subsubproject",
],
)
-def test_overrides(cli, tmpdir, datafiles, target, expected):
+def test_override_junction(cli, tmpdir, datafiles, target, expected):
project = os.path.join(str(datafiles), "overrides")
checkoutdir = os.path.join(str(tmpdir), "checkout")
diff --git a/tests/format/junctions/override-element/element.txt b/tests/format/junctions/override-element/element.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/element.txt
diff --git a/tests/format/junctions/override-element/override-subproject-dep.bst b/tests/format/junctions/override-element/override-subproject-dep.bst
new file mode 100644
index 000000000..814afc1d4
--- /dev/null
+++ b/tests/format/junctions/override-element/override-subproject-dep.bst
@@ -0,0 +1,11 @@
+kind: import
+sources:
+- kind: local
+ path: element.txt
+
+#
+# Depend on the subproject using a junction which overrides the dependency
+# of the element we're depending on.
+#
+depends:
+- subproject-override-dep.bst:subelement.bst
diff --git a/tests/format/junctions/override-element/override-subproject-element-using-link.bst b/tests/format/junctions/override-element/override-subproject-element-using-link.bst
new file mode 100644
index 000000000..ed196f568
--- /dev/null
+++ b/tests/format/junctions/override-element/override-subproject-element-using-link.bst
@@ -0,0 +1,12 @@
+kind: import
+sources:
+- kind: local
+ path: element.txt
+
+#
+# Depend on the subproject using a junction which overrides the
+# element we're depending on, using a link to address the element
+# we are overridding.
+#
+depends:
+- subproject-override-element-using-link.bst:subelement.bst
diff --git a/tests/format/junctions/override-element/override-subproject-element-with-link.bst b/tests/format/junctions/override-element/override-subproject-element-with-link.bst
new file mode 100644
index 000000000..d58a59bf1
--- /dev/null
+++ b/tests/format/junctions/override-element/override-subproject-element-with-link.bst
@@ -0,0 +1,12 @@
+kind: import
+sources:
+- kind: local
+ path: element.txt
+
+#
+# Depend on the subproject using a junction which overrides the
+# element we're depending on, with a local link to an alternative
+# element in that same subproject.
+#
+depends:
+- subproject-override-element-with-link.bst:subelement.bst
diff --git a/tests/format/junctions/override-element/override-subproject-element.bst b/tests/format/junctions/override-element/override-subproject-element.bst
new file mode 100644
index 000000000..74782110a
--- /dev/null
+++ b/tests/format/junctions/override-element/override-subproject-element.bst
@@ -0,0 +1,11 @@
+kind: import
+sources:
+- kind: local
+ path: element.txt
+
+#
+# Depend on the subproject using a junction which overrides the
+# element we're depending on.
+#
+depends:
+- subproject-override-element.bst:subelement.bst
diff --git a/tests/format/junctions/override-element/override-subsubproject.bst b/tests/format/junctions/override-element/override-subsubproject.bst
new file mode 100644
index 000000000..8d26dc19d
--- /dev/null
+++ b/tests/format/junctions/override-element/override-subsubproject.bst
@@ -0,0 +1,12 @@
+kind: import
+sources:
+- kind: local
+ path: element.txt
+
+#
+# Depend on the subsubproject element, and override it's dependency, the intermediate
+# project also overrides the same subsubproject element, and this test ensures
+# that the toplevel override takes precedence.
+#
+depends:
+- subproject-override-subsubproject-element.bst:subsubproject-override-dep.bst:subsubelement.bst
diff --git a/tests/format/junctions/override-element/project.conf b/tests/format/junctions/override-element/project.conf
new file mode 100644
index 000000000..20636c446
--- /dev/null
+++ b/tests/format/junctions/override-element/project.conf
@@ -0,0 +1,2 @@
+name: test
+min-version: 2.0
diff --git a/tests/format/junctions/override-element/subdep-override.bst b/tests/format/junctions/override-element/subdep-override.bst
new file mode 100644
index 000000000..93d4a5402
--- /dev/null
+++ b/tests/format/junctions/override-element/subdep-override.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: subdep-override.txt
diff --git a/tests/format/junctions/override-element/subdep-override.txt b/tests/format/junctions/override-element/subdep-override.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subdep-override.txt
diff --git a/tests/format/junctions/override-element/subelement-alternative-link.bst b/tests/format/junctions/override-element/subelement-alternative-link.bst
new file mode 100644
index 000000000..bd43d0750
--- /dev/null
+++ b/tests/format/junctions/override-element/subelement-alternative-link.bst
@@ -0,0 +1,8 @@
+kind: link
+
+#
+# This link replaces subelement.bst in the same project, use the
+# same junction to access the alternative in the subproject.
+#
+config:
+ target: subproject-override-element-with-link.bst:subelement-alternative.bst
diff --git a/tests/format/junctions/override-element/subelement-override.bst b/tests/format/junctions/override-element/subelement-override.bst
new file mode 100644
index 000000000..99715e098
--- /dev/null
+++ b/tests/format/junctions/override-element/subelement-override.bst
@@ -0,0 +1,14 @@
+kind: import
+sources:
+- kind: local
+ path: subelement-override.txt
+
+# We override the subproject direct dependency with this element,
+# and this element explicitly depends on it's dependency in that
+# subproject.
+#
+# The dependency we depend on happens to be the same dependency
+# as the element we are overridding.
+#
+depends:
+- subproject-override-element.bst:subdependency.bst
diff --git a/tests/format/junctions/override-element/subelement-override.txt b/tests/format/junctions/override-element/subelement-override.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subelement-override.txt
diff --git a/tests/format/junctions/override-element/subproject-override-dep.bst b/tests/format/junctions/override-element/subproject-override-dep.bst
new file mode 100644
index 000000000..f39b7393b
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject-override-dep.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subdependency.bst: subdep-override.bst
diff --git a/tests/format/junctions/override-element/subproject-override-element-using-link.bst b/tests/format/junctions/override-element/subproject-override-element-using-link.bst
new file mode 100644
index 000000000..f4d36d7ea
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject-override-element-using-link.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subelement-link.bst: subproject-override-element-using-link.bst:subelement-alternative.bst
diff --git a/tests/format/junctions/override-element/subproject-override-element-with-link.bst b/tests/format/junctions/override-element/subproject-override-element-with-link.bst
new file mode 100644
index 000000000..1a8a5fc53
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject-override-element-with-link.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subelement.bst: subelement-alternative-link.bst
diff --git a/tests/format/junctions/override-element/subproject-override-element.bst b/tests/format/junctions/override-element/subproject-override-element.bst
new file mode 100644
index 000000000..cc9fa80a4
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject-override-element.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subelement.bst: subelement-override.bst
diff --git a/tests/format/junctions/override-element/subproject-override-subsubproject-element.bst b/tests/format/junctions/override-element/subproject-override-subsubproject-element.bst
new file mode 100644
index 000000000..be8b900ad
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject-override-subsubproject-element.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subsubproject-override-dep.bst:subsubdependency.bst: subdep-override.bst
diff --git a/tests/format/junctions/override-element/subproject/project.conf b/tests/format/junctions/override-element/subproject/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/override-element/subproject/sub-alternative.txt b/tests/format/junctions/override-element/subproject/sub-alternative.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/sub-alternative.txt
diff --git a/tests/format/junctions/override-element/subproject/sub.txt b/tests/format/junctions/override-element/subproject/sub.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/sub.txt
diff --git a/tests/format/junctions/override-element/subproject/subdep.txt b/tests/format/junctions/override-element/subproject/subdep.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subdep.txt
diff --git a/tests/format/junctions/override-element/subproject/subdependency.bst b/tests/format/junctions/override-element/subproject/subdependency.bst
new file mode 100644
index 000000000..59e549210
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subdependency.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: subdep.txt
diff --git a/tests/format/junctions/override-element/subproject/subelement-alternative.bst b/tests/format/junctions/override-element/subproject/subelement-alternative.bst
new file mode 100644
index 000000000..51a063799
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subelement-alternative.bst
@@ -0,0 +1,7 @@
+kind: import
+sources:
+- kind: local
+ path: sub-alternative.txt
+
+depends:
+- subdependency.bst
diff --git a/tests/format/junctions/override-element/subproject/subelement-link.bst b/tests/format/junctions/override-element/subproject/subelement-link.bst
new file mode 100644
index 000000000..874969cee
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subelement-link.bst
@@ -0,0 +1,8 @@
+kind: link
+
+#
+# A link to the subelement, used by the override in
+# the subproject-override-element-using-link.bst junction
+#
+config:
+ target: subelement.bst
diff --git a/tests/format/junctions/override-element/subproject/subelement.bst b/tests/format/junctions/override-element/subproject/subelement.bst
new file mode 100644
index 000000000..aff3b3f6e
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subelement.bst
@@ -0,0 +1,7 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
+
+depends:
+- subdependency.bst
diff --git a/tests/format/junctions/override-element/subproject/subsubdep-override.bst b/tests/format/junctions/override-element/subproject/subsubdep-override.bst
new file mode 100644
index 000000000..9ab11a2f8
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubdep-override.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: subsubdep-override.txt
diff --git a/tests/format/junctions/override-element/subproject/subsubdep-override.txt b/tests/format/junctions/override-element/subproject/subsubdep-override.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubdep-override.txt
diff --git a/tests/format/junctions/override-element/subproject/subsubproject-override-dep.bst b/tests/format/junctions/override-element/subproject/subsubproject-override-dep.bst
new file mode 100644
index 000000000..6b2379d7c
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject-override-dep.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subsubproject
+
+config:
+ overrides:
+ subsubdependency.bst: subsubdep-override.bst
diff --git a/tests/format/junctions/override-element/subproject/subsubproject/project.conf b/tests/format/junctions/override-element/subproject/subsubproject/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/override-element/subproject/subsubproject/subsub.txt b/tests/format/junctions/override-element/subproject/subsubproject/subsub.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject/subsub.txt
diff --git a/tests/format/junctions/override-element/subproject/subsubproject/subsubdep.txt b/tests/format/junctions/override-element/subproject/subsubproject/subsubdep.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject/subsubdep.txt
diff --git a/tests/format/junctions/override-element/subproject/subsubproject/subsubdependency.bst b/tests/format/junctions/override-element/subproject/subsubproject/subsubdependency.bst
new file mode 100644
index 000000000..d235791b5
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject/subsubdependency.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: subsubdep.txt
diff --git a/tests/format/junctions/override-element/subproject/subsubproject/subsubelement.bst b/tests/format/junctions/override-element/subproject/subsubproject/subsubelement.bst
new file mode 100644
index 000000000..087a562b6
--- /dev/null
+++ b/tests/format/junctions/override-element/subproject/subsubproject/subsubelement.bst
@@ -0,0 +1,7 @@
+kind: import
+sources:
+- kind: local
+ path: subsub.txt
+
+depends:
+- subsubdependency.bst