diff --git a/util/tufmetadata/api.py b/util/tufmetadata/api.py index 1ef607c6b..f3520ca4b 100644 --- a/util/tufmetadata/api.py +++ b/util/tufmetadata/api.py @@ -1,5 +1,6 @@ import logging from urlparse import urljoin +from posixpath import join import requests @@ -107,7 +108,7 @@ class TUFMetadataAPI(object): return True def _gun(self, namespace, repository): - return urljoin(self._gun_prefix, namespace, repository) + return join(self._gun_prefix, namespace, repository) def _parse_signed(self, json_response): """ Attempts to parse the targets from a metadata response """ diff --git a/util/tufmetadata/test/test_tufmetadata.py b/util/tufmetadata/test/test_tufmetadata.py index f0cec63b1..78046df86 100644 --- a/util/tufmetadata/test/test_tufmetadata.py +++ b/util/tufmetadata/test/test_tufmetadata.py @@ -33,6 +33,21 @@ valid_response = { ] } +@pytest.mark.parametrize('tuf_prefix,server_hostname,namespace,repo,gun', [ + ("quay.dev", "quay.io", "ns", "repo", "quay.dev/ns/repo"), + (None, "quay.io", "ns", "repo", "quay.io/ns/repo"), + ("quay.dev/", "quay.io", "ns", "repo", "quay.dev/ns/repo"), + (None, "quay.io/", "ns", "repo", "quay.io/ns/repo"), + (None, "localhost:5000/", "ns", "repo", "localhost:5000/ns/repo"), + (None, "localhost:5000", "ns", "repo", "localhost:5000/ns/repo"), +]) +def test_gun(tuf_prefix, server_hostname, namespace, repo, gun): + app = Flask(__name__) + app.config.from_object(testconfig.TestConfig()) + app.config['TUF_GUN_PREFIX'] = tuf_prefix + app.config['SERVER_HOSTNAME'] = server_hostname + tuf_api = api.TUFMetadataAPI(app, app.config) + assert gun == tuf_api._gun(namespace, repo) @pytest.mark.parametrize('response_code,response_body,expected', [ (200, valid_response, (valid_response['signed']['targets'], '2020-03-30T18:55:26.594764859-04:00')),