diff options
author | Benjamin Schubert <ben.c.schubert@gmail.com> | 2018-11-01 13:24:12 -0400 |
---|---|---|
committer | Benjamin Schubert <ben.c.schubert@gmail.com> | 2018-11-07 18:22:34 +0000 |
commit | b8875c4cdf16e0325effab4834ed569a3bb24335 (patch) | |
tree | 1db6e664c0bcfa5a100c1409a2d17b9ab88c64c7 | |
parent | e525b608df45f081616b39c2922319e3c06209f9 (diff) | |
download | buildstream-bschubert/tests-no-chroot-linux.tar.gz |
Test that helpful messages are raised when missing dependenciesbschubert/tests-no-chroot-linux
This adds a `reason` to the SandboxEror thrown in sandboxdummy
to be able to understand where the error comes from
-rw-r--r-- | buildstream/sandbox/_sandboxdummy.py | 3 | ||||
-rw-r--r-- | tests/sandboxes/missing_dependencies.py | 86 |
2 files changed, 88 insertions, 1 deletions
diff --git a/buildstream/sandbox/_sandboxdummy.py b/buildstream/sandbox/_sandboxdummy.py index c0a86a0bb..0e3754c1b 100644 --- a/buildstream/sandbox/_sandboxdummy.py +++ b/buildstream/sandbox/_sandboxdummy.py @@ -42,4 +42,5 @@ class SandboxDummy(Sandbox): "'{}'".format(command[0]), reason='missing-command') - raise SandboxError("This platform does not support local builds: {}".format(self._reason)) + raise SandboxError("This platform does not support local builds: {}".format(self._reason), + reason="unavailable-local-sandbox") diff --git a/tests/sandboxes/missing_dependencies.py b/tests/sandboxes/missing_dependencies.py new file mode 100644 index 000000000..ea52c0c71 --- /dev/null +++ b/tests/sandboxes/missing_dependencies.py @@ -0,0 +1,86 @@ +import os +import pytest +from tests.testutils import cli +from tests.testutils.site import IS_LINUX + +from buildstream import _yaml +from buildstream._exceptions import ErrorDomain + + +# Project directory +DATA_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'project', +) + + +@pytest.mark.skipif(not IS_LINUX, reason='Only available on Linux') +@pytest.mark.datafiles(DATA_DIR) +def test_missing_brwap_has_nice_error_message(cli, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + element_path = os.path.join(project, 'elements', 'element.bst') + + # Write out our test target + element = { + 'kind': 'script', + 'depends': [ + { + 'filename': 'base.bst', + 'type': 'build', + }, + ], + 'config': { + 'commands': [ + 'false', + ], + }, + } + _yaml.dump(element, element_path) + + # Build without access to host tools, this should fail with a nice error + result = cli.run( + project=project, args=['build', 'element.bst'], env={'PATH': ''}) + result.assert_task_error(ErrorDomain.SANDBOX, 'unavailable-local-sandbox') + assert "not found" in result.stderr + + +@pytest.mark.skipif(not IS_LINUX, reason='Only available on Linux') +@pytest.mark.datafiles(DATA_DIR) +def test_old_brwap_has_nice_error_message(cli, datafiles, tmp_path): + bwrap = tmp_path.joinpath('bin/bwrap') + bwrap.parent.mkdir() + with bwrap.open('w') as fp: + fp.write(''' + #!/bin/sh + echo bubblewrap 0.0.1 + '''.strip()) + + bwrap.chmod(0o755) + + project = os.path.join(datafiles.dirname, datafiles.basename) + element_path = os.path.join(project, 'elements', 'element3.bst') + + # Write out our test target + element = { + 'kind': 'script', + 'depends': [ + { + 'filename': 'base.bst', + 'type': 'build', + }, + ], + 'config': { + 'commands': [ + 'false', + ], + }, + } + _yaml.dump(element, element_path) + + # Build without access to host tools, this should fail with a nice error + result = cli.run( + project=project, + args=['--debug', '--verbose', 'build', 'element3.bst'], + env={'PATH': str(tmp_path.joinpath('bin'))}) + result.assert_task_error(ErrorDomain.SANDBOX, 'unavailable-local-sandbox') + assert "too old" in result.stderr |