@@ -238,3 +238,151 @@ def test_koji_vmi_compound_product_name(fake_koji, koji_dir):
238
238
signing_key = None ,
239
239
release = rel_obj ,
240
240
)
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