summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-09-18 18:17:04 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-09-18 18:56:26 +0900
commitc82b5ac6df1c4dbbdc7a1f6fb7bfff9611b18556 (patch)
tree89bdcb6983b9d95ad8d8689c4bbe836d0b2302e4
parentcdd9a58678b54155c47821899fd3ccf89b895280 (diff)
downloadbuildstream-c82b5ac6df1c4dbbdc7a1f6fb7bfff9611b18556.tar.gz
tests/artifactcache/config.py: Added test for invalid push remote configuration
Test that we get the expected error when configuring a client-cert without client-key, or the inverse.
-rw-r--r--tests/artifactcache/config.py34
-rw-r--r--tests/artifactcache/missing-certs/certificates/client.crt0
-rw-r--r--tests/artifactcache/missing-certs/certificates/client.key0
-rw-r--r--tests/artifactcache/missing-certs/element.bst1
4 files changed, 35 insertions, 0 deletions
diff --git a/tests/artifactcache/config.py b/tests/artifactcache/config.py
index f59474708..8ab0ecee1 100644
--- a/tests/artifactcache/config.py
+++ b/tests/artifactcache/config.py
@@ -9,8 +9,12 @@ from buildstream._context import Context
from buildstream._project import Project
from buildstream.utils import _deduplicate
from buildstream import _yaml
+from buildstream._exceptions import ErrorDomain, LoadErrorReason
+from tests.testutils.runcli import cli
+
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
cache1 = ArtifactCacheSpec(url='https://example.com/cache1', push=True)
cache2 = ArtifactCacheSpec(url='https://example.com/cache2', push=False)
cache3 = ArtifactCacheSpec(url='https://example.com/cache3', push=False)
@@ -106,3 +110,33 @@ def test_artifact_cache_precedence(tmpdir, override_caches, project_caches, user
# Verify that it was correctly read.
expected_cache_specs = list(_deduplicate(itertools.chain(override_caches, project_caches, user_caches)))
assert parsed_cache_specs == expected_cache_specs
+
+
+# Assert that if either the client key or client cert is specified
+# without specifying it's 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',
+
+ 'artifacts': {
+ 'url': 'https://cache.example.com:12345',
+ 'push': 'true',
+ 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=['pull', 'element.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)
diff --git a/tests/artifactcache/missing-certs/certificates/client.crt b/tests/artifactcache/missing-certs/certificates/client.crt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/artifactcache/missing-certs/certificates/client.crt
diff --git a/tests/artifactcache/missing-certs/certificates/client.key b/tests/artifactcache/missing-certs/certificates/client.key
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/artifactcache/missing-certs/certificates/client.key
diff --git a/tests/artifactcache/missing-certs/element.bst b/tests/artifactcache/missing-certs/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/artifactcache/missing-certs/element.bst
@@ -0,0 +1 @@
+kind: autotools