extra_iso: Include media.repo and .discinfo

JIRA: COMPOSE-2994
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
Lubomír Sedlář 2018-10-17 14:06:43 +02:00
parent 736772f954
commit 66d9c10a6f
2 changed files with 69 additions and 6 deletions

View File

@ -20,6 +20,7 @@ from kobo.threads import ThreadPool, WorkerThread
import productmd.treeinfo import productmd.treeinfo
from pungi import createiso from pungi import createiso
from pungi import metadata
from pungi.phases.base import ConfigGuardedPhase, PhaseBase, PhaseLoggerMixin from pungi.phases.base import ConfigGuardedPhase, PhaseBase, PhaseLoggerMixin
from pungi.phases.createiso import (add_iso_to_metadata, copy_boot_images, from pungi.phases.createiso import (add_iso_to_metadata, copy_boot_images,
run_createiso_command, load_and_tweak_treeinfo) run_createiso_command, load_and_tweak_treeinfo)
@ -78,6 +79,8 @@ class ExtraIsosThread(WorkerThread):
iso_dir = compose.paths.compose.iso_dir(arch, variant) iso_dir = compose.paths.compose.iso_dir(arch, variant)
iso_path = os.path.join(iso_dir, filename) iso_path = os.path.join(iso_dir, filename)
prepare_media_metadata(compose, variant, arch)
msg = "Creating ISO (arch: %s, variant: %s): %s" % (arch, variant, filename) msg = "Creating ISO (arch: %s, variant: %s): %s" % (arch, variant, filename)
self.pool.log_info("[BEGIN] %s" % msg) self.pool.log_info("[BEGIN] %s" % msg)
@ -249,3 +252,16 @@ def get_volume_id(compose, variant, arch, formats):
volid = get_volid(compose, arch, variant, disc_type=disc_type) volid = get_volid(compose, arch, variant, disc_type=disc_type)
return get_volid(compose, arch, variant, disc_type=disc_type, return get_volid(compose, arch, variant, disc_type=disc_type,
formats=force_list(formats), volid=volid) formats=force_list(formats), volid=volid)
def prepare_media_metadata(compose, variant, arch):
"""Write a .discinfo and media.repo files to a directory that will be
included on the ISO. It's possible to overwrite the files by using extra
files.
"""
md_dir = compose.paths.work.extra_iso_extra_files_dir(arch, variant)
description = metadata.get_description(compose, variant, arch)
metadata.create_media_repo(
os.path.join(md_dir, "media.repo"), description, timestamp=None
)
metadata.create_discinfo(os.path.join(md_dir, ".discinfo"), description, arch)

View File

