Fix checking optional ISO images in test phase
Instead of iterating over image manifest, loop through all variants and arches and see if there are any images. This avoids a crash for variants nested under other variants (layered products, optionals or addons). Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
b62b468ccf
commit
b2a266c3e4
@ -110,11 +110,14 @@ def check_image_sanity(compose):
|
|||||||
manifest and logged. Otherwise the compose will be aborted.
|
manifest and logged. Otherwise the compose will be aborted.
|
||||||
"""
|
"""
|
||||||
im = compose.im
|
im = compose.im
|
||||||
for variant_uid in im.images:
|
for variant in compose.get_variants():
|
||||||
variant = compose.variants[variant_uid]
|
if variant.uid not in im.images:
|
||||||
for arch in im.images[variant_uid]:
|
continue
|
||||||
images = im.images[variant_uid][arch]
|
for arch in variant.arches:
|
||||||
im.images[variant_uid][arch] = [img for img in images
|
if arch not in im.images[variant.uid]:
|
||||||
|
continue
|
||||||
|
images = im.images[variant.uid][arch]
|
||||||
|
im.images[variant.uid][arch] = [img for img in images
|
||||||
if check(compose, variant, arch, img)]
|
if check(compose, variant, arch, img)]
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ class DummyCompose(object):
|
|||||||
self.log_warning = mock.Mock()
|
self.log_warning = mock.Mock()
|
||||||
self.get_image_name = mock.Mock(return_value='image-name')
|
self.get_image_name = mock.Mock(return_value='image-name')
|
||||||
self.image = mock.Mock(path='Client/i386/iso/image.iso')
|
self.image = mock.Mock(path='Client/i386/iso/image.iso')
|
||||||
self.im = mock.Mock(images={'Client': {'i386': [self.image]}})
|
self.im = mock.Mock(images={'Client': {'amd64': [self.image]}})
|
||||||
self.old_composes = []
|
self.old_composes = []
|
||||||
self.config_dir = '/home/releng/config'
|
self.config_dir = '/home/releng/config'
|
||||||
self.notifier = None
|
self.notifier = None
|
||||||
|
@ -7,6 +7,7 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
import mock
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -124,6 +125,25 @@ class TestCheckImageSanity(PungiTestCase):
|
|||||||
except:
|
except:
|
||||||
self.fail('Bootable image with MBR and GPT must not raise')
|
self.fail('Bootable image with MBR and GPT must not raise')
|
||||||
|
|
||||||
|
def test_checks_with_optional_variant(self):
|
||||||
|
compose = DummyCompose(self.topdir, {})
|
||||||
|
compose.variants['Server'].variants = {
|
||||||
|
'optional': mock.Mock(uid='Server-optional', arches=['x86_64'],
|
||||||
|
type='optional', is_empty=False)
|
||||||
|
}
|
||||||
|
compose.image.format = 'iso'
|
||||||
|
compose.image.bootable = True
|
||||||
|
touch(os.path.join(self.topdir, 'compose', compose.image.path), ISO_WITH_MBR_AND_GPT)
|
||||||
|
|
||||||
|
image = mock.Mock(path="Server/i386/optional/iso/image.iso",
|
||||||
|
format='iso', bootable=False)
|
||||||
|
compose.im.images['Server-optional'] = {'i386': [image]}
|
||||||
|
|
||||||
|
try:
|
||||||
|
test_phase.check_image_sanity(compose)
|
||||||
|
except:
|
||||||
|
self.fail('Checking optional variant must not raise')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user