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:
parent
6851cab51a
commit
951a9f535e
@ -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):
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user