@ -100,6 +100,7 @@ class ExtraIsosPhaseTest(helpers.PungiTestCase):
) )
@mock.patch('pungi.phases.extra_isos.prepare_media_metadata')
@mock.patch('pungi.phases.extra_isos.get_volume_id') @mock.patch('pungi.phases.extra_isos.get_volume_id')
@mock.patch('pungi.phases.extra_isos.get_filename') @mock.patch('pungi.phases.extra_isos.get_filename')
@mock.patch('pungi.phases.extra_isos.get_iso_contents') @mock.patch('pungi.phases.extra_isos.get_iso_contents')
@ -108,7 +109,7 @@ class ExtraIsosPhaseTest(helpers.PungiTestCase):
@mock.patch('pungi.phases.extra_isos.add_iso_to_metadata') @mock.patch('pungi.phases.extra_isos.add_iso_to_metadata')
class ExtraIsosThreadTest(helpers.PungiTestCase): class ExtraIsosThreadTest(helpers.PungiTestCase):
def test_binary_bootable_image(self, aitm, rcc, gef, gic, gfn, gvi): def test_binary_bootable_image(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, { compose = helpers.DummyCompose(self.topdir, {
'bootable': True, 'bootable': True,
'buildinstall_method': 'lorax' 'buildinstall_method': 'lorax'
@ -149,8 +150,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'), os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
True, additional_variants=["Client"])] True, additional_variants=["Client"])]
) )
self.assertEqual(pmm.call_args_list, [mock.call(compose, server, "x86_64")])
def test_binary_bootable_image_without_jigdo(self, aitm, rcc, gef, gic, gfn, gvi): def test_binary_bootable_image_without_jigdo(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, { compose = helpers.DummyCompose(self.topdir, {
'bootable': True, 'bootable': True,
'buildinstall_method': 'lorax', 'buildinstall_method': 'lorax',
@ -192,8 +194,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'), os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
True, additional_variants=["Client"])] True, additional_variants=["Client"])]
) )
self.assertEqual(pmm.call_args_list, [mock.call(compose, server, "x86_64")])
def test_binary_image_custom_naming(self, aitm, rcc, gef, gic, gfn, gvi): def test_binary_image_custom_naming(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, {}) compose = helpers.DummyCompose(self.topdir, {})
server = compose.variants['Server'] server = compose.variants['Server']
cfg = { cfg = {
@ -233,8 +236,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'), os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
False, additional_variants=["Client"])] False, additional_variants=["Client"])]
) )
self.assertEqual(pmm.call_args_list, [mock.call(compose, server, "x86_64")])
def test_source_is_not_bootable(self, aitm, rcc, gef, gic, gfn, gvi): def test_source_is_not_bootable(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, { compose = helpers.DummyCompose(self.topdir, {
'bootable': True, 'bootable': True,
'buildinstall_method': 'lorax' 'buildinstall_method': 'lorax'
@ -275,8 +279,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/source/iso/my.iso'), os.path.join(self.topdir, 'compose/Server/source/iso/my.iso'),
False, additional_variants=["Client"])] False, additional_variants=["Client"])]
) )
self.assertEqual(pmm.call_args_list, [mock.call(compose, server, "src")])
def test_failable_failed(self, aitm, rcc, gef, gic, gfn, gvi): def test_failable_failed(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, {}) compose = helpers.DummyCompose(self.topdir, {})
server = compose.variants['Server'] server = compose.variants['Server']
cfg = { cfg = {
@ -295,7 +300,7 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
self.assertEqual(aitm.call_args_list, []) self.assertEqual(aitm.call_args_list, [])
def test_non_failable_failed(self, aitm, rcc, gef, gic, gfn, gvi): def test_non_failable_failed(self, aitm, rcc, gef, gic, gfn, gvi, pmm):
compose = helpers.DummyCompose(self.topdir, {}) compose = helpers.DummyCompose(self.topdir, {})
server = compose.variants['Server'] server = compose.variants['Server']
cfg = { cfg = {
@ -638,5 +643,47 @@ class TweakTreeinfoTest(helpers.PungiTestCase):
self.assertFilesEqual(output, expected) self.assertFilesEqual(output, expected)
class PrepareMetadataTest(helpers.PungiTestCase):
@mock.patch("pungi.metadata.create_media_repo")
@mock.patch("pungi.metadata.create_discinfo")
@mock.patch("pungi.metadata.get_description")
def test_write_files(self, get_description, create_discinfo, create_media_repo):
compose = helpers.DummyCompose(self.topdir, {})
variant = compose.variants["Server"]
arch = "x86_64"
extra_isos.prepare_media_metadata(compose, variant, arch)
self.assertEqual(
get_description.call_args_list, [mock.call(compose, variant, arch)]
)
self.assertEqual(
create_discinfo.call_args_list,
[
mock.call(
os.path.join(
self.topdir,
"work/x86_64/Server/extra-iso-extra-files/.discinfo",
),
get_description.return_value,
arch,
)
],
)
self.assertEqual(
create_media_repo.call_args_list,
[
mock.call(
os.path.join(
self.topdir,
"work/x86_64/Server/extra-iso-extra-files/media.repo",
),
get_description.return_value,
timestamp=None,
),
],
)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()