@@ -27,6 +27,7 @@ import (
27
27
apierrors "k8s.io/apimachinery/pkg/api/errors"
28
28
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29
29
"k8s.io/apimachinery/pkg/util/intstr"
30
+ "k8s.io/apimachinery/pkg/util/sets"
30
31
"k8s.io/apimachinery/pkg/util/wait"
31
32
clientset "k8s.io/client-go/kubernetes"
32
33
"k8s.io/kubernetes/test/e2e/framework"
@@ -406,9 +407,13 @@ func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service
406
407
framework .Failf ("Expected 1 EndpointSlice, got %d" , len (endpointSlices ))
407
408
}
408
409
409
- totalEndpointSliceAddresses := 0
410
+ // Use a set for deduping values. Duplicate addresses are technically valid
411
+ // here although rare.
412
+ esAddresses := sets .NewString ()
410
413
for _ , endpointSlice := range endpointSlices {
411
- totalEndpointSliceAddresses += len (endpointSlice .Endpoints )
414
+ for _ , endpoint := range endpointSlice .Endpoints {
415
+ esAddresses .Insert (endpoint .Addresses [0 ])
416
+ }
412
417
if len (pods ) == 0 && len (endpointSlice .Ports ) != 0 {
413
418
framework .Failf ("Expected EndpointSlice to have 0 ports, got %d" , len (endpointSlice .Ports ))
414
419
}
@@ -463,8 +468,8 @@ func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service
463
468
}
464
469
}
465
470
466
- if len (pods ) != totalEndpointSliceAddresses {
467
- framework .Failf ("Expected %d addresses, got %d" , len (pods ), totalEndpointSliceAddresses )
471
+ if len (pods ) != esAddresses . Len () {
472
+ framework .Failf ("Expected %d addresses, got %d" , len (pods ), esAddresses . Len () )
468
473
}
469
474
}
470
475
@@ -492,8 +497,12 @@ func hasMatchingEndpointSlices(cs clientset.Interface, ns, svcName string, numEn
492
497
framework .Logf ("EndpointSlice for Service %s/%s not found" , ns , svcName )
493
498
return []discoveryv1beta1.EndpointSlice {}, false
494
499
}
495
- if len (esList .Items ) != numSlices {
496
- framework .Logf ("Expected %d EndpointSlices for Service %s/%s, got %d" , numSlices , ns , svcName , len (esList .Items ))
500
+ // In some cases the EndpointSlice controller will create more
501
+ // EndpointSlices than necessary resulting in some duplication. This is
502
+ // valid and tests should only fail here if less EndpointSlices than
503
+ // expected are added.
504
+ if len (esList .Items ) < numSlices {
505
+ framework .Logf ("Expected at least %d EndpointSlices for Service %s/%s, got %d" , numSlices , ns , svcName , len (esList .Items ))
497
506
for i , epSlice := range esList .Items {
498
507
epsData , err := json .Marshal (epSlice )
499
508
if err != nil {
0 commit comments