summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2018-11-01 13:24:12 -0400
committerBenjamin Schubert <ben.c.schubert@gmail.com>2018-11-07 18:22:34 +0000
commitb8875c4cdf16e0325effab4834ed569a3bb24335 (patch)
tree1db6e664c0bcfa5a100c1409a2d17b9ab88c64c7
parente525b608df45f081616b39c2922319e3c06209f9 (diff)
downloadbuildstream-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.py3
-rw-r--r--tests/sandboxes/missing_dependencies.py86
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