diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2018-10-09 16:36:08 +0100 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2018-11-14 13:30:34 +0000 |
commit | 90ca007ef3e97ff7d19ec96e8833c5c005f59b11 (patch) | |
tree | 9e5050319825003ab6fe0ccb6fe6535736739701 /tests/integration | |
parent | e9e088239b178b28a9916407cb6804941095eb26 (diff) | |
download | buildstream-90ca007ef3e97ff7d19ec96e8833c5c005f59b11.tar.gz |
tests/integration/sandbox-bwrap.py: Test distinguishing sandbox exit code from command
Diffstat (limited to 'tests/integration')
4 files changed, 58 insertions, 1 deletions
diff --git a/tests/integration/project/elements/sandbox-bwrap/break-shell.bst b/tests/integration/project/elements/sandbox-bwrap/break-shell.bst new file mode 100644 index 000000000..c93a92350 --- /dev/null +++ b/tests/integration/project/elements/sandbox-bwrap/break-shell.bst @@ -0,0 +1,9 @@ +kind: manual +depends: + - base/base-alpine.bst + +public: + bst: + integration-commands: + - | + chmod a-x /bin/sh diff --git a/tests/integration/project/elements/sandbox-bwrap/command-exit-42.bst b/tests/integration/project/elements/sandbox-bwrap/command-exit-42.bst new file mode 100644 index 000000000..c633334ae --- /dev/null +++ b/tests/integration/project/elements/sandbox-bwrap/command-exit-42.bst @@ -0,0 +1,8 @@ +kind: manual +depends: + - base/base-alpine.bst + +config: + build-commands: + - | + exit 42 diff --git a/tests/integration/project/elements/sandbox-bwrap/non-executable-shell.bst b/tests/integration/project/elements/sandbox-bwrap/non-executable-shell.bst new file mode 100644 index 000000000..a57177bb3 --- /dev/null +++ b/tests/integration/project/elements/sandbox-bwrap/non-executable-shell.bst @@ -0,0 +1,9 @@ +kind: manual + +depends: + - sandbox-bwrap/break-shell.bst + +config: + build-commands: + - | + exit 42 diff --git a/tests/integration/sandbox-bwrap.py b/tests/integration/sandbox-bwrap.py index 7d2a18498..d2484bc17 100644 --- a/tests/integration/sandbox-bwrap.py +++ b/tests/integration/sandbox-bwrap.py @@ -1,9 +1,11 @@ import os import pytest +from buildstream._exceptions import ErrorDomain + from tests.testutils import cli_integration as cli from tests.testutils.integration import assert_contains -from tests.testutils.site import HAVE_BWRAP +from tests.testutils.site import HAVE_BWRAP, HAVE_BWRAP_JSON_STATUS pytestmark = pytest.mark.integration @@ -29,3 +31,32 @@ def test_sandbox_bwrap_cleanup_build(cli, tmpdir, datafiles): # Here, BuildStream should not attempt any rmdir etc. result = cli.run(project=project, args=['build', element_name]) assert result.exit_code == 0 + + +@pytest.mark.skipif(not HAVE_BWRAP, reason='Only available with bubblewrap') +@pytest.mark.skipif(not HAVE_BWRAP_JSON_STATUS, reason='Only available with bubblewrap supporting --json-status-fd') +@pytest.mark.datafiles(DATA_DIR) +def test_sandbox_bwrap_distinguish_setup_error(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + element_name = 'sandbox-bwrap/non-executable-shell.bst' + + result = cli.run(project=project, args=['build', element_name]) + result.assert_task_error(error_domain=ErrorDomain.SANDBOX, error_reason="bwrap-sandbox-fail") + + +@pytest.mark.integration +@pytest.mark.skipif(not HAVE_BWRAP, reason='Only available with bubblewrap') +@pytest.mark.datafiles(DATA_DIR) +def test_sandbox_bwrap_return_subprocess(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + element_name = 'sandbox-bwrap/command-exit-42.bst' + + cli.configure({ + "logging": { + "message-format": "%{element}|%{message}", + }, + }) + + result = cli.run(project=project, args=['build', element_name]) + result.assert_task_error(error_domain=ErrorDomain.ELEMENT, error_reason=None) + assert "sandbox-bwrap/command-exit-42.bst|Command 'exit 42' failed with exitcode 42" in result.stderr |