Loading tests/frontend/source_checkout.py +17 −2 Original line number Diff line number Diff line Loading @@ -28,12 +28,27 @@ def generate_remote_import_element(input_path, output_path): @pytest.mark.datafiles(DATA_DIR) def test_source_checkout(datafiles, cli): @pytest.mark.parametrize( "from_workspace,guess_element", [("workspace", "guess"), ("workspace", "no-guess"), ("no-workspace", "no-guess")] ) def test_source_checkout(datafiles, cli, tmpdir_factory, from_workspace, guess_element): tmpdir = tmpdir_factory.mktemp("") project = os.path.join(datafiles.dirname, datafiles.basename) checkout = os.path.join(cli.directory, 'source-checkout') target = 'checkout-deps.bst' workspace = os.path.join(str(tmpdir), 'workspace') elm_cmd = [target] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['source-checkout', target, '--deps', 'none', checkout]) if from_workspace == "workspace": ws_cmd = ['-C', workspace] result = cli.run(project=project, args=["workspace", "open", "--directory", workspace, target]) result.assert_success() else: ws_cmd = [] args = ws_cmd + ['source-checkout', '--deps', 'none'] + elm_cmd + [checkout] result = cli.run(project=project, args=args) result.assert_success() assert os.path.exists(os.path.join(checkout, 'checkout-deps', 'etc', 'buildstream', 'config')) Loading tests/frontend/workspace.py +33 −17 Original line number Diff line number Diff line Loading @@ -616,12 +616,15 @@ def test_list(cli, tmpdir, datafiles): @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) @pytest.mark.parametrize("strict", [("strict"), ("non-strict")]) @pytest.mark.parametrize("call_from", [("project"), ("workspace")]) def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from): @pytest.mark.parametrize("call_from,guess_element", [ ("project", "no-guess"), ("workspace", "guess"), ("workspace", "no-guess") ]) def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from, guess_element): tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False) checkout = os.path.join(str(tmpdir), 'checkout') args_pre = ['-C', workspace] if call_from == "workspace" else [] args_dir = ['-C', workspace] if call_from == "workspace" else [] args_elm = [element_name] if guess_element == "no-guess" else [] # Modify workspace shutil.rmtree(os.path.join(workspace, 'usr', 'bin')) Loading @@ -644,14 +647,14 @@ def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from): # Build modified workspace assert cli.get_element_state(project, element_name) == 'buildable' assert cli.get_element_key(project, element_name) == "{:?<64}".format('') result = cli.run(project=project, args=args_pre + ['build', element_name]) result = cli.run(project=project, args=args_dir + ['build'] + args_elm) result.assert_success() assert cli.get_element_state(project, element_name) == 'cached' assert cli.get_element_key(project, element_name) != "{:?<64}".format('') # Checkout the result result = cli.run(project=project, args=args_pre + ['checkout', element_name, checkout]) args=args_dir + ['checkout'] + args_elm + [checkout]) result.assert_success() # Check that the pony.conf from the modified workspace exists Loading Loading @@ -1061,24 +1064,31 @@ def test_multiple_failed_builds(cli, tmpdir, datafiles): @pytest.mark.datafiles(DATA_DIR) def test_external_fetch(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_fetch(cli, datafiles, tmpdir_factory, guess_element): # Fetching from a workspace outside a project doesn't fail horribly tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) arg_elm = [element_name] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['-C', workspace, 'fetch', element_name]) result = cli.run(project=project, args=['-C', workspace, 'fetch'] + arg_elm) result.assert_success() # We already fetched it by opening the workspace, but we're also checking # `bst show` works here assert cli.get_element_state(project, element_name) == 'buildable' result = cli.run(project=project, args=['-C', workspace, 'show', '--deps', 'none', '--format', '%{state}'] + arg_elm) result.assert_success() assert result.output.strip() == 'buildable' @pytest.mark.datafiles(DATA_DIR) def test_external_push_pull(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_push_pull(cli, datafiles, tmpdir_factory, guess_element): # Pushing and pulling to/from an artifact cache works from an external workspace tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) args_elm = [element_name] if guess_element == "no-guess" else [] with create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) as share: result = cli.run(project=project, args=['-C', workspace, 'build', element_name]) Loading @@ -1088,22 +1098,24 @@ def test_external_push_pull(cli, datafiles, tmpdir_factory): 'artifacts': {'url': share.repo, 'push': True} }) result = cli.run(project=project, args=['-C', workspace, 'push', element_name]) result = cli.run(project=project, args=['-C', workspace, 'push'] + args_elm) result.assert_success() result = cli.run(project=project, args=['-C', workspace, 'pull', '--deps', 'all', element_name]) result = cli.run(project=project, args=['-C', workspace, 'pull', '--deps', 'all'] + args_elm) result.assert_success() @pytest.mark.datafiles(DATA_DIR) def test_external_track(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_track(cli, datafiles, tmpdir_factory, guess_element): # Tracking does not get horribly confused tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", True) args_elm = [element_name] if guess_element == "no-guess" else [] # The workspace is necessarily already tracked, so we only care that # there's no weird errors. result = cli.run(project=project, args=['-C', workspace, 'track', element_name]) result = cli.run(project=project, args=['-C', workspace, 'track'] + args_elm) result.assert_success() Loading Loading @@ -1141,15 +1153,17 @@ def test_external_close_other(cli, datafiles, tmpdir_factory): @pytest.mark.datafiles(DATA_DIR) def test_external_close_self(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_close_self(cli, datafiles, tmpdir_factory, guess_element): # From inside an external workspace, close it tmpdir1 = tmpdir_factory.mktemp('') tmpdir2 = tmpdir_factory.mktemp('') # Making use of the assumption that it's the same project in both invocations of open_workspace alpha_element, project, alpha_workspace = open_workspace(cli, tmpdir1, datafiles, "git", False, suffix="-alpha") beta_element, _, beta_workspace = open_workspace(cli, tmpdir2, datafiles, "git", False, suffix="-beta") arg_elm = [alpha_element] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close', alpha_element]) result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close'] + arg_elm) result.assert_success() Loading @@ -1166,11 +1180,13 @@ def test_external_reset_other(cli, datafiles, tmpdir_factory): @pytest.mark.datafiles(DATA_DIR) def test_external_reset_self(cli, datafiles, tmpdir): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_reset_self(cli, datafiles, tmpdir, guess_element): element, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) arg_elm = [element] if guess_element == "no-guess" else [] # Command succeeds result = cli.run(project=project, args=['-C', workspace, 'workspace', 'reset', element]) result = cli.run(project=project, args=['-C', workspace, 'workspace', 'reset'] + arg_elm) result.assert_success() # Successive commands still work (i.e. .bstproject.yaml hasn't been deleted) Loading tests/integration/shell.py +13 −3 Original line number Diff line number Diff line Loading @@ -358,13 +358,22 @@ def test_integration_devices(cli, tmpdir, datafiles): # Test that a shell can be opened from an external workspace @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("build_shell", [("build"), ("nobuild")]) @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) @pytest.mark.skipif(IS_LINUX and not HAVE_BWRAP, reason='Only available with bubblewrap on Linux') def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_shell): def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_shell, guess_element): tmpdir = tmpdir_factory.mktemp("") project = os.path.join(datafiles.dirname, datafiles.basename) element_name = 'autotools/amhello.bst' workspace_dir = os.path.join(str(tmpdir), 'workspace') if guess_element == "guess": # Mutate the project.conf to use a default shell command project_file = os.path.join(project, 'project.conf') config_text = "shell:\n"\ " command: ['true']\n" with open(project_file, 'a') as f: f.write(config_text) result = cli.run(project=project, args=[ 'workspace', 'open', '--directory', workspace_dir, element_name ]) Loading @@ -373,9 +382,10 @@ def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_sh result = cli.run(project=project, args=['-C', workspace_dir, 'build', element_name]) result.assert_success() command = ['shell'] command = ['-C', workspace_dir, 'shell'] if build_shell == 'build': command.append('--build') if guess_element == "no-guess": command.extend([element_name, '--', 'true']) result = cli.run(project=project, cwd=workspace_dir, args=command) result.assert_success() Loading
tests/frontend/source_checkout.py +17 −2 Original line number Diff line number Diff line Loading @@ -28,12 +28,27 @@ def generate_remote_import_element(input_path, output_path): @pytest.mark.datafiles(DATA_DIR) def test_source_checkout(datafiles, cli): @pytest.mark.parametrize( "from_workspace,guess_element", [("workspace", "guess"), ("workspace", "no-guess"), ("no-workspace", "no-guess")] ) def test_source_checkout(datafiles, cli, tmpdir_factory, from_workspace, guess_element): tmpdir = tmpdir_factory.mktemp("") project = os.path.join(datafiles.dirname, datafiles.basename) checkout = os.path.join(cli.directory, 'source-checkout') target = 'checkout-deps.bst' workspace = os.path.join(str(tmpdir), 'workspace') elm_cmd = [target] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['source-checkout', target, '--deps', 'none', checkout]) if from_workspace == "workspace": ws_cmd = ['-C', workspace] result = cli.run(project=project, args=["workspace", "open", "--directory", workspace, target]) result.assert_success() else: ws_cmd = [] args = ws_cmd + ['source-checkout', '--deps', 'none'] + elm_cmd + [checkout] result = cli.run(project=project, args=args) result.assert_success() assert os.path.exists(os.path.join(checkout, 'checkout-deps', 'etc', 'buildstream', 'config')) Loading
tests/frontend/workspace.py +33 −17 Original line number Diff line number Diff line Loading @@ -616,12 +616,15 @@ def test_list(cli, tmpdir, datafiles): @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) @pytest.mark.parametrize("strict", [("strict"), ("non-strict")]) @pytest.mark.parametrize("call_from", [("project"), ("workspace")]) def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from): @pytest.mark.parametrize("call_from,guess_element", [ ("project", "no-guess"), ("workspace", "guess"), ("workspace", "no-guess") ]) def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from, guess_element): tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False) checkout = os.path.join(str(tmpdir), 'checkout') args_pre = ['-C', workspace] if call_from == "workspace" else [] args_dir = ['-C', workspace] if call_from == "workspace" else [] args_elm = [element_name] if guess_element == "no-guess" else [] # Modify workspace shutil.rmtree(os.path.join(workspace, 'usr', 'bin')) Loading @@ -644,14 +647,14 @@ def test_build(cli, tmpdir_factory, datafiles, kind, strict, call_from): # Build modified workspace assert cli.get_element_state(project, element_name) == 'buildable' assert cli.get_element_key(project, element_name) == "{:?<64}".format('') result = cli.run(project=project, args=args_pre + ['build', element_name]) result = cli.run(project=project, args=args_dir + ['build'] + args_elm) result.assert_success() assert cli.get_element_state(project, element_name) == 'cached' assert cli.get_element_key(project, element_name) != "{:?<64}".format('') # Checkout the result result = cli.run(project=project, args=args_pre + ['checkout', element_name, checkout]) args=args_dir + ['checkout'] + args_elm + [checkout]) result.assert_success() # Check that the pony.conf from the modified workspace exists Loading Loading @@ -1061,24 +1064,31 @@ def test_multiple_failed_builds(cli, tmpdir, datafiles): @pytest.mark.datafiles(DATA_DIR) def test_external_fetch(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_fetch(cli, datafiles, tmpdir_factory, guess_element): # Fetching from a workspace outside a project doesn't fail horribly tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) arg_elm = [element_name] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['-C', workspace, 'fetch', element_name]) result = cli.run(project=project, args=['-C', workspace, 'fetch'] + arg_elm) result.assert_success() # We already fetched it by opening the workspace, but we're also checking # `bst show` works here assert cli.get_element_state(project, element_name) == 'buildable' result = cli.run(project=project, args=['-C', workspace, 'show', '--deps', 'none', '--format', '%{state}'] + arg_elm) result.assert_success() assert result.output.strip() == 'buildable' @pytest.mark.datafiles(DATA_DIR) def test_external_push_pull(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_push_pull(cli, datafiles, tmpdir_factory, guess_element): # Pushing and pulling to/from an artifact cache works from an external workspace tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) args_elm = [element_name] if guess_element == "no-guess" else [] with create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) as share: result = cli.run(project=project, args=['-C', workspace, 'build', element_name]) Loading @@ -1088,22 +1098,24 @@ def test_external_push_pull(cli, datafiles, tmpdir_factory): 'artifacts': {'url': share.repo, 'push': True} }) result = cli.run(project=project, args=['-C', workspace, 'push', element_name]) result = cli.run(project=project, args=['-C', workspace, 'push'] + args_elm) result.assert_success() result = cli.run(project=project, args=['-C', workspace, 'pull', '--deps', 'all', element_name]) result = cli.run(project=project, args=['-C', workspace, 'pull', '--deps', 'all'] + args_elm) result.assert_success() @pytest.mark.datafiles(DATA_DIR) def test_external_track(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_track(cli, datafiles, tmpdir_factory, guess_element): # Tracking does not get horribly confused tmpdir = tmpdir_factory.mktemp('') element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", True) args_elm = [element_name] if guess_element == "no-guess" else [] # The workspace is necessarily already tracked, so we only care that # there's no weird errors. result = cli.run(project=project, args=['-C', workspace, 'track', element_name]) result = cli.run(project=project, args=['-C', workspace, 'track'] + args_elm) result.assert_success() Loading Loading @@ -1141,15 +1153,17 @@ def test_external_close_other(cli, datafiles, tmpdir_factory): @pytest.mark.datafiles(DATA_DIR) def test_external_close_self(cli, datafiles, tmpdir_factory): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_close_self(cli, datafiles, tmpdir_factory, guess_element): # From inside an external workspace, close it tmpdir1 = tmpdir_factory.mktemp('') tmpdir2 = tmpdir_factory.mktemp('') # Making use of the assumption that it's the same project in both invocations of open_workspace alpha_element, project, alpha_workspace = open_workspace(cli, tmpdir1, datafiles, "git", False, suffix="-alpha") beta_element, _, beta_workspace = open_workspace(cli, tmpdir2, datafiles, "git", False, suffix="-beta") arg_elm = [alpha_element] if guess_element == "no-guess" else [] result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close', alpha_element]) result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close'] + arg_elm) result.assert_success() Loading @@ -1166,11 +1180,13 @@ def test_external_reset_other(cli, datafiles, tmpdir_factory): @pytest.mark.datafiles(DATA_DIR) def test_external_reset_self(cli, datafiles, tmpdir): @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) def test_external_reset_self(cli, datafiles, tmpdir, guess_element): element, project, workspace = open_workspace(cli, tmpdir, datafiles, "git", False) arg_elm = [element] if guess_element == "no-guess" else [] # Command succeeds result = cli.run(project=project, args=['-C', workspace, 'workspace', 'reset', element]) result = cli.run(project=project, args=['-C', workspace, 'workspace', 'reset'] + arg_elm) result.assert_success() # Successive commands still work (i.e. .bstproject.yaml hasn't been deleted) Loading
tests/integration/shell.py +13 −3 Original line number Diff line number Diff line Loading @@ -358,13 +358,22 @@ def test_integration_devices(cli, tmpdir, datafiles): # Test that a shell can be opened from an external workspace @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("build_shell", [("build"), ("nobuild")]) @pytest.mark.parametrize("guess_element", [("guess"), ("no-guess")]) @pytest.mark.skipif(IS_LINUX and not HAVE_BWRAP, reason='Only available with bubblewrap on Linux') def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_shell): def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_shell, guess_element): tmpdir = tmpdir_factory.mktemp("") project = os.path.join(datafiles.dirname, datafiles.basename) element_name = 'autotools/amhello.bst' workspace_dir = os.path.join(str(tmpdir), 'workspace') if guess_element == "guess": # Mutate the project.conf to use a default shell command project_file = os.path.join(project, 'project.conf') config_text = "shell:\n"\ " command: ['true']\n" with open(project_file, 'a') as f: f.write(config_text) result = cli.run(project=project, args=[ 'workspace', 'open', '--directory', workspace_dir, element_name ]) Loading @@ -373,9 +382,10 @@ def test_integration_external_workspace(cli, tmpdir_factory, datafiles, build_sh result = cli.run(project=project, args=['-C', workspace_dir, 'build', element_name]) result.assert_success() command = ['shell'] command = ['-C', workspace_dir, 'shell'] if build_shell == 'build': command.append('--build') if guess_element == "no-guess": command.extend([element_name, '--', 'true']) result = cli.run(project=project, cwd=workspace_dir, args=command) result.assert_success()