From c82b5ac6df1c4dbbdc7a1f6fb7bfff9611b18556 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Tue, 18 Sep 2018 18:17:04 +0900 Subject: 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. --- tests/artifactcache/config.py | 34 ++++++++++++++++++++++ .../missing-certs/certificates/client.crt | 0 .../missing-certs/certificates/client.key | 0 tests/artifactcache/missing-certs/element.bst | 1 + 4 files changed, 35 insertions(+) create mode 100644 tests/artifactcache/missing-certs/certificates/client.crt create mode 100644 tests/artifactcache/missing-certs/certificates/client.key create mode 100644 tests/artifactcache/missing-certs/element.bst 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 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 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 -- cgit v1.2.1