Refactor the __fetch_manifest() code so that the a successful response is immediately handled and we don't end up with an undefined 'response' on an exception. Also update the tests to return two mocked reponses to match the size of the url_list.

bzr-import-20160707
Francis Ginther 10 years ago
parent 7e38fec3cb
commit ca1fc41f9e

@ -92,21 +92,21 @@ class TouchManifest(object):
try: try:
response = urllib.urlopen(url) response = urllib.urlopen(url)
if response.code == 200: if response.code == 200:
# Only [re]create the manifest file if one was successfully
# downloaded. This allows for an existing image to be used
# if the download fails.
path_dir = os.path.dirname(self.path)
if not os.path.exists(path_dir):
os.makedirs(path_dir)
with open(self.path, 'w') as fp:
fp.write(response.read())
success = True
break break
except IOError as e: except IOError as e:
print("W: [%s] - error connecting to %s: %s" % ( print("W: [%s] - error connecting to %s: %s" % (
time.asctime(), self.path, e)) time.asctime(), self.path, e))
# Only [re]create the manifest file if one was successfully downloaded
# this allows for an existing image to be used if the download fails.
if response.code == 200:
path_dir = os.path.dirname(self.path)
if not os.path.exists(path_dir):
os.makedirs(path_dir)
with open(self.path, 'w') as fp:
fp.write(response.read())
success = True
return success return success
def _load(self): def _load(self):

@ -49,7 +49,10 @@ class TestTouchManifest(unittest.TestCase):
self.addCleanup(shutil.rmtree, self.path) self.addCleanup(shutil.rmtree, self.path)
_p = mock.patch('urllib.urlopen') _p = mock.patch('urllib.urlopen')
self.mocked_urlopen = _p.start() self.mocked_urlopen = _p.start()
self.mocked_urlopen.side_effect = [FakeResponse(code=404),] self.mocked_urlopen.side_effect = [
FakeResponse(code=404),
FakeResponse(code=404),
]
self.addCleanup(_p.stop) self.addCleanup(_p.stop)
self.fetch_retries_orig = boottest.FETCH_RETRIES self.fetch_retries_orig = boottest.FETCH_RETRIES
def restore_fetch_retries(): def restore_fetch_retries():
@ -90,7 +93,10 @@ class TestTouchManifest(unittest.TestCase):
self.assertIn('foo', manifest) self.assertIn('foo', manifest)
def test_fetch_exception(self): def test_fetch_exception(self):
self.mocked_urlopen.side_effect = [IOError("connection refused")] self.mocked_urlopen.side_effect = [
IOError("connection refused"),
IOError("connection refused"),
]
manifest = boottest.TouchManifest('not-real', 'not-real') manifest = boottest.TouchManifest('not-real', 'not-real')
self.assertEqual(0, len(manifest._manifest)) self.assertEqual(0, len(manifest._manifest))

Loading…
Cancel
Save