From b6bb1c921b2c9d056c9d0e136925ddcd182ba56f Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Mon, 2 Apr 2018 23:14:17 -0700 Subject: [PATCH] Adding a test for kubemci remove-clusters --- test/e2e/framework/ingress_utils.go | 8 ++++---- test/e2e/framework/util.go | 10 +++++----- test/e2e/network/ingress.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/test/e2e/framework/ingress_utils.go b/test/e2e/framework/ingress_utils.go index e431f2e4b7e..b675154821c 100644 --- a/test/e2e/framework/ingress_utils.go +++ b/test/e2e/framework/ingress_utils.go @@ -1170,7 +1170,7 @@ func (j *IngressTestJig) runCreate(ing *extensions.Ingress) (*extensions.Ingress if err := manifest.IngressToManifest(ing, filePath); err != nil { return nil, err } - _, err := runKubemciWithKubeconfig("create", ing.Name, fmt.Sprintf("--ingress=%s", filePath)) + _, err := RunKubemciWithKubeconfig("create", ing.Name, fmt.Sprintf("--ingress=%s", filePath)) return ing, err } @@ -1185,7 +1185,7 @@ func (j *IngressTestJig) runUpdate(ing *extensions.Ingress) (*extensions.Ingress if err := manifest.IngressToManifest(ing, filePath); err != nil { return nil, err } - _, err := runKubemciWithKubeconfig("create", ing.Name, fmt.Sprintf("--ingress=%s", filePath), "--force") + _, err := RunKubemciWithKubeconfig("create", ing.Name, fmt.Sprintf("--ingress=%s", filePath), "--force") return ing, err } @@ -1273,7 +1273,7 @@ func (j *IngressTestJig) runDelete(ing *extensions.Ingress) error { if err := manifest.IngressToManifest(ing, filePath); err != nil { return err } - _, err := runKubemciWithKubeconfig("delete", ing.Name, fmt.Sprintf("--ingress=%s", filePath)) + _, err := RunKubemciWithKubeconfig("delete", ing.Name, fmt.Sprintf("--ingress=%s", filePath)) return err } @@ -1281,7 +1281,7 @@ func (j *IngressTestJig) runDelete(ing *extensions.Ingress) error { // TODO(nikhiljindal): Update this to be able to return hostname as well. func getIngressAddressFromKubemci(name string) ([]string, error) { var addresses []string - out, err := runKubemciCmd("get-status", name) + out, err := RunKubemciCmd("get-status", name) if err != nil { return addresses, err } diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 791e83d0787..1b886ed2201 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -2251,17 +2251,17 @@ func RunKubectlOrDieInput(data string, args ...string) string { return NewKubectlCommand(args...).WithStdinData(data).ExecOrDie() } -// runKubemciWithKubeconfig is a convenience wrapper over runKubemciCmd -func runKubemciWithKubeconfig(args ...string) (string, error) { +// RunKubemciWithKubeconfig is a convenience wrapper over RunKubemciCmd +func RunKubemciWithKubeconfig(args ...string) (string, error) { if TestContext.KubeConfig != "" { args = append(args, "--"+clientcmd.RecommendedConfigPathFlag+"="+TestContext.KubeConfig) } - return runKubemciCmd(args...) + return RunKubemciCmd(args...) } -// runKubemciCmd is a convenience wrapper over kubectlBuilder to run kubemci. +// RunKubemciCmd is a convenience wrapper over kubectlBuilder to run kubemci. // It assumes that kubemci exists in PATH. -func runKubemciCmd(args ...string) (string, error) { +func RunKubemciCmd(args ...string) (string, error) { // kubemci is assumed to be in PATH. kubemci := "kubemci" b := new(kubectlBuilder) diff --git a/test/e2e/network/ingress.go b/test/e2e/network/ingress.go index d93837ec2ae..544440fc09e 100644 --- a/test/e2e/network/ingress.go +++ b/test/e2e/network/ingress.go @@ -630,6 +630,23 @@ var _ = SIGDescribe("Loadbalancing: L7", func() { executeStaticIPHttpsOnlyTest(f, jig, ipName, ipAddress) }) + It("should remove clusters as expected", func() { + ingAnnotations := map[string]string{ + framework.IngressStaticIPKey: ipName, + } + ingFilePath := filepath.Join(framework.IngressManifestPath, "http") + jig.CreateIngress(ingFilePath, ns, ingAnnotations, map[string]string{}) + jig.WaitForIngress(false /*waitForNodePort*/) + name := jig.Ingress.Name + // Verify that the ingress is spread to 1 cluster as expected. + verifyKubemciStatusHas(name, "is spread across 1 cluster") + // Reuse the ingress file created while creating the ingress. + filePath := filepath.Join(framework.TestContext.OutputDir, "mci.yaml") + if _, err := framework.RunKubemciWithKubeconfig("remove-clusters", name, "--ingress="+filePath); err != nil { + framework.Failf("unexpected error in running kubemci remove-clusters: %s", err) + } + verifyKubemciStatusHas(name, "is spread across 0 cluster") + }) }) // Time: borderline 5m, slow by design @@ -684,6 +701,17 @@ var _ = SIGDescribe("Loadbalancing: L7", func() { }) }) +// verifyKubemciStatusHas fails if kubemci get-status output for the given mci does not have the given expectedSubStr. +func verifyKubemciStatusHas(name, expectedSubStr string) { + statusStr, err := framework.RunKubemciCmd("get-status", name) + if err != nil { + framework.Failf("unexpected error in running kubemci get-status %s: %s", name, err) + } + if !strings.Contains(statusStr, expectedSubStr) { + framework.Failf("expected status to have sub string %s, actual status: %s", expectedSubStr, statusStr) + } +} + func executePresharedCertTest(f *framework.Framework, jig *framework.IngressTestJig, staticIPName string) { preSharedCertName := "test-pre-shared-cert" By(fmt.Sprintf("Creating ssl certificate %q on GCE", preSharedCertName))