diff options
Diffstat (limited to 'tests')
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 |