summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan van Berkom <tristan.vanberkom@codethink.co.uk>2020-06-06 19:47:07 +0900
committerTristan van Berkom <tristan.vanberkom@codethink.co.uk>2020-07-25 18:05:49 +0900
commit6165611ba47bd6c5139617e6e23d3068231c3844 (patch)
treedbd32eeace012b87c2abc7ed2c9ddfa1d3dc961b
parent926a9186a226a5c2eb19d24f47eb2592c2edb484 (diff)
downloadbuildstream-6165611ba47bd6c5139617e6e23d3068231c3844.tar.gz
tests/integration/script.py: Test element relative search paths in Element.search()
This adds some subprojects to the integration test, and extends the script layout test such that it tests: * The original layout test * Addressing elements in subprojects * Addressing elements in subprojects when also loaded as a subproject (i.e. this test that searches are element relative, and not simply searches for full element paths).
-rw-r--r--tests/integration/project/elements/script/script-cross-junction-layout.bst21
-rw-r--r--tests/integration/project/elements/script/script-deep-target.bst4
-rw-r--r--tests/integration/project/elements/subproject.bst9
-rw-r--r--tests/integration/project/project.conf1
-rw-r--r--tests/integration/project/subproject/elements/base.bst5
-rw-r--r--tests/integration/project/subproject/elements/base/base-alpine.bst17
-rw-r--r--tests/integration/project/subproject/elements/script/script-cross-junction-layout.bst21
-rw-r--r--tests/integration/project/subproject/elements/script/script.bst9
-rw-r--r--tests/integration/project/subproject/elements/subsubproject.bst9
-rw-r--r--tests/integration/project/subproject/project.conf21
-rw-r--r--tests/integration/project/subproject/subsubproject/elements/base.bst5
-rw-r--r--tests/integration/project/subproject/subsubproject/elements/base/base-alpine.bst17
-rw-r--r--tests/integration/project/subproject/subsubproject/elements/script/script.bst9
-rw-r--r--tests/integration/project/subproject/subsubproject/project.conf21
-rw-r--r--tests/integration/script.py20
15 files changed, 184 insertions, 5 deletions
diff --git a/tests/integration/project/elements/script/script-cross-junction-layout.bst b/tests/integration/project/elements/script/script-cross-junction-layout.bst
new file mode 100644
index 000000000..ad6783569
--- /dev/null
+++ b/tests/integration/project/elements/script/script-cross-junction-layout.bst
@@ -0,0 +1,21 @@
+kind: script
+description: Write to root using a script element
+
+variables:
+ install-root: /buildstream/nstall
+ build-root: /buildstream/uild
+
+build-depends:
+ - subproject.bst:base.bst
+ - subproject.bst:script/script.bst
+
+config:
+ layout:
+ - element: subproject.bst:base.bst
+ destination: /
+
+ - element: subproject.bst:script/script.bst
+ destination: /buildstream/uild
+
+ commands:
+ - "cp %{build-root}/subtest %{install-root}"
diff --git a/tests/integration/project/elements/script/script-deep-target.bst b/tests/integration/project/elements/script/script-deep-target.bst
new file mode 100644
index 000000000..14935dd14
--- /dev/null
+++ b/tests/integration/project/elements/script/script-deep-target.bst
@@ -0,0 +1,4 @@
+kind: stack
+
+depends:
+- subproject.bst:script/script-cross-junction-layout.bst
diff --git a/tests/integration/project/elements/subproject.bst b/tests/integration/project/elements/subproject.bst
new file mode 100644
index 000000000..0ac454f0e
--- /dev/null
+++ b/tests/integration/project/elements/subproject.bst
@@ -0,0 +1,9 @@
+kind: junction
+
+sources:
+- kind: local
+ path: subproject
+
+config:
+ options:
+ arch: "%{build_arch}"
diff --git a/tests/integration/project/project.conf b/tests/integration/project/project.conf
index 2d3da467b..1a48f9ee3 100644
--- a/tests/integration/project/project.conf
+++ b/tests/integration/project/project.conf
@@ -10,6 +10,7 @@ options:
type: bool
description: Whether to expect a linux platform
default: True
+ variable: linux
arch:
type: arch
description: Current architecture
diff --git a/tests/integration/project/subproject/elements/base.bst b/tests/integration/project/subproject/elements/base.bst
new file mode 100644
index 000000000..428afa736
--- /dev/null
+++ b/tests/integration/project/subproject/elements/base.bst
@@ -0,0 +1,5 @@
+# elements/base.bst
+
+kind: stack
+depends:
+ - base/base-alpine.bst
diff --git a/tests/integration/project/subproject/elements/base/base-alpine.bst b/tests/integration/project/subproject/elements/base/base-alpine.bst
new file mode 100644
index 000000000..c5833095d
--- /dev/null
+++ b/tests/integration/project/subproject/elements/base/base-alpine.bst
@@ -0,0 +1,17 @@
+kind: import
+
+description: |
+ Alpine Linux base for tests
+
+ Generated using the `tests/integration-tests/base/generate-base.sh` script.
+
+sources:
+ - kind: tar
+ base-dir: ''
+ (?):
+ - arch == "x86-64":
+ ref: 3eb559250ba82b64a68d86d0636a6b127aa5f6d25d3601a79f79214dc9703639
+ url: "alpine:integration-tests-base.v1.x86_64.tar.xz"
+ - arch == "aarch64":
+ ref: 431fb5362032ede6f172e70a3258354a8fd71fcbdeb1edebc0e20968c792329a
+ url: "alpine:integration-tests-base.v1.aarch64.tar.xz"
diff --git a/tests/integration/project/subproject/elements/script/script-cross-junction-layout.bst b/tests/integration/project/subproject/elements/script/script-cross-junction-layout.bst
new file mode 100644
index 000000000..58ccdec04
--- /dev/null
+++ b/tests/integration/project/subproject/elements/script/script-cross-junction-layout.bst
@@ -0,0 +1,21 @@
+kind: script
+description: Write to root using a script element
+
+variables:
+ install-root: /buildstream/nstall
+ build-root: /buildstream/uild
+
+build-depends:
+ - subsubproject.bst:base.bst
+ - subsubproject.bst:script/script.bst
+
+config:
+ layout:
+ - element: subsubproject.bst:base.bst
+ destination: /
+
+ - element: subsubproject.bst:script/script.bst
+ destination: /buildstream/uild
+
+ commands:
+ - "cp %{build-root}/subsubtest %{install-root}"
diff --git a/tests/integration/project/subproject/elements/script/script.bst b/tests/integration/project/subproject/elements/script/script.bst
new file mode 100644
index 000000000..1bb24f631
--- /dev/null
+++ b/tests/integration/project/subproject/elements/script/script.bst
@@ -0,0 +1,9 @@
+kind: script
+description: Script test
+
+build-depends:
+- base.bst
+
+config:
+ commands:
+ - "echo 'Hi' > %{install-root}/subtest"
diff --git a/tests/integration/project/subproject/elements/subsubproject.bst b/tests/integration/project/subproject/elements/subsubproject.bst
new file mode 100644
index 000000000..c38d62163
--- /dev/null
+++ b/tests/integration/project/subproject/elements/subsubproject.bst
@@ -0,0 +1,9 @@
+kind: junction
+
+sources:
+- kind: local
+ path: subsubproject
+
+config:
+ options:
+ arch: "%{build_arch}"
diff --git a/tests/integration/project/subproject/project.conf b/tests/integration/project/subproject/project.conf
new file mode 100644
index 000000000..597157fd1
--- /dev/null
+++ b/tests/integration/project/subproject/project.conf
@@ -0,0 +1,21 @@
+# Project config for frontend build test
+name: subtest
+min-version: 2.0
+element-path: elements
+aliases:
+ alpine: https://bst-integration-test-images.ams3.cdn.digitaloceanspaces.com/
+ project_dir: file://{project_dir}
+options:
+ arch:
+ type: arch
+ description: Current architecture
+ variable: build_arch
+ values:
+ - x86-64
+ - aarch64
+split-rules:
+ test:
+ - |
+ /tests
+ - |
+ /tests/*
diff --git a/tests/integration/project/subproject/subsubproject/elements/base.bst b/tests/integration/project/subproject/subsubproject/elements/base.bst
new file mode 100644
index 000000000..428afa736
--- /dev/null
+++ b/tests/integration/project/subproject/subsubproject/elements/base.bst
@@ -0,0 +1,5 @@
+# elements/base.bst
+
+kind: stack
+depends:
+ - base/base-alpine.bst
diff --git a/tests/integration/project/subproject/subsubproject/elements/base/base-alpine.bst b/tests/integration/project/subproject/subsubproject/elements/base/base-alpine.bst
new file mode 100644
index 000000000..c5833095d
--- /dev/null
+++ b/tests/integration/project/subproject/subsubproject/elements/base/base-alpine.bst
@@ -0,0 +1,17 @@
+kind: import
+
+description: |
+ Alpine Linux base for tests
+
+ Generated using the `tests/integration-tests/base/generate-base.sh` script.
+
+sources:
+ - kind: tar
+ base-dir: ''
+ (?):
+ - arch == "x86-64":
+ ref: 3eb559250ba82b64a68d86d0636a6b127aa5f6d25d3601a79f79214dc9703639
+ url: "alpine:integration-tests-base.v1.x86_64.tar.xz"
+ - arch == "aarch64":
+ ref: 431fb5362032ede6f172e70a3258354a8fd71fcbdeb1edebc0e20968c792329a
+ url: "alpine:integration-tests-base.v1.aarch64.tar.xz"
diff --git a/tests/integration/project/subproject/subsubproject/elements/script/script.bst b/tests/integration/project/subproject/subsubproject/elements/script/script.bst
new file mode 100644
index 000000000..8c45dd8a8
--- /dev/null
+++ b/tests/integration/project/subproject/subsubproject/elements/script/script.bst
@@ -0,0 +1,9 @@
+kind: script
+description: Script test
+
+build-depends:
+- base.bst
+
+config:
+ commands:
+ - "echo 'Hi' > %{install-root}/subsubtest"
diff --git a/tests/integration/project/subproject/subsubproject/project.conf b/tests/integration/project/subproject/subsubproject/project.conf
new file mode 100644
index 000000000..1108d6ca7
--- /dev/null
+++ b/tests/integration/project/subproject/subsubproject/project.conf
@@ -0,0 +1,21 @@
+# Project config for frontend build test
+name: subsubtest
+min-version: 2.0
+element-path: elements
+aliases:
+ alpine: https://bst-integration-test-images.ams3.cdn.digitaloceanspaces.com/
+ project_dir: file://{project_dir}
+options:
+ arch:
+ type: arch
+ description: Current architecture
+ variable: build_arch
+ values:
+ - x86-64
+ - aarch64
+split-rules:
+ test:
+ - |
+ /tests
+ - |
+ /tests/*
diff --git a/tests/integration/script.py b/tests/integration/script.py
index 35a3fddaf..3d23f3861 100644
--- a/tests/integration/script.py
+++ b/tests/integration/script.py
@@ -147,19 +147,29 @@ def test_script_cwd(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize(
+ "target,expect_file",
+ [
+ # Basic test of the layout
+ ("script/script-layout.bst", "test"),
+ # Tests a script which addresses subproject elements with Element.search()
+ ("script/script-cross-junction-layout.bst", "subtest"),
+ # Tests element relative paths in Element.search()
+ ("script/script-deep-target.bst", "subsubtest"),
+ ],
+)
@pytest.mark.skipif(not HAVE_SANDBOX, reason="Only available with a functioning sandbox")
-def test_script_layout(cli, datafiles):
+def test_script_layout(cli, datafiles, target, expect_file):
project = str(datafiles)
checkout = os.path.join(cli.directory, "checkout")
- element_name = "script/script-layout.bst"
- res = cli.run(project=project, args=["build", element_name])
+ res = cli.run(project=project, args=["build", target])
assert res.exit_code == 0
- cli.run(project=project, args=["artifact", "checkout", element_name, "--directory", checkout])
+ cli.run(project=project, args=["artifact", "checkout", target, "--directory", checkout])
assert res.exit_code == 0
- with open(os.path.join(checkout, "test")) as f:
+ with open(os.path.join(checkout, expect_file)) as f:
text = f.read()
assert text == "Hi\n"