| 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") |