Skip to content

Commit 872f775

Browse files
committed
Fix parallel validation to accept BundleImage dict
This commit fixes the parallel validation class to validate the bundlePath from the bundles dictionary Refers to CLOUDDST-29408 Signed-off-by: Jonathan Gangi <[email protected]> Assisted-by: Cursor/Gemini
1 parent ca3fc1b commit 872f775

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

iib/workers/tasks/containerized_utils.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,15 @@ def run(self) -> None:
6262
try:
6363
while not self.bundles_queue.empty():
6464
bundle = self.bundles_queue.get()
65-
skopeo_inspect(f'docker://{bundle}', '--raw', return_json=False)
65+
skopeo_inspect(f'docker://{bundle["bundlePath"]}', '--raw', return_json=False)
6666
except IIBError as e:
6767
self.bundle = bundle
68-
log.error(f"Error validating bundle {bundle}: {e}")
68+
bundle_str = (
69+
bundle["bundlePath"]
70+
if bundle and isinstance(bundle, dict) and "bundlePath" in bundle
71+
else bundle
72+
)
73+
log.error(f"Error validating bundle {bundle_str}: {e}")
6974
self.exception = e
7075
finally:
7176
while not self.bundles_queue.empty():
@@ -81,7 +86,10 @@ def wait_for_bundle_validation_threads(validation_threads: List[ValidateBundlesT
8186
for t in validation_threads:
8287
t.join()
8388
if t.exception:
84-
bundle_str = str(t.bundle) if t.bundle else "unknown"
89+
if t.bundle and isinstance(t.bundle, dict) and "bundlePath" in t.bundle:
90+
bundle_str = t.bundle["bundlePath"]
91+
else:
92+
bundle_str = str(t.bundle) if t.bundle else "unknown"
8593
log.error(f"Error validating bundle {bundle_str}: {t.exception}")
8694
raise IIBError(f"Error validating bundle {bundle_str}: {t.exception}")
8795

tests/test_workers/test_tasks/test_containerized_utils.py

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ def test_cleanup_on_failure_no_restore_when_no_original_digest(
440440
@patch('iib.workers.tasks.containerized_utils.skopeo_inspect')
441441
def test_validate_bundles_in_parallel_success_single_bundle(mock_skopeo_inspect):
442442
"""Test validate_bundles_in_parallel with a single bundle successfully."""
443-
bundles = ['quay.io/ns/bundle1:v1.0.0']
443+
bundles = [{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'}]
444444
mock_skopeo_inspect.return_value = None
445445

446446
result = validate_bundles_in_parallel(bundles, threads=1, wait=True)
@@ -455,9 +455,9 @@ def test_validate_bundles_in_parallel_success_single_bundle(mock_skopeo_inspect)
455455
def test_validate_bundles_in_parallel_success_multiple_bundles(mock_skopeo_inspect):
456456
"""Test validate_bundles_in_parallel with multiple bundles successfully."""
457457
bundles = [
458-
'quay.io/ns/bundle1:v1.0.0',
459-
'quay.io/ns/bundle2:v2.0.0',
460-
'quay.io/ns/bundle3:v3.0.0',
458+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
459+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
460+
{"bundlePath": 'quay.io/ns/bundle3:v3.0.0'},
461461
]
462462
mock_skopeo_inspect.return_value = None
463463

@@ -487,8 +487,8 @@ def test_validate_bundles_in_parallel_empty_bundles(mock_skopeo_inspect):
487487
def test_validate_bundles_in_parallel_custom_thread_count(mock_skopeo_inspect):
488488
"""Test validate_bundles_in_parallel with custom thread count."""
489489
bundles = [
490-
'quay.io/ns/bundle1:v1.0.0',
491-
'quay.io/ns/bundle2:v2.0.0',
490+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
491+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
492492
]
493493
mock_skopeo_inspect.return_value = None
494494

@@ -501,7 +501,7 @@ def test_validate_bundles_in_parallel_custom_thread_count(mock_skopeo_inspect):
501501
@patch('iib.workers.tasks.containerized_utils.skopeo_inspect')
502502
def test_validate_bundles_in_parallel_wait_false_returns_threads(mock_skopeo_inspect):
503503
"""Test validate_bundles_in_parallel with wait=False returns thread list."""
504-
bundles = ['quay.io/ns/bundle1:v1.0.0']
504+
bundles = [{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'}]
505505
mock_skopeo_inspect.return_value = None
506506

507507
result = validate_bundles_in_parallel(bundles, threads=1, wait=False)
@@ -520,7 +520,7 @@ def test_validate_bundles_in_parallel_wait_false_returns_threads(mock_skopeo_ins
520520
@patch('iib.workers.tasks.containerized_utils.skopeo_inspect')
521521
def test_validate_bundles_in_parallel_failure_raises_error(mock_skopeo_inspect, mock_log):
522522
"""Test validate_bundles_in_parallel raises IIBError when bundle validation fails."""
523-
bundles = ['quay.io/ns/bundle1:v1.0.0']
523+
bundles = [{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'}]
524524
error = IIBError('Bundle not found')
525525
mock_skopeo_inspect.side_effect = error
526526

@@ -536,11 +536,11 @@ def test_validate_bundles_in_parallel_failure_raises_error(mock_skopeo_inspect,
536536
def test_validate_bundles_in_parallel_more_bundles_than_threads(mock_skopeo_inspect):
537537
"""Test validate_bundles_in_parallel with more bundles than threads."""
538538
bundles = [
539-
'quay.io/ns/bundle1:v1.0.0',
540-
'quay.io/ns/bundle2:v2.0.0',
541-
'quay.io/ns/bundle3:v3.0.0',
542-
'quay.io/ns/bundle4:v4.0.0',
543-
'quay.io/ns/bundle5:v5.0.0',
539+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
540+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
541+
{"bundlePath": 'quay.io/ns/bundle3:v3.0.0'},
542+
{"bundlePath": 'quay.io/ns/bundle4:v4.0.0'},
543+
{"bundlePath": 'quay.io/ns/bundle5:v5.0.0'},
544544
]
545545
mock_skopeo_inspect.return_value = None
546546

@@ -553,7 +553,7 @@ def test_validate_bundles_in_parallel_more_bundles_than_threads(mock_skopeo_insp
553553
@patch('iib.workers.tasks.containerized_utils.skopeo_inspect')
554554
def test_validate_bundles_in_parallel_default_parameters(mock_skopeo_inspect):
555555
"""Test validate_bundles_in_parallel with default parameters."""
556-
bundles = ['quay.io/ns/bundle1:v1.0.0']
556+
bundles = [{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'}]
557557
mock_skopeo_inspect.return_value = None
558558

559559
result = validate_bundles_in_parallel(bundles)
@@ -568,8 +568,8 @@ def test_validate_bundles_in_parallel_default_parameters(mock_skopeo_inspect):
568568
def test_validate_bundles_in_parallel_multiple_threads_processing_queue(mock_skopeo_inspect):
569569
"""Test that multiple threads properly process bundles from the queue."""
570570
bundles = [
571-
'quay.io/ns/bundle1:v1.0.0',
572-
'quay.io/ns/bundle2:v2.0.0',
571+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
572+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
573573
]
574574
mock_skopeo_inspect.return_value = None
575575

@@ -591,8 +591,8 @@ def test_validate_bundles_in_parallel_one_bundle_fails_others_succeed(
591591
):
592592
"""Test that when one bundle fails, the error is logged and raised."""
593593
bundles = [
594-
'quay.io/ns/bundle1:v1.0.0',
595-
'quay.io/ns/bundle2:v2.0.0',
594+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
595+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
596596
]
597597
# First bundle succeeds, second fails
598598
mock_skopeo_inspect.side_effect = [None, IIBError('Bundle not found')]
@@ -612,7 +612,7 @@ def test_wait_for_bundle_validation_threads_success(mock_skopeo_inspect):
612612
import queue
613613

614614
bundles_queue = queue.Queue()
615-
bundles_queue.put('quay.io/ns/bundle1:v1.0.0')
615+
bundles_queue.put({"bundlePath": 'quay.io/ns/bundle1:v1.0.0'})
616616
mock_skopeo_inspect.return_value = None
617617

618618
thread = ValidateBundlesThread(bundles_queue)
@@ -635,7 +635,7 @@ def test_wait_for_bundle_validation_threads_failure_raises_error(mock_skopeo_ins
635635
import queue
636636

637637
bundles_queue = queue.Queue()
638-
bundles_queue.put('quay.io/ns/bundle1:v1.0.0')
638+
bundles_queue.put({"bundlePath": 'quay.io/ns/bundle1:v1.0.0'})
639639
error = IIBError('Bundle not found')
640640
mock_skopeo_inspect.side_effect = error
641641

@@ -647,7 +647,7 @@ def test_wait_for_bundle_validation_threads_failure_raises_error(mock_skopeo_ins
647647

648648
assert mock_skopeo_inspect.called
649649
assert thread.exception == error
650-
assert thread.bundle == 'quay.io/ns/bundle1:v1.0.0'
650+
assert thread.bundle == {"bundlePath": 'quay.io/ns/bundle1:v1.0.0'}
651651
mock_log.error.assert_called()
652652

653653

@@ -661,9 +661,9 @@ def test_wait_for_bundle_validation_threads_multiple_threads_one_fails(
661661
import queue
662662

663663
bundles_queue1 = queue.Queue()
664-
bundles_queue1.put('quay.io/ns/bundle1:v1.0.0')
664+
bundles_queue1.put({"bundlePath": 'quay.io/ns/bundle1:v1.0.0'})
665665
bundles_queue2 = queue.Queue()
666-
bundles_queue2.put('quay.io/ns/bundle2:v2.0.0')
666+
bundles_queue2.put({"bundlePath": 'quay.io/ns/bundle2:v2.0.0'})
667667

668668
mock_skopeo_inspect.side_effect = [None, IIBError('Bundle not found')]
669669

@@ -685,8 +685,8 @@ def test_wait_for_bundle_validation_threads_multiple_threads_one_fails(
685685
def test_validate_bundles_in_parallel_wait_false_then_wait_manually(mock_skopeo_inspect):
686686
"""Test validate_bundles_in_parallel with wait=False and then manually waiting."""
687687
bundles = [
688-
'quay.io/ns/bundle1:v1.0.0',
689-
'quay.io/ns/bundle2:v2.0.0',
688+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
689+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
690690
]
691691
mock_skopeo_inspect.return_value = None
692692

@@ -713,8 +713,8 @@ def test_validate_bundles_in_parallel_wait_false_then_wait_manually_with_failure
713713
):
714714
"""Test validate_bundles_in_parallel with wait=False, then manually waiting when one fails."""
715715
bundles = [
716-
'quay.io/ns/bundle1:v1.0.0',
717-
'quay.io/ns/bundle2:v2.0.0',
716+
{"bundlePath": 'quay.io/ns/bundle1:v1.0.0'},
717+
{"bundlePath": 'quay.io/ns/bundle2:v2.0.0'},
718718
]
719719
mock_skopeo_inspect.side_effect = [None, IIBError('Bundle not found')]
720720

@@ -748,7 +748,7 @@ def test_wait_for_bundle_validation_threads_unknown_bundle_on_error(mock_skopeo_
748748

749749
bundles_queue = queue.Queue()
750750
# Add a bundle to the queue so the thread will process it
751-
bundles_queue.put('quay.io/ns/bundle1:v1.0.0')
751+
bundles_queue.put({"bundlePath": 'quay.io/ns/bundle1:v1.0.0'})
752752
error = IIBError('Bundle not found')
753753
mock_skopeo_inspect.side_effect = error
754754

0 commit comments

Comments
 (0)