You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by no...@apache.org on 2020/12/29 12:43:39 UTC
[buildstream] 03/04: WIP: Extend tests to cover repeat opening and
closing of workspaces
This is an automated email from the ASF dual-hosted git repository.
not-in-ldap pushed a commit to branch jonathan/workspace-fragment-multi-project
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 94fe346e2eab6afa620c5fc04ace3f550454a3f1
Author: Jonathan Maw <jo...@codethink.co.uk>
AuthorDate: Thu Jan 3 17:04:35 2019 +0000
WIP: Extend tests to cover repeat opening and closing of workspaces
Opening fails, and doing it right is pretty damn complicated.
---
tests/frontend/workspace.py | 101 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 85 insertions(+), 16 deletions(-)
diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py
index b420229..b992538 100644
--- a/tests/frontend/workspace.py
+++ b/tests/frontend/workspace.py
@@ -1243,12 +1243,88 @@ def test_external_list(cli, datafiles, tmpdir_factory):
@pytest.mark.datafiles(DATA_DIR)
+def test_multiple_projects_no_force(cli, datafiles, tmpdir_factory):
+ tmpdir1 = tmpdir_factory.mktemp('')
+ tmpdir2 = tmpdir_factory.mktemp('')
+ workspace_dir = os.path.join(str(tmpdir1), "workspace")
+ alpha_project = os.path.join(str(tmpdir1), "alpha-project")
+ beta_project = os.path.join(str(tmpdir2), "beta-project")
+
+ # Open the same workspace with two different projects
+ # without force, we expect this to fail.
+ alpha_element, alpha_project, _ = open_workspace(
+ cli, tmpdir1, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=alpha_project, suffix="-alpha"
+ )
+
+ message = "Opening an already-existing workspace without --force should fail"
+ with pytest.raises(AssertionError, message=message):
+ open_workspace(cli, tmpdir2, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=beta_project, suffix="-beta", force=False)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_multiple_projects_repeat_open(cli, datafiles, tmpdir_factory):
+ tmpdir1 = tmpdir_factory.mktemp('')
+ tmpdir2 = tmpdir_factory.mktemp('')
+ workspace_dir = os.path.join(str(tmpdir1), "workspace")
+ other_workspace = os.path.join(str(tmpdir1), "workspace2")
+ alpha_project = os.path.join(str(tmpdir1), "alpha-project")
+ beta_project = os.path.join(str(tmpdir2), "beta-project")
+
+ # Open the same workspace with the same project twice to different workspaces
+ # Expect this to succeed because we must use --force for multiple project
+ # behaviour, anyway.
+ # This test mostly exists so that this behaviour stays consistent.
+ alpha_element, alpha_project, _ = open_workspace(
+ cli, tmpdir1, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=alpha_project, suffix="-alpha"
+ )
+
+ args = ['-C', workspace_dir, 'workspace', 'open', '-f', '--directory',
+ other_workspace, alpha_element]
+ result = cli.run(project=alpha_project, args=args)
+ result.assert_success()
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_multiple_projects_repeat_close(cli, datafiles, tmpdir_factory):
+ tmpdir1 = tmpdir_factory.mktemp('')
+ tmpdir2 = tmpdir_factory.mktemp('')
+ workspace_dir = os.path.join(str(tmpdir1), "workspace")
+ alpha_project = os.path.join(str(tmpdir1), "alpha-project")
+ beta_project = os.path.join(str(tmpdir2), "beta-project")
+
+ alpha_element, alpha_project, _ = open_workspace(
+ cli, tmpdir1, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=alpha_project, suffix="-alpha"
+ )
+
+ beta_element, beta_project, _ = open_workspace(
+ cli, tmpdir2, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=beta_project, suffix="-beta", force=True
+ )
+
+ # Close the workspace from one project
+ args = ["-C", workspace_dir, "workspace", "close"]
+ result = cli.run(project=alpha_project, args=args)
+ result.assert_success()
+
+ # Close the workspace from the other project
+ result = cli.run(project=beta_project, args=args)
+ result.assert_success()
+
+ # Close the project after it's been closed
+ result = cli.run(project=beta_project, args=args)
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.MISSING_PROJECT_CONF)
+
+
+@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
- "force, close_from_external",
- [(False, False), (True, True), (True, False)],
- ids=["no-force", "close-from-external", "no-close-from-external"]
+ "close_from_external", [(True), (False)],
+ ids=["close-from-external", "no-close-from-external"]
)
-def test_multiple_projects(cli, datafiles, tmpdir_factory, force, close_from_external):
+def test_multiple_projects(cli, datafiles, tmpdir_factory, close_from_external):
# i.e. multiple projects can open the same workspace
tmpdir1 = tmpdir_factory.mktemp('')
tmpdir2 = tmpdir_factory.mktemp('')
@@ -1261,18 +1337,11 @@ def test_multiple_projects(cli, datafiles, tmpdir_factory, force, close_from_ext
cli, tmpdir1, datafiles, "git", False, workspace_dir=workspace_dir,
project_path=alpha_project, suffix="-alpha"
)
- if force:
- beta_element, beta_project, _ = open_workspace(
- cli, tmpdir2, datafiles, "git", False, workspace_dir=workspace_dir,
- project_path=beta_project, suffix="-beta", force=force
- )
- else:
- # Opening a workspace on an existing workspace must only work with "--force"
- message = "Opening an already-existing workspace without --force should fail"
- with pytest.raises(AssertionError, message=message):
- open_workspace(cli, tmpdir2, datafiles, "git", False, workspace_dir=workspace_dir,
- project_path=beta_project, suffix="-beta", force=force)
- return
+
+ beta_element, beta_project, _ = open_workspace(
+ cli, tmpdir2, datafiles, "git", False, workspace_dir=workspace_dir,
+ project_path=beta_project, suffix="-beta", force=True
+ )
# Run a command and assert it came from the alpha-element
# Using element guessing as a way of easily telling which project was used