@@ -154,7 +154,7 @@ func TestPodInfo(t *testing.T) {
154154 mock .Anything ,
155155 mock .Anything ,
156156 ).Return (nil )
157- _ , err := pi .PodInfo ("container1" )
157+ _ , _ , err := pi .LookupByContainerID ("container1" )
158158 assert .ErrorIs (t , err , ErrNoPod , "unexpected error returned" )
159159 })
160160 t .Run ("exactly one pod found" , func (t * testing.T ) {
@@ -179,11 +179,12 @@ func TestPodInfo(t *testing.T) {
179179 pods := args .Get (1 ).(* corev1.PodList )
180180 pods .Items = []corev1.Pod {pod1 }
181181 })
182- retPod , err := pi .PodInfo ("container1" )
182+ retPod , containerName , err := pi .LookupByContainerID ("container1" )
183183 assert .NoError (t , err )
184184 assert .Equal (t , string (pod1 .UID ), retPod .ID , "unexpected pod id" )
185185 assert .Equal (t , pod1 .Name , retPod .Name , "unexpected pod name" )
186186 assert .Equal (t , pod1 .Namespace , retPod .Namespace , "unexpected pod namespace" )
187+ assert .Equal (t , "" , containerName , "expected empty container name" )
187188 })
188189 t .Run ("more than one pod found" , func (t * testing.T ) {
189190 pi := NewInformer ()
@@ -207,7 +208,7 @@ func TestPodInfo(t *testing.T) {
207208 pods := args .Get (1 ).(* corev1.PodList )
208209 pods .Items = []corev1.Pod {pod1 , pod1 }
209210 })
210- _ , err := pi .PodInfo ("container1" )
211+ _ , _ , err := pi .LookupByContainerID ("container1" )
211212 assert .ErrorContains (t , err , "multiple pods found for containerID" )
212213 })
213214 t .Run ("cache error" , func (t * testing.T ) {
@@ -222,7 +223,7 @@ func TestPodInfo(t *testing.T) {
222223 mock .Anything ,
223224 mock .Anything ,
224225 ).Return (fmt .Errorf ("!!you shall not pass!!" ))
225- _ , err := pi .PodInfo ("container1" )
226+ _ , _ , err := pi .LookupByContainerID ("container1" )
226227 assert .ErrorContains (t , err , "error retrieving pod info from cache" )
227228 })
228229}
@@ -244,7 +245,7 @@ func TestPodInformer_RunIntegration(t *testing.T) {
244245 },
245246 Status : corev1.PodStatus {
246247 ContainerStatuses : []corev1.ContainerStatus {
247- {ContainerID : "containerd://abc123" },
248+ {Name : "test-container" , ContainerID : "containerd://abc123" },
248249 },
249250 },
250251 }
@@ -279,13 +280,14 @@ func TestPodInformer_RunIntegration(t *testing.T) {
279280
280281 time .Sleep (50 * time .Millisecond )
281282
282- podInfo , err := pi .PodInfo ("abc123" )
283+ podInfo , containerName , err := pi .LookupByContainerID ("abc123" )
283284 if err != nil {
284- t .Logf ("PodInfo lookup failed (expected in fake setup): %v" , err )
285+ t .Logf ("LookupByContainerID lookup failed (expected in fake setup): %v" , err )
285286 } else {
286287 assert .Equal (t , "test-pod" , podInfo .Name )
287288 assert .Equal (t , "default" , podInfo .Namespace )
288289 assert .Equal (t , "test-uid-123" , podInfo .ID )
290+ assert .Equal (t , "test-container" , containerName )
289291 }
290292
291293 cancel ()
@@ -299,6 +301,112 @@ func TestPodInformer_RunIntegration(t *testing.T) {
299301 })
300302}
301303
304+ func TestFindContainerName (t * testing.T ) {
305+ pi := NewInformer ()
306+
307+ t .Run ("find container in regular containers" , func (t * testing.T ) {
308+ pod := & corev1.Pod {
309+ Status : corev1.PodStatus {
310+ ContainerStatuses : []corev1.ContainerStatus {
311+ {Name : "app-container" , ContainerID : "containerd://abc123" },
312+ {Name : "sidecar-container" , ContainerID : "containerd://def456" },
313+ },
314+ },
315+ }
316+ containerName := pi .findContainerName (pod , "abc123" )
317+ assert .Equal (t , "app-container" , containerName )
318+
319+ containerName = pi .findContainerName (pod , "def456" )
320+ assert .Equal (t , "sidecar-container" , containerName )
321+ })
322+
323+ t .Run ("find container in ephemeral containers" , func (t * testing.T ) {
324+ pod := & corev1.Pod {
325+ Status : corev1.PodStatus {
326+ EphemeralContainerStatuses : []corev1.ContainerStatus {
327+ {Name : "debug-container" , ContainerID : "cri-o://ephemeral123" },
328+ },
329+ },
330+ }
331+ containerName := pi .findContainerName (pod , "ephemeral123" )
332+ assert .Equal (t , "debug-container" , containerName )
333+ })
334+
335+ t .Run ("find container in init containers" , func (t * testing.T ) {
336+ pod := & corev1.Pod {
337+ Status : corev1.PodStatus {
338+ InitContainerStatuses : []corev1.ContainerStatus {
339+ {Name : "init-container" , ContainerID : "containerd://init123" },
340+ },
341+ },
342+ }
343+ containerName := pi .findContainerName (pod , "init123" )
344+ assert .Equal (t , "init-container" , containerName )
345+ })
346+
347+ t .Run ("container not found returns empty string" , func (t * testing.T ) {
348+ pod := & corev1.Pod {
349+ Status : corev1.PodStatus {
350+ ContainerStatuses : []corev1.ContainerStatus {
351+ {Name : "app-container" , ContainerID : "containerd://abc123" },
352+ },
353+ },
354+ }
355+ containerName := pi .findContainerName (pod , "nonexistent" )
356+ assert .Equal (t , "" , containerName )
357+ })
358+
359+ t .Run ("empty container ID in status" , func (t * testing.T ) {
360+ pod := & corev1.Pod {
361+ Status : corev1.PodStatus {
362+ ContainerStatuses : []corev1.ContainerStatus {
363+ {Name : "app-container" , ContainerID : "" },
364+ {Name : "running-container" , ContainerID : "containerd://running123" },
365+ },
366+ },
367+ }
368+ containerName := pi .findContainerName (pod , "running123" )
369+ assert .Equal (t , "running-container" , containerName )
370+ })
371+
372+ t .Run ("mixed container types" , func (t * testing.T ) {
373+ pod := & corev1.Pod {
374+ Status : corev1.PodStatus {
375+ InitContainerStatuses : []corev1.ContainerStatus {
376+ {Name : "init-container" , ContainerID : "containerd://init123" },
377+ },
378+ ContainerStatuses : []corev1.ContainerStatus {
379+ {Name : "app-container" , ContainerID : "containerd://app123" },
380+ },
381+ EphemeralContainerStatuses : []corev1.ContainerStatus {
382+ {Name : "debug-container" , ContainerID : "cri-o://debug123" },
383+ },
384+ },
385+ }
386+
387+ // Test finding in each type
388+ assert .Equal (t , "init-container" , pi .findContainerName (pod , "init123" ))
389+ assert .Equal (t , "app-container" , pi .findContainerName (pod , "app123" ))
390+ assert .Equal (t , "debug-container" , pi .findContainerName (pod , "debug123" ))
391+ })
392+
393+ t .Run ("different container runtime prefixes" , func (t * testing.T ) {
394+ pod := & corev1.Pod {
395+ Status : corev1.PodStatus {
396+ ContainerStatuses : []corev1.ContainerStatus {
397+ {Name : "containerd-container" , ContainerID : "containerd://containerd123" },
398+ {Name : "crio-container" , ContainerID : "cri-o://crio123" },
399+ {Name : "docker-container" , ContainerID : "docker://docker123" },
400+ },
401+ },
402+ }
403+
404+ assert .Equal (t , "containerd-container" , pi .findContainerName (pod , "containerd123" ))
405+ assert .Equal (t , "crio-container" , pi .findContainerName (pod , "crio123" ))
406+ assert .Equal (t , "docker-container" , pi .findContainerName (pod , "docker123" ))
407+ })
408+ }
409+
302410func TestSlogLevelToZapLevel (t * testing.T ) {
303411 tests := []struct {
304412 input slog.Level
0 commit comments