@@ -1101,3 +1101,78 @@ func TestEndpointsResolver_ResolveNetworkPeers_NamedIngressPortsIPBlocks(t *test
11011101 assert .Equal (t , portsMap [policy .Spec .Ingress [0 ].Ports [1 ].Port .StrVal ], * ingPE .Ports [1 ].Port )
11021102 }
11031103}
1104+
1105+ func TestEndpointsResolver_ExcludesTerminalPods (t * testing.T ) {
1106+ ctrl := gomock .NewController (t )
1107+ defer ctrl .Finish ()
1108+
1109+ mockClient := mock_client .NewMockClient (ctrl )
1110+ resolver := NewEndpointsResolver (mockClient , logr .New (& log.NullLogSink {}))
1111+
1112+ // Create pods in different phases
1113+ runningPod := & corev1.Pod {
1114+ ObjectMeta : metav1.ObjectMeta {
1115+ Name : "running-pod" ,
1116+ Namespace : "test-ns" ,
1117+ Labels : map [string ]string {"app" : "test" },
1118+ },
1119+ Status : corev1.PodStatus {
1120+ PodIP : "10.0.0.1" ,
1121+ Phase : corev1 .PodRunning ,
1122+ },
1123+ }
1124+
1125+ succeededPod := & corev1.Pod {
1126+ ObjectMeta : metav1.ObjectMeta {
1127+ Name : "succeeded-pod" ,
1128+ Namespace : "test-ns" ,
1129+ Labels : map [string ]string {"app" : "test" },
1130+ },
1131+ Status : corev1.PodStatus {
1132+ PodIP : "10.0.0.2" ,
1133+ Phase : corev1 .PodSucceeded ,
1134+ },
1135+ }
1136+
1137+ failedPod := & corev1.Pod {
1138+ ObjectMeta : metav1.ObjectMeta {
1139+ Name : "failed-pod" ,
1140+ Namespace : "test-ns" ,
1141+ Labels : map [string ]string {"app" : "test" },
1142+ },
1143+ Status : corev1.PodStatus {
1144+ PodIP : "10.0.0.3" ,
1145+ Phase : corev1 .PodFailed ,
1146+ },
1147+ }
1148+
1149+ podList := & corev1.PodList {
1150+ Items : []corev1.Pod {* runningPod , * succeededPod , * failedPod },
1151+ }
1152+
1153+ // Mock the List call for pod selector endpoints
1154+ mockClient .EXPECT ().List (gomock .Any (), gomock .Any (), gomock .Any ()).
1155+ DoAndReturn (func (ctx context.Context , list client.ObjectList , opts ... client.ListOption ) error {
1156+ list .(* corev1.PodList ).Items = podList .Items
1157+ return nil
1158+ })
1159+
1160+ policy := & networking.NetworkPolicy {
1161+ ObjectMeta : metav1.ObjectMeta {
1162+ Name : "test-policy" ,
1163+ Namespace : "test-ns" ,
1164+ },
1165+ Spec : networking.NetworkPolicySpec {
1166+ PodSelector : metav1.LabelSelector {
1167+ MatchLabels : map [string ]string {"app" : "test" },
1168+ },
1169+ },
1170+ }
1171+
1172+ _ , _ , podEndpoints , err := resolver .Resolve (context .Background (), policy )
1173+
1174+ assert .NoError (t , err )
1175+ assert .Len (t , podEndpoints , 1 , "Should only include running pod in PolicyEndpoints" )
1176+ assert .Equal (t , "10.0.0.1" , string (podEndpoints [0 ].PodIP ))
1177+ assert .Equal (t , "running-pod" , podEndpoints [0 ].Name )
1178+ }
0 commit comments