From 9c87deb487a80815271c49dd05944dc2fbef9992 Mon Sep 17 00:00:00 2001 From: Yuiko Mori Date: Tue, 7 Apr 2020 08:11:30 +0000 Subject: [PATCH] Move WaitForService() into e2eservice --- test/e2e/cloud/gcp/BUILD | 1 + test/e2e/cloud/gcp/addon_update.go | 3 ++- test/e2e/framework/network/BUILD | 2 ++ test/e2e/framework/network/utils.go | 30 ++++++++++++++++++++++++- test/e2e/framework/util.go | 26 --------------------- test/e2e/kubectl/BUILD | 1 + test/e2e/kubectl/kubectl.go | 5 +++-- test/e2e/network/example_cluster_dns.go | 3 ++- test/e2e/ui/BUILD | 1 + test/e2e/ui/dashboard.go | 3 ++- 10 files changed, 43 insertions(+), 32 deletions(-) diff --git a/test/e2e/cloud/gcp/BUILD b/test/e2e/cloud/gcp/BUILD index 656e81ea4a2..de57647c018 100644 --- a/test/e2e/cloud/gcp/BUILD +++ b/test/e2e/cloud/gcp/BUILD @@ -34,6 +34,7 @@ go_library( "//test/e2e/framework/config:go_default_library", "//test/e2e/framework/ginkgowrapper:go_default_library", "//test/e2e/framework/kubelet:go_default_library", + "//test/e2e/framework/network:go_default_library", "//test/e2e/framework/node:go_default_library", "//test/e2e/framework/pod:go_default_library", "//test/e2e/framework/skipper:go_default_library", diff --git a/test/e2e/cloud/gcp/addon_update.go b/test/e2e/cloud/gcp/addon_update.go index f1ee3c0ad93..a6a842c236f 100644 --- a/test/e2e/cloud/gcp/addon_update.go +++ b/test/e2e/cloud/gcp/addon_update.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" + e2enetwork "k8s.io/kubernetes/test/e2e/framework/network" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" e2essh "k8s.io/kubernetes/test/e2e/framework/ssh" testutils "k8s.io/kubernetes/test/utils" @@ -344,7 +345,7 @@ var _ = SIGDescribe("Addon update", func() { }) func waitForServiceInAddonTest(c clientset.Interface, addonNamespace, name string, exist bool) { - framework.ExpectNoError(framework.WaitForService(c, addonNamespace, name, exist, addonTestPollInterval, addonTestPollTimeout)) + framework.ExpectNoError(e2enetwork.WaitForService(c, addonNamespace, name, exist, addonTestPollInterval, addonTestPollTimeout)) } func waitForReplicationControllerInAddonTest(c clientset.Interface, addonNamespace, name string, exist bool) { diff --git a/test/e2e/framework/network/BUILD b/test/e2e/framework/network/BUILD index 8af2a28a215..14f57a1f64c 100644 --- a/test/e2e/framework/network/BUILD +++ b/test/e2e/framework/network/BUILD @@ -7,6 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", @@ -21,6 +22,7 @@ go_library( "//test/e2e/framework/pod:go_default_library", "//test/e2e/framework/skipper:go_default_library", "//test/e2e/framework/ssh:go_default_library", + "//test/utils:go_default_library", "//test/utils/image:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", ], diff --git a/test/e2e/framework/network/utils.go b/test/e2e/framework/network/utils.go index 8d9f9e9a04d..f7e83ef1242 100644 --- a/test/e2e/framework/network/utils.go +++ b/test/e2e/framework/network/utils.go @@ -29,6 +29,7 @@ import ( "github.com/onsi/ginkgo" v1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/intstr" @@ -43,6 +44,7 @@ import ( e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" e2essh "k8s.io/kubernetes/test/e2e/framework/ssh" + testutils "k8s.io/kubernetes/test/utils" imageutils "k8s.io/kubernetes/test/utils/image" ) @@ -613,7 +615,7 @@ func (config *NetworkingTestConfig) createService(serviceSpec *v1.Service) *v1.S _, err := config.getServiceClient().Create(context.TODO(), serviceSpec, metav1.CreateOptions{}) framework.ExpectNoError(err, fmt.Sprintf("Failed to create %s service: %v", serviceSpec.Name, err)) - err = framework.WaitForService(config.f.ClientSet, config.Namespace, serviceSpec.Name, true, 5*time.Second, 45*time.Second) + err = WaitForService(config.f.ClientSet, config.Namespace, serviceSpec.Name, true, 5*time.Second, 45*time.Second) framework.ExpectNoError(err, fmt.Sprintf("error while waiting for service:%s err: %v", serviceSpec.Name, err)) createdService, err := config.getServiceClient().Get(context.TODO(), serviceSpec.Name, metav1.GetOptions{}) @@ -977,3 +979,29 @@ func UnblockNetwork(from string, to string) { "required on host %s: remove rule %s, if exists", from, iptablesRule) } } + +// WaitForService waits until the service appears (exist == true), or disappears (exist == false) +func WaitForService(c clientset.Interface, namespace, name string, exist bool, interval, timeout time.Duration) error { + err := wait.PollImmediate(interval, timeout, func() (bool, error) { + _, err := c.CoreV1().Services(namespace).Get(context.TODO(), name, metav1.GetOptions{}) + switch { + case err == nil: + framework.Logf("Service %s in namespace %s found.", name, namespace) + return exist, nil + case apierrors.IsNotFound(err): + framework.Logf("Service %s in namespace %s disappeared.", name, namespace) + return !exist, nil + case !testutils.IsRetryableAPIError(err): + framework.Logf("Non-retryable failure while getting service.") + return false, err + default: + framework.Logf("Get service %s in namespace %s failed: %v", name, namespace, err) + return false, nil + } + }) + if err != nil { + stateMsg := map[bool]string{true: "to appear", false: "to disappear"} + return fmt.Errorf("error waiting for service %s/%s %s: %v", namespace, name, stateMsg[exist], err) + } + return nil +} diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index b763bc46d48..327e4a9f783 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -398,32 +398,6 @@ func CheckTestingNSDeletedExcept(c clientset.Interface, skip string) error { return fmt.Errorf("Waiting for terminating namespaces to be deleted timed out") } -// WaitForService waits until the service appears (exist == true), or disappears (exist == false) -func WaitForService(c clientset.Interface, namespace, name string, exist bool, interval, timeout time.Duration) error { - err := wait.PollImmediate(interval, timeout, func() (bool, error) { - _, err := c.CoreV1().Services(namespace).Get(context.TODO(), name, metav1.GetOptions{}) - switch { - case err == nil: - Logf("Service %s in namespace %s found.", name, namespace) - return exist, nil - case apierrors.IsNotFound(err): - Logf("Service %s in namespace %s disappeared.", name, namespace) - return !exist, nil - case !testutils.IsRetryableAPIError(err): - Logf("Non-retryable failure while getting service.") - return false, err - default: - Logf("Get service %s in namespace %s failed: %v", name, namespace, err) - return false, nil - } - }) - if err != nil { - stateMsg := map[bool]string{true: "to appear", false: "to disappear"} - return fmt.Errorf("error waiting for service %s/%s %s: %v", namespace, name, stateMsg[exist], err) - } - return nil -} - //WaitForServiceEndpointsNum waits until the amount of endpoints that implement service to expectNum. func WaitForServiceEndpointsNum(c clientset.Interface, namespace, serviceName string, expectNum int, interval, timeout time.Duration) error { return wait.Poll(interval, timeout, func() (bool, error) { diff --git a/test/e2e/kubectl/BUILD b/test/e2e/kubectl/BUILD index 567c010c6be..22170f4ef67 100644 --- a/test/e2e/kubectl/BUILD +++ b/test/e2e/kubectl/BUILD @@ -35,6 +35,7 @@ go_library( "//test/e2e/framework/auth:go_default_library", "//test/e2e/framework/endpoints:go_default_library", "//test/e2e/framework/kubectl:go_default_library", + "//test/e2e/framework/network:go_default_library", "//test/e2e/framework/node:go_default_library", "//test/e2e/framework/pod:go_default_library", "//test/e2e/framework/service:go_default_library", diff --git a/test/e2e/kubectl/kubectl.go b/test/e2e/kubectl/kubectl.go index a88f3d3a870..f0e1195a312 100644 --- a/test/e2e/kubectl/kubectl.go +++ b/test/e2e/kubectl/kubectl.go @@ -65,6 +65,7 @@ import ( e2eauth "k8s.io/kubernetes/test/e2e/framework/auth" e2eendpoints "k8s.io/kubernetes/test/e2e/framework/endpoints" e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl" + e2enetwork "k8s.io/kubernetes/test/e2e/framework/network" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eservice "k8s.io/kubernetes/test/e2e/framework/service" @@ -1286,12 +1287,12 @@ metadata: ginkgo.By("exposing RC") framework.RunKubectlOrDie(ns, "expose", "rc", "agnhost-master", "--name=rm2", "--port=1234", fmt.Sprintf("--target-port=%d", agnhostPort), nsFlag) - framework.WaitForService(c, ns, "rm2", true, framework.Poll, framework.ServiceStartTimeout) + e2enetwork.WaitForService(c, ns, "rm2", true, framework.Poll, framework.ServiceStartTimeout) validateService("rm2", 1234, framework.ServiceStartTimeout) ginkgo.By("exposing service") framework.RunKubectlOrDie(ns, "expose", "service", "rm2", "--name=rm3", "--port=2345", fmt.Sprintf("--target-port=%d", agnhostPort), nsFlag) - framework.WaitForService(c, ns, "rm3", true, framework.Poll, framework.ServiceStartTimeout) + e2enetwork.WaitForService(c, ns, "rm3", true, framework.Poll, framework.ServiceStartTimeout) validateService("rm3", 2345, framework.ServiceStartTimeout) }) }) diff --git a/test/e2e/network/example_cluster_dns.go b/test/e2e/network/example_cluster_dns.go index b573b20df18..38859856e99 100644 --- a/test/e2e/network/example_cluster_dns.go +++ b/test/e2e/network/example_cluster_dns.go @@ -34,6 +34,7 @@ import ( clientset "k8s.io/client-go/kubernetes" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/test/e2e/framework" + e2enetwork "k8s.io/kubernetes/test/e2e/framework/network" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eresource "k8s.io/kubernetes/test/e2e/framework/resource" e2eservice "k8s.io/kubernetes/test/e2e/framework/service" @@ -104,7 +105,7 @@ var _ = SIGDescribe("ClusterDns [Feature:Example]", func() { // wait for objects for _, ns := range namespaces { e2eresource.WaitForControlledPodsRunning(c, ns.Name, backendRcName, api.Kind("ReplicationController")) - framework.WaitForService(c, ns.Name, backendSvcName, true, framework.Poll, framework.ServiceStartTimeout) + e2enetwork.WaitForService(c, ns.Name, backendSvcName, true, framework.Poll, framework.ServiceStartTimeout) } // it is not enough that pods are running because they may be set to running, but // the application itself may have not been initialized. Just query the application. diff --git a/test/e2e/ui/BUILD b/test/e2e/ui/BUILD index 4a32387c9ee..3b16c7f239e 100644 --- a/test/e2e/ui/BUILD +++ b/test/e2e/ui/BUILD @@ -14,6 +14,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//test/e2e/framework:go_default_library", + "//test/e2e/framework/network:go_default_library", "//test/e2e/framework/service:go_default_library", "//test/e2e/framework/skipper:go_default_library", "//test/utils:go_default_library", diff --git a/test/e2e/ui/dashboard.go b/test/e2e/ui/dashboard.go index e81c7b68b0f..f4a79b4f9a3 100644 --- a/test/e2e/ui/dashboard.go +++ b/test/e2e/ui/dashboard.go @@ -26,6 +26,7 @@ import ( utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/test/e2e/framework" + e2enetwork "k8s.io/kubernetes/test/e2e/framework/network" e2eservice "k8s.io/kubernetes/test/e2e/framework/service" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" testutils "k8s.io/kubernetes/test/utils" @@ -51,7 +52,7 @@ var _ = SIGDescribe("Kubernetes Dashboard [Feature:Dashboard]", func() { ginkgo.It("should check that the kubernetes-dashboard instance is alive", func() { ginkgo.By("Checking whether the kubernetes-dashboard service exists.") - err := framework.WaitForService(f.ClientSet, uiNamespace, uiServiceName, true, framework.Poll, framework.ServiceStartTimeout) + err := e2enetwork.WaitForService(f.ClientSet, uiNamespace, uiServiceName, true, framework.Poll, framework.ServiceStartTimeout) framework.ExpectNoError(err) ginkgo.By("Checking to make sure the kubernetes-dashboard pods are running")