Do not loose url queries on redirects

when fetching images with http driver, the redirect URL can have
mandatory query in it, which must be kept intact to successfully
fetch the image.

Change-Id: I2a9d4d026b935ea6c5e5a3a46c86f70ce1e39ae7
Closes-Bug: #1633860
This commit is contained in:
Pavlo Shchelokovskyy 2021-02-23 14:16:37 +00:00 committed by Cyril Roelandt
parent 6851cab51a
commit 951a9f535e
2 changed files with 20 additions and 2 deletions

View File

@ -105,18 +105,26 @@ class StoreLocation(glance_store.location.StoreLocation):
self.user = self.specs.get('user')
self.password = self.specs.get('password')
self.path = self.specs.get('path')
self.query = self.spec.get('query')
def _get_credstring(self):
if self.user:
return '%s:%s@' % (self.user, self.password)
return ''
def _get_query_string(self):
if self.query:
return "?%s" % self.query
return ""
def get_uri(self):
return "%s://%s%s%s" % (
return "%s://%s%s%s%s" % (
self.scheme,
self._get_credstring(),
self.netloc,
self.path)
self.path,
self._get_query_string()
)
def parse_uri(self, uri):
"""
@ -164,6 +172,7 @@ class StoreLocation(glance_store.location.StoreLocation):
self.netloc = netloc
self.path = path
self.query = pieces.query
def http_response_iterator(conn, response, size):

View File

@ -184,6 +184,15 @@ class TestHttpStore(base.StoreBaseTest,
self.assertRaises(exceptions.BadStoreUri,
location.get_location_from_uri, uri)
def test_http_store_location_get_uri(self):
"""Test for HTTP URI with and without query"""
uris = ["http://netloc/path/to/file.tar.gz"
"http://netloc/path/to/file.tar.gz?query=text",
]
for uri in uris:
loc = location.get_location_from_uri(uri, conf=self.conf)
self.assertEqual(uri, loc.store_location.get_uri())
def test_http_get_raises_remote_service_unavailable(self):
"""Test http store raises RemoteServiceUnavailable."""
uri = "http://netloc/path/to/file.tar.gz"