| # |
| # Copyright (C) 2019 Bloomberg Finance L.P. |
| # |
| # This program is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2 of the License, or (at your option) any later version. |
| # |
| # This library is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # Lesser General Public License for more details. |
| # |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with this library. If not, see <http://www.gnu.org/licenses/>. |
| # |
| # Authors: |
| # Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> |
| # |
| |
| # Pylint doesn't play well with fixtures and dependency injection from pytest |
| # pylint: disable=redefined-outer-name |
| |
| import os |
| import pytest |
| |
| from buildstream import _yaml |
| from buildstream.exceptions import ErrorDomain, LoadErrorReason |
| |
| from buildstream.testing.runcli import cli # pylint: disable=unused-import |
| |
| DATA_DIR = os.path.dirname(os.path.realpath(__file__)) |
| |
| |
| # 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", |
| "source-caches": {"url": "https://cache.example.com:12345", "push": "true", config_key: config_value}, |
| } |
| project_conf_file = os.path.join(project, "project.conf") |
| _yaml.roundtrip_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=["source", "fetch", "element.bst"]) |
| result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA) |