diff --git a/test/e2e/framework/nodes_util.go b/test/e2e/framework/nodes_util.go index b96d683cd12..44e04647026 100644 --- a/test/e2e/framework/nodes_util.go +++ b/test/e2e/framework/nodes_util.go @@ -40,10 +40,10 @@ func EtcdUpgrade(target_storage, target_version string) error { } } -func IngressUpgrade() error { +func IngressUpgrade(isUpgrade bool) error { switch TestContext.Provider { case "gce": - return ingressUpgradeGCE() + return ingressUpgradeGCE(isUpgrade) default: return fmt.Errorf("IngressUpgrade() is not implemented for provider %s", TestContext.Provider) } @@ -73,10 +73,19 @@ func etcdUpgradeGCE(target_storage, target_version string) error { return err } -func ingressUpgradeGCE() error { +func ingressUpgradeGCE(isUpgrade bool) error { // Flip glbc image from latest release image to HEAD to simulate an upgrade. + // Flip from HEAD to latest release image to simulate a downgrade. // Kubelet should restart glbc automatically. - sshResult, err := NodeExec(GetMasterHost(), "sudo sed -i -re 's/(image:)(.*)/\\1 gcr.io\\/e2e-ingress-gce\\/ingress-gce-e2e-glbc-amd64:latest/' /etc/kubernetes/manifests/glbc.manifest") + var command string + if isUpgrade { + // Upgrade + command = "sudo sed -i -re 's/(image:)(.*)/\\1 gcr.io\\/k8s-ingress-image-push\\/ingress-gce-e2e-glbc-amd64:latest/' /etc/kubernetes/manifests/glbc.manifest" + } else { + // Downgrade + command = "sudo sed -i -re 's/(image:)(.*)/\\1 gcr.io\\/google_containers\\/glbc:0.9.7/' /etc/kubernetes/manifests/glbc.manifest" + } + sshResult, err := NodeExec(GetMasterHost(), command) // TODO(rramkumar): Ensure glbc pod is in "Running" state before proceeding. LogSSHResult(sshResult) return err diff --git a/test/e2e/lifecycle/cluster_upgrade.go b/test/e2e/lifecycle/cluster_upgrade.go index 243febacd11..d70a62d67a7 100644 --- a/test/e2e/lifecycle/cluster_upgrade.go +++ b/test/e2e/lifecycle/cluster_upgrade.go @@ -72,7 +72,7 @@ var kubeProxyDowngradeTests = []upgrades.Test{ &upgrades.IngressUpgradeTest{}, } -// Upgrade ingress with custom image. +// Forcefully swap ingress image. var ingressUpgradeTests = []upgrades.Test{ &upgrades.IngressUpgradeTest{}, } @@ -224,7 +224,32 @@ var _ = SIGDescribe("ingress Upgrade [Feature:IngressUpgrade]", func() { upgradeFunc := func() { start := time.Now() defer finalizeUpgradeTest(start, ingressTest) - framework.ExpectNoError(framework.IngressUpgrade()) + framework.ExpectNoError(framework.IngressUpgrade(true)) + } + runUpgradeSuite(f, ingressUpgradeTests, testFrameworks, testSuite, upgCtx, upgrades.IngressUpgrade, upgradeFunc) + }) + }) +}) + +var _ = SIGDescribe("ingress Downgrade [Feature:IngressDowngrade]", func() { + f := framework.NewDefaultFramework("ingress-downgrade") + + // Create the frameworks here because we can only create them + // in a "Describe". + testFrameworks := createUpgradeFrameworks(ingressUpgradeTests) + Describe("ingress downgrade", func() { + It("should maintain a functioning ingress", func() { + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), "") + framework.ExpectNoError(err) + + testSuite := &junit.TestSuite{Name: "ingress downgrade"} + ingressTest := &junit.TestCase{Name: "[sig-networking] ingress-downgrade", Classname: "upgrade_tests"} + testSuite.TestCases = append(testSuite.TestCases, ingressTest) + + upgradeFunc := func() { + start := time.Now() + defer finalizeUpgradeTest(start, ingressTest) + framework.ExpectNoError(framework.IngressUpgrade(false)) } runUpgradeSuite(f, ingressUpgradeTests, testFrameworks, testSuite, upgCtx, upgrades.IngressUpgrade, upgradeFunc) })