@@ -373,6 +373,181 @@ func TestFetchContainersData_WithSidecarContainers(t *testing.T) {
373373 assert .Equal (t , "192.168.0.33" , result [sidecarBID ]["nodeIP" ])
374374}
375375
376+ func TestFetchContainersData_WithoutOrderOfInitContainers (t * testing.T ) {
377+ t .Parallel ()
378+
379+ startedAt , _ := time .Parse (time .RFC3339 , "2025-01-02T15:04:05Z" )
380+ restartPolicyAlways := corev1 .ContainerRestartPolicyAlways
381+ podName := "test-pod"
382+ namespace := "default"
383+ sideCarAContainerName := "sidecar-a"
384+ sideCarBContainerName := "sidecar-b"
385+ initContainerName := "normal-init"
386+
387+ pod := & corev1.Pod {
388+ ObjectMeta : metav1.ObjectMeta {
389+ Name : podName ,
390+ Namespace : namespace ,
391+ },
392+ Spec : corev1.PodSpec {
393+ InitContainers : []corev1.Container {
394+ {
395+ Name : sideCarAContainerName ,
396+ RestartPolicy : & restartPolicyAlways ,
397+ },
398+ {
399+ Name : initContainerName ,
400+ },
401+ {
402+ Name : sideCarBContainerName ,
403+ RestartPolicy : & restartPolicyAlways ,
404+ },
405+ },
406+ },
407+ Status : corev1.PodStatus {
408+ HostIP : "192.168.0.33" ,
409+
410+ InitContainerStatuses : []corev1.ContainerStatus {
411+ // Normal init containers should be skipped
412+ {
413+ Name : initContainerName ,
414+ State : corev1.ContainerState {
415+ Terminated : & corev1.ContainerStateTerminated {
416+ FinishedAt : metav1 .NewTime (startedAt ),
417+ ExitCode : 0 ,
418+ Reason : "Completed" ,
419+ },
420+ },
421+ Ready : true ,
422+ },
423+ {
424+ Name : sideCarBContainerName ,
425+ State : corev1.ContainerState {
426+ Waiting : & corev1.ContainerStateWaiting {
427+ Reason : "ContainerCreating" ,
428+ },
429+ },
430+ LastTerminationState : corev1.ContainerState {
431+ Terminated : & corev1.ContainerStateTerminated {
432+ FinishedAt : metav1 .NewTime (startedAt ),
433+ ExitCode : 137 ,
434+ Reason : "OOMKilled" ,
435+ },
436+ },
437+ Ready : false ,
438+ },
439+ // statuses are not in the same order as the init containers
440+ {
441+ Name : sideCarAContainerName ,
442+ State : corev1.ContainerState {
443+ Running : & corev1.ContainerStateRunning {
444+ StartedAt : metav1 .NewTime (startedAt ),
445+ },
446+ },
447+ Ready : true ,
448+ RestartCount : 2 ,
449+ },
450+ },
451+ },
452+ }
453+
454+ podFetcher := & PodsFetcher {}
455+ result := podFetcher .fetchContainersData (pod )
456+
457+ sidecarAID := fmt .Sprintf ("%s_%s_%s" , namespace , podName , sideCarAContainerName )
458+ sidecarBID := fmt .Sprintf ("%s_%s_%s" , namespace , podName , sideCarBContainerName )
459+ assert .Equal (t , 2 , len (result ), "expected only the sidecar containers to be processed" )
460+ assert .Contains (t , result , sidecarAID , "expected sidecar-a to be present as a key" )
461+ assert .Contains (t , result , sidecarBID , "expected sidecar-b to be present as a key" )
462+
463+ assert .Equal (t , "Running" , result [sidecarAID ]["status" ])
464+ assert .Equal (t , "Waiting" , result [sidecarBID ]["status" ])
465+ assert .Equal (t , true , result [sidecarAID ]["isReady" ])
466+ assert .Equal (t , int32 (2 ), result [sidecarAID ]["restartCount" ])
467+ assert .Equal (t , startedAt , result [sidecarAID ]["startedAt" ])
468+ assert .Equal (t , "OOMKilled" , result [sidecarBID ]["lastTerminatedExitReason" ])
469+ assert .Equal (t , int32 (137 ), result [sidecarBID ]["lastTerminatedExitCode" ])
470+ assert .Equal (t , "192.168.0.33" , result [sidecarAID ]["nodeIP" ])
471+ assert .Equal (t , "192.168.0.33" , result [sidecarBID ]["nodeIP" ])
472+ }
473+
474+ func TestFetchContainersData_WithLessInitContainerStatuses (t * testing.T ) {
475+ t .Parallel ()
476+
477+ startedAt , _ := time .Parse (time .RFC3339 , "2025-01-02T15:04:05Z" )
478+ restartPolicyAlways := corev1 .ContainerRestartPolicyAlways
479+ podName := "test-pod"
480+ namespace := "default"
481+ sideCarAContainerName := "sidecar-a"
482+ sideCarBContainerName := "sidecar-b"
483+ initContainerName := "normal-init"
484+
485+ pod := & corev1.Pod {
486+ ObjectMeta : metav1.ObjectMeta {
487+ Name : podName ,
488+ Namespace : namespace ,
489+ },
490+ Spec : corev1.PodSpec {
491+ InitContainers : []corev1.Container {
492+ {
493+ Name : sideCarAContainerName ,
494+ RestartPolicy : & restartPolicyAlways ,
495+ },
496+ {
497+ Name : initContainerName ,
498+ },
499+ {
500+ Name : sideCarBContainerName ,
501+ RestartPolicy : & restartPolicyAlways ,
502+ },
503+ },
504+ },
505+ Status : corev1.PodStatus {
506+ HostIP : "192.168.0.33" ,
507+
508+ InitContainerStatuses : []corev1.ContainerStatus {
509+ {
510+ Name : sideCarAContainerName ,
511+ State : corev1.ContainerState {
512+ Running : & corev1.ContainerStateRunning {
513+ StartedAt : metav1 .NewTime (startedAt ),
514+ },
515+ },
516+ Ready : true ,
517+ RestartCount : 2 ,
518+ },
519+ },
520+ },
521+ }
522+
523+ podFetcher := & PodsFetcher {}
524+ result := podFetcher .fetchContainersData (pod )
525+
526+ sidecarAID := fmt .Sprintf ("%s_%s_%s" , namespace , podName , sideCarAContainerName )
527+ sidecarBID := fmt .Sprintf ("%s_%s_%s" , namespace , podName , sideCarBContainerName )
528+ assert .Equal (t , 2 , len (result ), "expected only the sidecar containers to be processed" )
529+ assert .Contains (t , result , sidecarAID , "expected sidecar-a to be present as a key" )
530+ assert .Contains (t , result , sidecarBID , "expected sidecar-b to be present as a key" )
531+
532+ assert .Equal (t , "Running" , result [sidecarAID ]["status" ])
533+ assert .Equal (t , true , result [sidecarAID ]["isReady" ])
534+ assert .Equal (t , int32 (2 ), result [sidecarAID ]["restartCount" ])
535+ assert .Equal (t , startedAt , result [sidecarAID ]["startedAt" ])
536+
537+ // sidecar-b has no corresponding init status in the PodStatus, so status-related fields should be absent
538+ _ , hasStatus := result [sidecarBID ]["status" ]
539+ assert .False (t , hasStatus , "expected sidecar-b to have no status when init status is missing" )
540+
541+ _ , hasLastTermReason := result [sidecarBID ]["lastTerminatedExitReason" ]
542+ assert .False (t , hasLastTermReason )
543+
544+ _ , hasLastTermCode := result [sidecarBID ]["lastTerminatedExitCode" ]
545+ assert .False (t , hasLastTermCode )
546+
547+ assert .Equal (t , "192.168.0.33" , result [sidecarAID ]["nodeIP" ])
548+ assert .Equal (t , "192.168.0.33" , result [sidecarBID ]["nodeIP" ])
549+ }
550+
376551const (
377552 testContainerName = "app"
378553 testNodeName = "node"
0 commit comments