mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-02-13 15:37:02 +00:00
For selection of boottest candidates, use a list of url formats for downloading the appropriate touch image manifest for a given release.
This commit is contained in:
commit
9e238f7406
61
boottest.py
61
boottest.py
@ -69,32 +69,43 @@ class TouchManifest(object):
|
||||
self._manifest = self._load()
|
||||
|
||||
def __fetch_manifest(self, project, series):
|
||||
url = "http://cdimage.ubuntu.com/{}/daily-preinstalled/" \
|
||||
"pending/{}-preinstalled-touch-armhf.manifest".format(
|
||||
project, series
|
||||
)
|
||||
success = False
|
||||
if self.verbose:
|
||||
print(
|
||||
"I: [%s] - Fetching manifest from %s" % (
|
||||
time.asctime(), url))
|
||||
print("I: [%s] - saving it to %s" % (time.asctime(), self.path))
|
||||
try:
|
||||
response = urllib.urlopen(url)
|
||||
except IOError as e:
|
||||
print("W: [%s] - error connecting to %s: %s" % (
|
||||
time.asctime(), self.path, e))
|
||||
return success # failure
|
||||
# There are two url formats that may lead to the proper manifest
|
||||
# file. The first form is for series that have been released,
|
||||
# the second form is for the current development series.
|
||||
# Only one of these is expected to exist for any given series.
|
||||
url_list = [
|
||||
"http://cdimage.ubuntu.com/{}/{}/daily-preinstalled/pending/" \
|
||||
"{}-preinstalled-touch-armhf.manifest".format(
|
||||
project, series, series),
|
||||
"http://cdimage.ubuntu.com/{}/daily-preinstalled/pending/" \
|
||||
"{}-preinstalled-touch-armhf.manifest".format(
|
||||
project, series),
|
||||
]
|
||||
|
||||
# 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
|
||||
success = False
|
||||
for url in url_list:
|
||||
if self.verbose:
|
||||
print("I: [%s] - Fetching manifest from %s" %
|
||||
(time.asctime(), url))
|
||||
print("I: [%s] - saving it to %s" %
|
||||
(time.asctime(), self.path))
|
||||
try:
|
||||
response = urllib.urlopen(url)
|
||||
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
|
||||
|
||||
except IOError as e:
|
||||
print("W: [%s] - error connecting to %s: %s" % (
|
||||
time.asctime(), self.path, e))
|
||||
|
||||
return success
|
||||
|
||||
|
@ -49,7 +49,10 @@ class TestTouchManifest(unittest.TestCase):
|
||||
self.addCleanup(shutil.rmtree, self.path)
|
||||
_p = mock.patch('urllib.urlopen')
|
||||
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.fetch_retries_orig = boottest.FETCH_RETRIES
|
||||
def restore_fetch_retries():
|
||||
@ -90,7 +93,10 @@ class TestTouchManifest(unittest.TestCase):
|
||||
self.assertIn('foo', manifest)
|
||||
|
||||
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')
|
||||
self.assertEqual(0, len(manifest._manifest))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user