fix 404 when requesting empty tripleo container image catalog

This patch adds graceful handling for requests against tripleo container
image catalog requests, before the catalog is populated / created.

Change-Id: I0834e095dacb44f0742a15ae67f64c72db7d9c54
Closes-Bug: 1825046
(cherry picked from commit 294f67bd7e)
This commit is contained in:
David J Peacock 2019-04-16 16:57:29 -04:00 committed by Emilien Macchi
parent eeee6fb90a
commit f38d89e72e
2 changed files with 42 additions and 2 deletions

View File

@ -494,7 +494,16 @@ class BaseImageUploader(object):
catalog_url = self._build_url(
url, CALL_CATALOG
)
catalog = session.get(catalog_url, timeout=30).json()
catalog_resp = session.get(catalog_url, timeout=30)
if catalog_resp.status_code in [200]:
catalog = catalog_resp.json()
elif catalog_resp.status_code in [404]:
catalog = {}
else:
raise ImageUploaderException(
'Image registry made invalid response: %s' %
(catalog_resp.status_code)
)
tags_get_args = []
for repo in catalog.get('repositories', []):

View File

@ -762,9 +762,12 @@ class TestBaseImageUploader(base.TestCase):
('localhost:8787/t/bink', [])
)
session = mock.Mock()
session.get.return_value.json.return_value = {
response = mock.Mock()
response.status_code = 200
response.json.return_value = {
'repositories': ['t/foo', 't/bar', 't/baz', 't/bink']
}
session.get.return_value = response
self.assertEqual(
[
'localhost:8787/t/foo:a',
@ -783,6 +786,34 @@ class TestBaseImageUploader(base.TestCase):
(self.uploader, 'localhost:8787/t/bink', session)
])
@mock.patch('concurrent.futures.ThreadPoolExecutor')
def test_list_404(self, mock_pool):
# setup bits
session = mock.Mock()
response = mock.Mock()
response.status_code = 404
session.get.return_value = response
mock_pool.return_value.map.return_value = ()
# execute function
return_val = self.uploader.list('localhost:8787', session=session)
# check status of things
self.assertEqual(
[],
return_val
)
@mock.patch('concurrent.futures.ThreadPoolExecutor')
def test_list_500(self, mock_pool):
session = mock.Mock()
response = mock.Mock()
response.status_code = 500
session.get.return_value = response
mock_pool.return_value.map.return_value = ()
self.assertRaises(ImageUploaderException,
self.uploader.list,
'localhost:8787',
session=session)
def test_tags_for_image(self):
session = mock.Mock()
r = mock.Mock()