Merge pull request #93907 from robscott/endpointslice-e2e-test-fix

Updating EndpointSlice e2e tests to accept duplicate EndpointSlices
This commit is contained in:
Kubernetes Prow Robot 2020-08-11 20:07:45 -07:00 committed by GitHub
commit fa13dc11d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -27,6 +27,7 @@ import (
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
@ -406,9 +407,13 @@ func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service
framework.Failf("Expected 1 EndpointSlice, got %d", len(endpointSlices)) framework.Failf("Expected 1 EndpointSlice, got %d", len(endpointSlices))
} }
totalEndpointSliceAddresses := 0 // Use a set for deduping values. Duplicate addresses are technically valid
// here although rare.
esAddresses := sets.NewString()
for _, endpointSlice := range endpointSlices { for _, endpointSlice := range endpointSlices {
totalEndpointSliceAddresses += len(endpointSlice.Endpoints) for _, endpoint := range endpointSlice.Endpoints {
esAddresses.Insert(endpoint.Addresses[0])
}
if len(pods) == 0 && len(endpointSlice.Ports) != 0 { if len(pods) == 0 && len(endpointSlice.Ports) != 0 {
framework.Failf("Expected EndpointSlice to have 0 ports, got %d", len(endpointSlice.Ports)) framework.Failf("Expected EndpointSlice to have 0 ports, got %d", len(endpointSlice.Ports))
} }
@ -463,8 +468,8 @@ func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service
} }
} }
if len(pods) != totalEndpointSliceAddresses { if len(pods) != esAddresses.Len() {
framework.Failf("Expected %d addresses, got %d", len(pods), totalEndpointSliceAddresses) framework.Failf("Expected %d addresses, got %d", len(pods), esAddresses.Len())
} }
} }
@ -492,8 +497,12 @@ func hasMatchingEndpointSlices(cs clientset.Interface, ns, svcName string, numEn
framework.Logf("EndpointSlice for Service %s/%s not found", ns, svcName) framework.Logf("EndpointSlice for Service %s/%s not found", ns, svcName)
return []discoveryv1beta1.EndpointSlice{}, false return []discoveryv1beta1.EndpointSlice{}, false
} }
if len(esList.Items) != numSlices { // In some cases the EndpointSlice controller will create more
framework.Logf("Expected %d EndpointSlices for Service %s/%s, got %d", numSlices, ns, svcName, len(esList.Items)) // EndpointSlices than necessary resulting in some duplication. This is
// valid and tests should only fail here if less EndpointSlices than
// expected are added.
if len(esList.Items) < numSlices {
framework.Logf("Expected at least %d EndpointSlices for Service %s/%s, got %d", numSlices, ns, svcName, len(esList.Items))
for i, epSlice := range esList.Items { for i, epSlice := range esList.Items {
epsData, err := json.Marshal(epSlice) epsData, err := json.Marshal(epSlice)
if err != nil { if err != nil {