summaryrefslogtreecommitdiff
path: root/tests/frontend/cross_junction_workspace.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/frontend/cross_junction_workspace.py')
-rw-r--r--tests/frontend/cross_junction_workspace.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/frontend/cross_junction_workspace.py b/tests/frontend/cross_junction_workspace.py
new file mode 100644
index 000000000..eb2bc2eb8
--- /dev/null
+++ b/tests/frontend/cross_junction_workspace.py
@@ -0,0 +1,117 @@
+import os
+from tests.testutils import cli, create_repo
+from buildstream import _yaml
+
+
+def prepare_junction_project(cli, tmpdir):
+ main_project = tmpdir.join("main")
+ sub_project = tmpdir.join("sub")
+ os.makedirs(str(main_project))
+ os.makedirs(str(sub_project))
+
+ _yaml.dump({'name': 'main'}, str(main_project.join("project.conf")))
+ _yaml.dump({'name': 'sub'}, str(sub_project.join("project.conf")))
+
+ import_dir = tmpdir.join("import")
+ os.makedirs(str(import_dir))
+ with open(str(import_dir.join("hello.txt")), "w") as f:
+ f.write("hello!")
+
+ import_repo_dir = tmpdir.join("import_repo")
+ os.makedirs(str(import_repo_dir))
+ import_repo = create_repo("git", str(import_repo_dir))
+ import_ref = import_repo.create(str(import_dir))
+
+ _yaml.dump({'kind': 'import',
+ 'sources': [import_repo.source_config(ref=import_ref)]},
+ str(sub_project.join("data.bst")))
+
+ sub_repo_dir = tmpdir.join("sub_repo")
+ os.makedirs(str(sub_repo_dir))
+ sub_repo = create_repo("git", str(sub_repo_dir))
+ sub_ref = sub_repo.create(str(sub_project))
+
+ _yaml.dump({'kind': 'junction',
+ 'sources': [sub_repo.source_config(ref=sub_ref)]},
+ str(main_project.join("sub.bst")))
+
+ args = ['fetch', 'sub.bst']
+ result = cli.run(project=str(main_project), args=args)
+ result.assert_success()
+
+ return str(main_project)
+
+
+def open_cross_junction(cli, tmpdir):
+ project = prepare_junction_project(cli, tmpdir)
+ workspace = tmpdir.join("workspace")
+
+ element = 'sub.bst:data.bst'
+ args = ['workspace', 'open', element, str(workspace)]
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ assert cli.get_element_state(project, element) == 'buildable'
+ assert os.path.exists(str(workspace.join('hello.txt')))
+
+ return project, workspace
+
+
+def test_open_cross_junction(cli, tmpdir):
+ open_cross_junction(cli, tmpdir)
+
+
+def test_list_cross_junction(cli, tmpdir):
+ project, workspace = open_cross_junction(cli, tmpdir)
+
+ element = 'sub.bst:data.bst'
+
+ args = ['workspace', 'list']
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ loaded = _yaml.load_data(result.output)
+ assert isinstance(loaded.get('workspaces'), list)
+ workspaces = loaded['workspaces']
+ assert len(workspaces) == 1
+ assert 'element' in workspaces[0]
+ assert workspaces[0]['element'] == element
+
+
+def test_close_cross_junction(cli, tmpdir):
+ project, workspace = open_cross_junction(cli, tmpdir)
+
+ element = 'sub.bst:data.bst'
+ args = ['workspace', 'close', '--remove-dir', element]
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ assert not os.path.exists(str(workspace))
+
+ args = ['workspace', 'list']
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ loaded = _yaml.load_data(result.output)
+ assert isinstance(loaded.get('workspaces'), list)
+ workspaces = loaded['workspaces']
+ assert len(workspaces) == 0
+
+
+def test_close_all_cross_junction(cli, tmpdir):
+ project, workspace = open_cross_junction(cli, tmpdir)
+
+ args = ['workspace', 'close', '--remove-dir', '--all']
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ assert not os.path.exists(str(workspace))
+
+ args = ['workspace', 'list']
+ result = cli.run(project=project, args=args)
+ result.assert_success()
+
+ loaded = _yaml.load_data(result.output)
+ assert isinstance(loaded.get('workspaces'), list)
+ workspaces = loaded['workspaces']
+ assert len(workspaces) == 0