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
from pungi import createiso
from pungi import metadata
from pungi.phases.base import ConfigGuardedPhase, PhaseBase, PhaseLoggerMixin
from pungi.phases.createiso import (add_iso_to_metadata, copy_boot_images,
run_createiso_command, load_and_tweak_treeinfo)
@ -78,6 +79,8 @@ class ExtraIsosThread(WorkerThread):
iso_dir = compose.paths.compose.iso_dir(arch, variant)
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)
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)
return get_volid(compose, arch, variant, disc_type=disc_type,
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_filename')
@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')
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, {
'bootable': True,
'buildinstall_method': 'lorax'
@ -149,8 +150,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
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, {
'bootable': True,
'buildinstall_method': 'lorax',
@ -192,8 +194,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
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, {})
server = compose.variants['Server']
cfg = {
@ -233,8 +236,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/x86_64/iso/my.iso'),
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, {
'bootable': True,
'buildinstall_method': 'lorax'
@ -275,8 +279,9 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
os.path.join(self.topdir, 'compose/Server/source/iso/my.iso'),
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, {})
server = compose.variants['Server']
cfg = {
@ -295,7 +300,7 @@ class ExtraIsosThreadTest(helpers.PungiTestCase):
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, {})
server = compose.variants['Server']
cfg = {
@ -638,5 +643,47 @@ class TweakTreeinfoTest(helpers.PungiTestCase):
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__':
unittest.main()