@@ -238,3 +238,151 @@ def test_koji_vmi_compound_product_name(fake_koji, koji_dir):
238238 signing_key = None ,
239239 release = rel_obj ,
240240 )
241+
242+
243+ @mark .parametrize ("boot_mode" , [None , "legacy" , "uefi" , "hybrid" ])
244+ def test_coreos_assembler_image (boot_mode , fake_koji , koji_dir ):
245+ boot_mode_enum = BootMode (boot_mode ) if boot_mode else None
246+
247+ archives = []
248+ images = {
249+ "meta.json" : "json" ,
250+ "commitmeta.json" : "json" ,
251+ "coreos-assembler-git.tar.gz" : "tar" ,
252+ }
253+ for file_name , type_name in images .items ():
254+ archives .append (
255+ {
256+ "btype" : "image" ,
257+ "btype_id" : 4 ,
258+ "build_id" : 123456 ,
259+ "buildroot_id" : 1234567 ,
260+ "checksum" : "dde60621880aa996c42e356a687744ef" ,
261+ "checksum_type" : 0 ,
262+ "compression_type" : None ,
263+ "filename" : file_name ,
264+ "id" : 234792 ,
265+ "metadata_only" : False ,
266+ "size" : 16077 ,
267+ "type_description" : "JSON data" ,
268+ "type_extensions" : "json" ,
269+ "type_id" : 49 ,
270+ "type_name" : type_name ,
271+ }
272+ )
273+
274+ name = "rhcos"
275+ version = "4.11"
276+ release = "1"
277+ nvr = f"{ name } -{ version } -{ release } "
278+
279+ source = Source .get (
280+ f"koji:https://koji.example.com/?vmi_build={ nvr } " , basedir = koji_dir
281+ )
282+ assert not fake_koji .last_url
283+
284+ fake_koji .build_data [1234 ] = {
285+ "id" : 1234 ,
286+ "name" : name ,
287+ "version" : version ,
288+ "release" : release ,
289+ "nvr" : nvr ,
290+ "completion_time" : "2022-12-20 12:30:25" ,
291+ "extra" : {"typeinfo" : {"image" : {"arch" : "x86_64" , "boot_mode" : boot_mode }}},
292+ }
293+
294+ fake_koji .build_data [nvr ] = fake_koji .build_data [1234 ]
295+
296+ fake_koji .insert_archives (archives = archives , build_nvr = nvr )
297+
298+ meta_data_directory = os .path .join (
299+ koji_dir , "packages" , name , version , release , "images"
300+ )
301+ os .makedirs (meta_data_directory )
302+ meta_data_path = os .path .join (meta_data_directory , "meta.json" )
303+
304+ meta_data = """{
305+ "name": "rhcos",
306+ "summary": "OpenShift 4",
307+ "coreos-assembler.container-config-git":{
308+ "branch": "release-4.11"
309+ },
310+ "images": {
311+ "azure": {
312+ "path": "rhcos-4.11-0-azure.x86_64.vhd.gz",
313+ "sha256": "2cd817331af29093e2eaa025139ebddd6008c193970b06b35afbbdbebae0ce3e",
314+ "dest": ["https://example.windows.net/imagebucket/rhcos-4.11-0-azure.x86_64.vhd"]},
315+ "aws": {
316+ "path": "rhcos-4.11-0-aws.x86_64.vmdk.gz",
317+ "sha256": "4ef7806152bd89ce44326ff746c4f1883ad543885e980bce59821df2d946ea4c"
318+ }},
319+ "azure": {
320+ "image": "rhcos-4.11-0-azure.x86_64.vhd",
321+ "url": "https://example.windows.net/imagebucket/rhcos-4.11-0-azure.x86_64.vhd"},
322+ "amis": [
323+ {"name": "us-gov-west-1",
324+ "hvm": "ami-01"
325+ },
326+ {"name": "us-east-1",
327+ "hvm": "ami-02"
328+ }]}"""
329+
330+ with open (meta_data_path , "w" ) as rhcos_metadata :
331+ rhcos_metadata .write (meta_data )
332+ items = list (source )
333+
334+ vms_with_custom_meta_data = [
335+ {
336+ "marketplace_name" : "aws" ,
337+ "push_item_class" : AmiPushItem ,
338+ "custom_meta_data" : {"region" : "us-gov-west-1" , "src" : "ami-01" },
339+ "sha256" : "4ef7806152bd89ce44326ff746c4f1883ad543885e980bce59821df2d946ea4c" ,
340+ },
341+ {
342+ "marketplace_name" : "aws" ,
343+ "push_item_class" : AmiPushItem ,
344+ "custom_meta_data" : {"region" : "us-east-1" , "src" : "ami-02" },
345+ "sha256" : "4ef7806152bd89ce44326ff746c4f1883ad543885e980bce59821df2d946ea4c" ,
346+ },
347+ {
348+ "marketplace_name" : "azure" ,
349+ "push_item_class" : VHDPushItem ,
350+ "custom_meta_data" : {
351+ "src" : "https://example.windows.net/imagebucket/rhcos-4.11-0-azure.x86_64.vhd"
352+ },
353+ "sha256" : "2cd817331af29093e2eaa025139ebddd6008c193970b06b35afbbdbebae0ce3e" ,
354+ },
355+ ]
356+
357+ out = []
358+ for vm_item in vms_with_custom_meta_data :
359+ klass = vm_item .get ("push_item_class" )
360+ rel_klass = klass ._RELEASE_TYPE
361+ release = rel_klass (
362+ arch = "x86_64" ,
363+ date = "2022-12-20" ,
364+ product = "RHCOS" ,
365+ version = "4.11" ,
366+ respin = 1 ,
367+ )
368+
369+ out .append (
370+ klass (
371+ name = "rhcos" ,
372+ description = "OpenShift 4" ,
373+ ** vm_item ["custom_meta_data" ],
374+ boot_mode = boot_mode_enum ,
375+ build = "rhcos-4.11-1" ,
376+ build_info = KojiBuildInfo (
377+ id = 1234 ,
378+ name = "rhcos" ,
379+ version = "4.11" ,
380+ release = "1" ,
381+ ),
382+ sha256sum = vm_item .get ("sha256" ),
383+ release = release ,
384+ marketplace_name = vm_item ["marketplace_name" ],
385+ )
386+ )
387+ items = sorted (items , key = lambda metadata : metadata .name )
388+ assert items == out
0 commit comments