diff --git a/test/e2e/kubectl.go b/test/e2e/kubectl.go index d895157e3a1..c74d09be664 100644 --- a/test/e2e/kubectl.go +++ b/test/e2e/kubectl.go @@ -96,6 +96,9 @@ const ( kubeCtlManifestPath = "test/e2e/testing-manifests/kubectl" redisControllerFilename = "redis-master-controller.json" redisServiceFilename = "redis-master-service.json" + nginxDeployment1Filename = "nginx-deployment1.yaml" + nginxDeployment2Filename = "nginx-deployment2.yaml" + nginxDeployment3Filename = "nginx-deployment3.yaml" ) var ( @@ -684,6 +687,49 @@ var _ = framework.KubeDescribe("Kubectl client", func() { framework.Failf("port should keep the same") } }) + + It("apply set/view last-applied", func() { + deployment1Yaml := readTestFileOrDie(nginxDeployment1Filename) + deployment2Yaml := readTestFileOrDie(nginxDeployment2Filename) + deployment3Yaml := readTestFileOrDie(nginxDeployment3Filename) + nsFlag := fmt.Sprintf("--namespace=%v", ns) + + By("deployment replicas number is 2") + framework.RunKubectlOrDieInput(string(deployment1Yaml[:]), "apply", "-f", "-", nsFlag) + + By("check the last-applied matches expectations annotations") + output := framework.RunKubectlOrDieInput(string(deployment1Yaml[:]), "apply", "view-last-applied", "-f", "-", nsFlag, "-o", "json") + requiredString := "\"replicas\": 2" + if !strings.Contains(output, requiredString) { + framework.Failf("Missing %s in kubectl view-last-applied", requiredString) + } + + By("apply file doesn't have replicas") + framework.RunKubectlOrDieInput(string(deployment2Yaml[:]), "apply", "set-last-applied", "-f", "-", nsFlag) + + By("check last-applied has been updated, annotations doesn't replicas") + output = framework.RunKubectlOrDieInput(string(deployment1Yaml[:]), "apply", "view-last-applied", "-f", "-", nsFlag, "-o", "json") + requiredString = "\"replicas\": 2" + if strings.Contains(output, requiredString) { + framework.Failf("Missing %s in kubectl view-last-applied", requiredString) + } + + By("scale set replicas to 3") + nginxDeploy := "nginx-deployment" + framework.RunKubectlOrDie("scale", "deployment", nginxDeploy, "--replicas=3", nsFlag) + + By("apply file doesn't have replicas but image changed") + framework.RunKubectlOrDieInput(string(deployment3Yaml[:]), "apply", "-f", "-", nsFlag) + + By("verify replicas still is 3 and image has been updated") + output = framework.RunKubectlOrDieInput(string(deployment3Yaml[:]), "get", "-f", "-", nsFlag, "-o", "json") + requiredItems := []string{"\"replicas\": 3", "nginx-slim:0.7"} + for _, item := range requiredItems { + if !strings.Contains(output, item) { + framework.Failf("Missing %s in kubectl apply", item) + } + } + }) }) framework.KubeDescribe("Kubectl cluster-info", func() { diff --git a/test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml b/test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml new file mode 100644 index 00000000000..f6edf9d9885 --- /dev/null +++ b/test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml @@ -0,0 +1,16 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: gcr.io/google_containers/nginx-slim:0.8 + ports: + - containerPort: 80 \ No newline at end of file diff --git a/test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml b/test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml new file mode 100644 index 00000000000..ac8efafbdb3 --- /dev/null +++ b/test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml @@ -0,0 +1,15 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: gcr.io/google_containers/nginx-slim:0.8 + ports: + - containerPort: 80 \ No newline at end of file diff --git a/test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml b/test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml new file mode 100644 index 00000000000..28ebbed8dbe --- /dev/null +++ b/test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml @@ -0,0 +1,15 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: gcr.io/google_containers/nginx-slim:0.7 + ports: + - containerPort: 80 \ No newline at end of file