You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by ro...@apache.org on 2020/12/29 13:41:56 UTC

[buildstream] 02/02: tests/frontend/workspace.py: Test that all elements build with workspace in play

This is an automated email from the ASF dual-hosted git repository.

root pushed a commit to branch tristan/fix-workspace-build-all
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 18095c9befc53148e36740107b42dcb35d3a2fee
Author: Tristan Van Berkom <tr...@codethink.co.uk>
AuthorDate: Sat Feb 23 17:35:58 2019 +0900

    tests/frontend/workspace.py: Test that all elements build with workspace in play
    
    Tests that the target is still built even when a workspace is open
    on a runtime dependency of a build-only dependency.
    
    This adds the regression test provided by Matthew Yates for issue #919
---
 tests/frontend/workspace.py                        | 42 ++++++++++++++++++++++
 .../workspaced-build-dep/elements/elem1.bst        |  5 +++
 .../workspaced-build-dep/elements/elem2.bst        |  5 +++
 .../workspaced-build-dep/elements/elem3.bst        |  9 +++++
 .../workspaced-build-dep/elements/stack.bst        |  5 +++
 tests/frontend/workspaced-build-dep/files/file1    |  0
 tests/frontend/workspaced-build-dep/files/file2    |  0
 tests/frontend/workspaced-build-dep/files/file3    |  0
 tests/frontend/workspaced-build-dep/project.conf   |  8 +++++
 9 files changed, 74 insertions(+)

diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py
index 91004b9..a90ab97 100644
--- a/tests/frontend/workspace.py
+++ b/tests/frontend/workspace.py
@@ -1238,3 +1238,45 @@ def test_external_list(cli, datafiles, tmpdir_factory):
 
     result = cli.run(project=project, args=['-C', workspace, 'workspace', 'list'])
     result.assert_success()
+
+
+# This strange test tests against a regression raised in issue #919,
+# where opening a workspace on a runtime dependency of a build only
+# dependency causes `bst build` to not build the specified target
+# but just successfully builds the workspaced element and happily
+# exits without completing the build.
+#
+BUILD_ALL_DIR = os.path.join(
+    os.path.dirname(os.path.realpath(__file__)),
+    "workspaced-build-dep",
+)
+
+
+@pytest.mark.datafiles(BUILD_ALL_DIR)
+@pytest.mark.parametrize("strict", [("strict"), ("non-strict")])
+def test_build_all(cli, tmpdir, datafiles, strict):
+    project = str(datafiles)
+    workspace = os.path.join(str(tmpdir), 'workspace')
+
+    # Configure strict mode
+    strict_mode = True
+    if strict != 'strict':
+        strict_mode = False
+    cli.configure({
+        'projects': {
+            'test': {
+                'strict': strict_mode
+            }
+        }
+    })
+
+    # First open the workspace
+    result = cli.run(project=project, args=['workspace', 'open', '--directory', workspace, 'elem1.bst'])
+    result.assert_success()
+
+    # Now build the target elem3.bst
+    result = cli.run(project=project, args=['build', 'elem3.bst'])
+    result.assert_success()
+
+    # Assert that the target is built
+    assert cli.get_element_state(project, 'elem3.bst') == 'cached'
diff --git a/tests/frontend/workspaced-build-dep/elements/elem1.bst b/tests/frontend/workspaced-build-dep/elements/elem1.bst
new file mode 100644
index 0000000..eed39a9
--- /dev/null
+++ b/tests/frontend/workspaced-build-dep/elements/elem1.bst
@@ -0,0 +1,5 @@
+kind: import
+
+sources:
+- kind: local
+  path: files/file1
diff --git a/tests/frontend/workspaced-build-dep/elements/elem2.bst b/tests/frontend/workspaced-build-dep/elements/elem2.bst
new file mode 100644
index 0000000..1233c08
--- /dev/null
+++ b/tests/frontend/workspaced-build-dep/elements/elem2.bst
@@ -0,0 +1,5 @@
+kind: import
+
+sources:
+- kind: local
+  path: files/file2
diff --git a/tests/frontend/workspaced-build-dep/elements/elem3.bst b/tests/frontend/workspaced-build-dep/elements/elem3.bst
new file mode 100644
index 0000000..4c9bf89
--- /dev/null
+++ b/tests/frontend/workspaced-build-dep/elements/elem3.bst
@@ -0,0 +1,9 @@
+kind: import
+
+depends:
+- filename: stack.bst
+  type: build
+
+sources:
+- kind: local
+  path: files/file3
diff --git a/tests/frontend/workspaced-build-dep/elements/stack.bst b/tests/frontend/workspaced-build-dep/elements/stack.bst
new file mode 100644
index 0000000..6ba3614
--- /dev/null
+++ b/tests/frontend/workspaced-build-dep/elements/stack.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- elem1.bst
+- elem2.bst
diff --git a/tests/frontend/workspaced-build-dep/files/file1 b/tests/frontend/workspaced-build-dep/files/file1
new file mode 100644
index 0000000..e69de29
diff --git a/tests/frontend/workspaced-build-dep/files/file2 b/tests/frontend/workspaced-build-dep/files/file2
new file mode 100644
index 0000000..e69de29
diff --git a/tests/frontend/workspaced-build-dep/files/file3 b/tests/frontend/workspaced-build-dep/files/file3
new file mode 100644
index 0000000..e69de29
diff --git a/tests/frontend/workspaced-build-dep/project.conf b/tests/frontend/workspaced-build-dep/project.conf
new file mode 100644
index 0000000..e017957
--- /dev/null
+++ b/tests/frontend/workspaced-build-dep/project.conf
@@ -0,0 +1,8 @@
+# Unique project name
+name: test
+
+# Required BuildStream format version
+format-version: 12
+
+# Subdirectory where elements are stored
+element-path: elements