From 89cd3f9b84d0bdf8152eaac241fd4f4994df40d8 Mon Sep 17 00:00:00 2001 From: ymqytw Date: Fri, 30 Sep 2016 11:03:14 -0700 Subject: [PATCH] add a gke-only e2e test for kubectl in a Pod --- test/e2e/kubectl.go | 28 +++++++++++++++++-- .../kubectl/kubectl-in-pod.json | 26 +++++++++++++++++ test/test_owners.csv | 1 + 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 test/e2e/testing-manifests/kubectl/kubectl-in-pod.json diff --git a/test/e2e/kubectl.go b/test/e2e/kubectl.go index ce04e54d4a6..60dce232d0f 100644 --- a/test/e2e/kubectl.go +++ b/test/e2e/kubectl.go @@ -90,6 +90,7 @@ const ( kubeCtlManifestPath = "test/e2e/testing-manifests/kubectl" redisControllerFilename = "redis-master-controller.json" redisServiceFilename = "redis-master-service.json" + kubectlInPodFilename = "kubectl-in-pod.json" ) var ( @@ -500,9 +501,6 @@ var _ = framework.KubeDescribe("Kubectl client", func() { Expect(logOutput).ToNot(ContainSubstring("stdin closed")) return strings.Contains(logOutput, "abcd1234"), nil }) - if err != nil { - os.Exit(1) - } Expect(err).To(BeNil()) Expect(c.Batch().Jobs(ns).Delete("run-test-3", nil)).To(BeNil()) @@ -526,6 +524,30 @@ var _ = framework.KubeDescribe("Kubectl client", func() { }) }) + framework.KubeDescribe("Kubectl should be able to talk to api server", func() { + It("kubectl running in a pod could talk to api server [Conformance]", func() { + framework.SkipUnlessProviderIs("gke") + nsFlag := fmt.Sprintf("--namespace=%v", ns) + podJson := readTestFileOrDie(kubectlInPodFilename) + By("validating api verions") + framework.RunKubectlOrDieInput(string(podJson), "create", "-f", "-", nsFlag) + err := wait.PollImmediate(time.Second, time.Minute, func() (bool, error) { + output := framework.RunKubectlOrDie("get", "pods/kubectl-in-pod", nsFlag) + if strings.Contains(output, "Running") { + return true, nil + } else { + return false, nil + } + }) + Expect(err).To(BeNil()) + output := framework.RunKubectlOrDie("exec", "kubectl-in-pod", nsFlag, "--", "kubectl", "version") + if !strings.Contains(output, "Server Version") { + framework.Failf("kubectl in the pod fails to talk to api server") + } + framework.RunKubectlOrDie("delete", "pods", "kubectl-in-pod", nsFlag) + }) + }) + framework.KubeDescribe("Kubectl api-versions", func() { It("should check if v1 is in available api versions [Conformance]", func() { By("validating api verions") diff --git a/test/e2e/testing-manifests/kubectl/kubectl-in-pod.json b/test/e2e/testing-manifests/kubectl/kubectl-in-pod.json new file mode 100644 index 00000000000..e4c4d76cd7e --- /dev/null +++ b/test/e2e/testing-manifests/kubectl/kubectl-in-pod.json @@ -0,0 +1,26 @@ +{ + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "kubectl-in-pod" + }, + "spec": { + "containers": [ + { + "name": "busybox", + "image": "busybox", + "stdin": true, + "stdinOnce": true, + "tty": true, + "volumeMounts": [{ + "mountPath": "/usr/bin/kubectl", + "name": "kubectl" + }] + } + ], + "volumes": [{ + "name":"kubectl", + "hostPath":{"path": "/usr/bin/kubectl"} + }] + } +} diff --git a/test/test_owners.csv b/test/test_owners.csv index abaa63625b1..dd89a8c86f8 100644 --- a/test/test_owners.csv +++ b/test/test_owners.csv @@ -202,6 +202,7 @@ Kubectl client Kubectl run deployment should create a deployment from an image,j Kubectl client Kubectl run job should create a job from an image when restart is OnFailure,soltysh,0 Kubectl client Kubectl run pod should create a pod from an image when restart is Never,janetkuo,0 Kubectl client Kubectl run rc should create an rc from an image,janetkuo,0 +Kubectl client Kubectl should be able to talk to api server kubectl running in a pod could talk to api server,ymqytw,0 Kubectl client Kubectl taint should remove all the taints with the same key off a node,erictune,1 Kubectl client Kubectl taint should update the taint on a node,pwittrock,0 Kubectl client Kubectl version should check is all data is printed,janetkuo,0