Merge pull request #93402 from robscott/endpointslice-test-fix

Updating EndpointSlice e2e tests to be less flaky and easier to debug
This commit is contained in:
Kubernetes Prow Robot 2020-07-25 12:20:16 -07:00 committed by GitHub
commit 17a2e5e990
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -49,14 +49,14 @@ var _ = SIGDescribe("EndpointSlice", func() {
namespace := "default"
name := "kubernetes"
endpoints, err := cs.CoreV1().Endpoints(namespace).Get(context.TODO(), name, metav1.GetOptions{})
framework.ExpectNoError(err)
framework.ExpectNoError(err, "error creating Endpoints resource")
if len(endpoints.Subsets) != 1 {
framework.Failf("Expected 1 subset in endpoints, got %d: %#v", len(endpoints.Subsets), endpoints.Subsets)
}
endpointSubset := endpoints.Subsets[0]
endpointSlice, err := cs.DiscoveryV1beta1().EndpointSlices(namespace).Get(context.TODO(), name, metav1.GetOptions{})
framework.ExpectNoError(err)
framework.ExpectNoError(err, "error creating EndpointSlice resource")
if len(endpointSlice.Ports) != len(endpointSubset.Ports) {
framework.Failf("Expected EndpointSlice to have %d ports, got %d: %#v", len(endpointSubset.Ports), len(endpointSlice.Ports), endpointSlice.Ports)
}
@ -85,7 +85,7 @@ var _ = SIGDescribe("EndpointSlice", func() {
})
// Expect Endpoints resource to be created.
if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) {
if err := wait.PollImmediate(2*time.Second, wait.ForeverTestTimeout, func() (bool, error) {
_, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.TODO(), svc.Name, metav1.GetOptions{})
if err != nil {
return false, nil
@ -97,7 +97,7 @@ var _ = SIGDescribe("EndpointSlice", func() {
// Expect EndpointSlice resource to be created.
var endpointSlice discoveryv1beta1.EndpointSlice
if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) {
if err := wait.PollImmediate(2*time.Second, wait.ForeverTestTimeout, func() (bool, error) {
endpointSliceList, err := cs.DiscoveryV1beta1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: "kubernetes.io/service-name=" + svc.Name,
})
@ -126,10 +126,10 @@ var _ = SIGDescribe("EndpointSlice", func() {
}
err := cs.CoreV1().Services(svc.Namespace).Delete(context.TODO(), svc.Name, metav1.DeleteOptions{})
framework.ExpectNoError(err)
framework.ExpectNoError(err, "error deleting Service")
// Expect Endpoints resource to be deleted when Service is.
if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) {
if err := wait.PollImmediate(2*time.Second, wait.ForeverTestTimeout, func() (bool, error) {
_, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.TODO(), svc.Name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
@ -143,7 +143,7 @@ var _ = SIGDescribe("EndpointSlice", func() {
}
// Expect EndpointSlice resource to be deleted when Service is.
if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) {
if err := wait.PollImmediate(2*time.Second, wait.ForeverTestTimeout, func() (bool, error) {
endpointSliceList, err := cs.DiscoveryV1beta1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: "kubernetes.io/service-name=" + svc.Name,
})
@ -218,7 +218,8 @@ var _ = SIGDescribe("EndpointSlice", func() {
Name: "example-int-port",
},
Spec: v1.ServiceSpec{
Selector: map[string]string{labelPod1: labelValue},
Selector: map[string]string{labelPod1: labelValue},
PublishNotReadyAddresses: true,
Ports: []v1.ServicePort{{
Name: "example",
Port: 80,
@ -233,7 +234,8 @@ var _ = SIGDescribe("EndpointSlice", func() {
Name: "example-named-port",
},
Spec: v1.ServiceSpec{
Selector: map[string]string{labelShared12: labelValue},
Selector: map[string]string{labelShared12: labelValue},
PublishNotReadyAddresses: true,
Ports: []v1.ServicePort{{
Name: "http",
Port: 80,
@ -248,7 +250,8 @@ var _ = SIGDescribe("EndpointSlice", func() {
Name: "example-no-match",
},
Spec: v1.ServiceSpec{
Selector: map[string]string{labelPod3: labelValue},
Selector: map[string]string{labelPod3: labelValue},
PublishNotReadyAddresses: true,
Ports: []v1.ServicePort{{
Name: "example-no-match",
Port: 80,
@ -259,30 +262,26 @@ var _ = SIGDescribe("EndpointSlice", func() {
})
err := wait.Poll(5*time.Second, 3*time.Minute, func() (bool, error) {
if !podClient.PodIsReady(pod1.Name) {
framework.Logf("Pod 1 not ready yet")
return false, nil
}
if !podClient.PodIsReady(pod2.Name) {
framework.Logf("Pod 2 not ready yet")
return false, nil
}
var err error
pod1, err = podClient.Get(context.TODO(), pod1.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
if len(pod1.Status.PodIPs) == 0 {
return false, nil
}
pod2, err = podClient.Get(context.TODO(), pod2.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
if len(pod2.Status.PodIPs) == 0 {
return false, nil
}
return true, nil
})
framework.ExpectNoError(err)
framework.ExpectNoError(err, "timed out waiting for Pods to have IPs assigned")
ginkgo.By("referencing a single matching pod")
expectEndpointsAndSlices(cs, f.Namespace.Name, svc1, []*v1.Pod{pod1}, 1, 1, false)
@ -560,6 +559,6 @@ func ensurePodTargetRef(pod *v1.Pod, targetRef *v1.ObjectReference) {
// createServiceReportErr creates a Service and reports any associated error.
func createServiceReportErr(cs clientset.Interface, ns string, service *v1.Service) *v1.Service {
svc, err := cs.CoreV1().Services(ns).Create(context.TODO(), service, metav1.CreateOptions{})
framework.ExpectNoError(err)
framework.ExpectNoError(err, "error deleting Service")
return svc
}