summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim MacArthur <jim.macarthur@codethink.co.uk>2018-11-20 17:59:44 +0000
committerJim MacArthur <jim.macarthur@codethink.co.uk>2018-11-27 15:33:36 +0000
commit95d8244f366b83966315095176c6be4d7b886fbc (patch)
tree182720bf988f839fd167ba27bb3515d9e3376d1e
parentd7cdb03ef792feae5bbe1ae34594de69122cc941 (diff)
downloadbuildstream-95d8244f366b83966315095176c6be4d7b886fbc.tar.gz
tests/sandboxes/remote-exec-config.py: New test.
Tests that we get a sensible error message when we specify incomplete or wrong information in the configuration for remote execution.
-rw-r--r--tests/sandboxes/remote-exec-config.py101
-rw-r--r--tests/sandboxes/remote-exec-config/missing-certs/certificates/client.crt0
-rw-r--r--tests/sandboxes/remote-exec-config/missing-certs/certificates/client.key0
-rw-r--r--tests/sandboxes/remote-exec-config/missing-certs/element.bst1
4 files changed, 102 insertions, 0 deletions
diff --git a/tests/sandboxes/remote-exec-config.py b/tests/sandboxes/remote-exec-config.py
new file mode 100644
index 000000000..31cb072f2
--- /dev/null
+++ b/tests/sandboxes/remote-exec-config.py
@@ -0,0 +1,101 @@
+import pytest
+
+import itertools
+import os
+
+from buildstream import _yaml
+from buildstream._exceptions import ErrorDomain, LoadErrorReason
+
+from tests.testutils.runcli import cli
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ "remote-exec-config"
+)
+
+# Tests that we get a useful error message when supplying invalid
+# remote execution configurations.
+
+
+# Assert that if both 'url' (the old style) and 'execution-service' (the new style)
+# are used at once, a LoadError results.
+@pytest.mark.datafiles(DATA_DIR)
+def test_old_and_new_configs(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'missing-certs')
+
+ project_conf = {
+ 'name': 'test',
+
+ 'remote-execution': {
+ 'url': 'https://cache.example.com:12345',
+ 'execution-service': {
+ 'url': 'http://localhost:8088'
+ },
+ 'storage-service': {
+ 'url': 'http://charactron:11001',
+ }
+ }
+ }
+ project_conf_file = os.path.join(project, 'project.conf')
+ _yaml.dump(project_conf, project_conf_file)
+
+ # Use `pull` here to ensure we try to initialize the remotes, triggering the error
+ #
+ # This does not happen for a simple `bst show`.
+ result = cli.run(project=project, args=['pull', 'element.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA, "specify one")
+
+
+# Assert that if either the client key or client cert is specified
+# without specifying its counterpart, we get a comprehensive LoadError
+# instead of an unhandled exception.
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize('config_key, config_value', [
+ ('client-cert', 'client.crt'),
+ ('client-key', 'client.key')
+])
+def test_missing_certs(cli, datafiles, config_key, config_value):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'missing-certs')
+
+ project_conf = {
+ 'name': 'test',
+
+ 'remote-execution': {
+ 'execution-service': {
+ 'url': 'http://localhost:8088'
+ },
+ 'storage-service': {
+ 'url': 'http://charactron:11001',
+ config_key: config_value,
+ }
+ }
+ }
+ project_conf_file = os.path.join(project, 'project.conf')
+ _yaml.dump(project_conf, project_conf_file)
+
+ # Use `pull` here to ensure we try to initialize the remotes, triggering the error
+ #
+ # This does not happen for a simple `bst show`.
+ result = cli.run(project=project, args=['show', 'element.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA, "Your config is missing")
+
+
+# Assert that if incomplete information is supplied we get a sensible error message.
+@pytest.mark.datafiles(DATA_DIR)
+def test_empty_config(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'missing-certs')
+
+ project_conf = {
+ 'name': 'test',
+
+ 'remote-execution': {
+ }
+ }
+ project_conf_file = os.path.join(project, 'project.conf')
+ _yaml.dump(project_conf, project_conf_file)
+
+ # Use `pull` here to ensure we try to initialize the remotes, triggering the error
+ #
+ # This does not happen for a simple `bst show`.
+ result = cli.run(project=project, args=['pull', 'element.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA, "specify one")
diff --git a/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.crt b/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.crt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.crt
diff --git a/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.key b/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.key
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/sandboxes/remote-exec-config/missing-certs/certificates/client.key
diff --git a/tests/sandboxes/remote-exec-config/missing-certs/element.bst b/tests/sandboxes/remote-exec-config/missing-certs/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/sandboxes/remote-exec-config/missing-certs/element.bst
@@ -0,0 +1 @@
+kind: autotools