Skip to content

Commit c73387b

Browse files
Merge pull request openshift#28996 from ingvagabund/extend-dc-e2es-to-deployments
WRKLDS-1431: e2e: extend DC testing to Deployments
2 parents 2552b30 + 94bda31 commit c73387b

File tree

15 files changed

+1140
-8
lines changed

15 files changed

+1140
-8
lines changed

test/extended/cli/debug.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var _ = g.Describe("[sig-cli] oc debug", func() {
2525
oc := exutil.NewCLIWithPodSecurityLevel("oc-debug", admissionapi.LevelBaseline)
2626
testCLIDebug := exutil.FixturePath("testdata", "test-cli-debug.yaml")
2727
testDeploymentConfig := exutil.FixturePath("testdata", "test-deployment-config.yaml")
28+
testDeployment := exutil.FixturePath("testdata", "test-deployment.yaml")
2829
testReplicationController := exutil.FixturePath("testdata", "test-replication-controller.yaml")
2930
helloPod := exutil.FixturePath("..", "..", "examples", "hello-openshift", "hello-pod.json")
3031
imageStreamsCentos := exutil.FixturePath("..", "..", "examples", "image-streams", "image-streams-centos7.json")
@@ -112,6 +113,51 @@ var _ = g.Describe("[sig-cli] oc debug", func() {
112113
o.Expect(out).To(o.ContainSubstring(`on node "invalid"`))
113114
})
114115

116+
g.It("dissect deployment debug", func() {
117+
err := oc.Run("create").Args("-f", testDeployment).Execute()
118+
o.Expect(err).NotTo(o.HaveOccurred())
119+
120+
var out string
121+
out, err = oc.Run("debug").Args("deployment/test-deployment", "-oyaml").Output()
122+
o.Expect(err).NotTo(o.HaveOccurred())
123+
o.Expect(out).To(o.ContainSubstring("- /bin/sh"))
124+
125+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--keep-annotations", "-oyaml").Output()
126+
o.Expect(err).NotTo(o.HaveOccurred())
127+
o.Expect(out).To(o.ContainSubstring("annotations:"))
128+
129+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--as-root", "-oyaml").Output()
130+
o.Expect(err).NotTo(o.HaveOccurred())
131+
o.Expect(out).To(o.ContainSubstring("runAsUser: 0"))
132+
133+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--as-root=false", "-oyaml").Output()
134+
o.Expect(err).NotTo(o.HaveOccurred())
135+
o.Expect(out).To(o.ContainSubstring("runAsNonRoot: true"))
136+
137+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--as-user=1", "-oyaml").Output()
138+
o.Expect(err).NotTo(o.HaveOccurred())
139+
o.Expect(out).To(o.ContainSubstring("runAsUser: 1"))
140+
141+
out, err = oc.Run("debug").Args("deployment/test-deployment", "-t", "-oyaml").Output()
142+
o.Expect(err).NotTo(o.HaveOccurred())
143+
o.Expect(out).To(o.ContainSubstring("stdinOnce"))
144+
o.Expect(out).To(o.ContainSubstring("tty"))
145+
146+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--tty=false", "-oyaml").Output()
147+
o.Expect(err).NotTo(o.HaveOccurred())
148+
o.Expect(out).NotTo(o.ContainSubstring("tty"))
149+
150+
out, err = oc.Run("debug").Args("deployment/test-deployment", "-oyaml", "--", "/bin/env").Output()
151+
o.Expect(err).NotTo(o.HaveOccurred())
152+
o.Expect(out).To(o.ContainSubstring("- /bin/env"))
153+
o.Expect(out).NotTo(o.ContainSubstring("stdin"))
154+
o.Expect(out).NotTo(o.ContainSubstring("tty"))
155+
156+
out, err = oc.Run("debug").Args("deployment/test-deployment", "--node-name=invalid", "--", "/bin/env").Output()
157+
o.Expect(err).To(o.HaveOccurred())
158+
o.Expect(out).To(o.ContainSubstring(`on node "invalid"`))
159+
})
160+
115161
g.It("does not require a real resource on the server", func() {
116162
out, err := oc.Run("debug").Args("-T", "-f", helloPod, "-oyaml").Output()
117163
o.Expect(err).NotTo(o.HaveOccurred())

test/extended/cli/env.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var _ = g.Describe("[sig-cli] oc env", func() {
1111
defer g.GinkgoRecover()
1212

1313
var (
14+
fileDeployment = exutil.FixturePath("testdata", "test-deployment.yaml")
1415
file = exutil.FixturePath("testdata", "test-deployment-config.yaml")
1516
buildConfigFile = exutil.FixturePath("testdata", "test-buildcli.json")
1617
oc = exutil.NewCLI("oc-env")
@@ -89,4 +90,78 @@ var _ = g.Describe("[sig-cli] oc env", func() {
8990
o.Expect(err).NotTo(o.HaveOccurred())
9091
o.Expect(out).To(o.ContainSubstring("updated"))
9192
})
93+
94+
g.It("can set environment variables for deployment [apigroup:image.openshift.io][apigroup:build.openshift.io]", func() {
95+
g.By("creating a test-deployment deployment")
96+
err := oc.Run("create").Args("-f", fileDeployment).Execute()
97+
o.Expect(err).NotTo(o.HaveOccurred())
98+
defer oc.Run("delete").Args("-f", fileDeployment).Execute()
99+
100+
g.By("create a test-buildcli buildconfig")
101+
err = oc.Run("create").Args("-f", buildConfigFile).Execute()
102+
o.Expect(err).NotTo(o.HaveOccurred())
103+
defer oc.Run("delete").Args("-f", buildConfigFile).Execute()
104+
105+
g.By("setting environment variables for deployment")
106+
deploymentName := "deployment/test-deployment"
107+
108+
out, err := oc.Run("set").Args("env", deploymentName, "FOO=1st").Output()
109+
o.Expect(err).NotTo(o.HaveOccurred())
110+
o.Expect(out).To(o.ContainSubstring("updated"))
111+
112+
out, err = oc.Run("set").Args("env", deploymentName, "FOO=2nd").Output()
113+
o.Expect(err).NotTo(o.HaveOccurred())
114+
o.Expect(out).To(o.ContainSubstring("updated"))
115+
116+
out, err = oc.Run("set").Args("env", deploymentName, "FOO=bar", "--overwrite").Output()
117+
o.Expect(err).NotTo(o.HaveOccurred())
118+
o.Expect(out).To(o.ContainSubstring("updated"))
119+
120+
out, err = oc.Run("set").Args("env", deploymentName, "FOO=zee", "--overwrite=false").Output()
121+
o.Expect(err).To(o.HaveOccurred())
122+
o.Expect(out).To(o.ContainSubstring("already has a value"))
123+
124+
out, err = oc.Run("set").Args("env", deploymentName, "--list").Output()
125+
o.Expect(err).NotTo(o.HaveOccurred())
126+
o.Expect(out).To(o.ContainSubstring("FOO=bar"))
127+
128+
out, err = oc.Run("set").Args("env", deploymentName, "FOO-").Output()
129+
o.Expect(err).NotTo(o.HaveOccurred())
130+
o.Expect(out).To(o.ContainSubstring("updated"))
131+
132+
err = oc.Run("create").Args("secret", "generic", "mysecret", "--from-literal=foo.bar=secret").Execute()
133+
o.Expect(err).NotTo(o.HaveOccurred())
134+
135+
out, err = oc.Run("set").Args("env", "--from=secret/mysecret", "--prefix=PREFIX_", deploymentName, "FOO-").Output()
136+
o.Expect(err).NotTo(o.HaveOccurred())
137+
o.Expect(out).To(o.ContainSubstring("updated"))
138+
139+
out, err = oc.Run("set").Args("env", deploymentName, "--list").Output()
140+
o.Expect(err).NotTo(o.HaveOccurred())
141+
o.Expect(out).To(o.ContainSubstring("PREFIX_FOO_BAR from secret mysecret, key foo.bar"))
142+
143+
out, err = oc.Run("set").Args("env", deploymentName, "--list", "--resolve").Output()
144+
o.Expect(err).NotTo(o.HaveOccurred())
145+
o.Expect(out).To(o.ContainSubstring("PREFIX_FOO_BAR=secret"))
146+
147+
err = oc.Run("delete").Args("secret", "mysecret").Execute()
148+
o.Expect(err).NotTo(o.HaveOccurred())
149+
150+
out, err = oc.Run("set").Args("env", deploymentName, "--list", "--resolve").Output()
151+
o.Expect(err).To(o.HaveOccurred())
152+
o.Expect(out).To(o.ContainSubstring("error retrieving reference for PREFIX_FOO_BAR"))
153+
154+
g.By("setting environment variables for buildconfigs")
155+
out, err = oc.Run("set").Args("env", "bc", "--all", "FOO=bar").Output()
156+
o.Expect(err).NotTo(o.HaveOccurred())
157+
o.Expect(out).To(o.ContainSubstring("updated"))
158+
159+
out, err = oc.Run("set").Args("env", "bc", "--all", "--list").Output()
160+
o.Expect(err).NotTo(o.HaveOccurred())
161+
o.Expect(out).To(o.ContainSubstring("FOO=bar"))
162+
163+
out, err = oc.Run("set").Args("env", "bc", "--all", "FOO-").Output()
164+
o.Expect(err).NotTo(o.HaveOccurred())
165+
o.Expect(out).To(o.ContainSubstring("updated"))
166+
})
92167
})

test/extended/cli/idle.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1313
"k8s.io/apimachinery/pkg/util/wait"
14+
"k8s.io/klog/v2"
1415
admissionapi "k8s.io/pod-security-admission/api"
1516

1617
exutil "github.com/openshift/origin/test/extended/util"
@@ -155,3 +156,131 @@ var _ = g.Describe("[sig-cli] oc idle [apigroup:apps.openshift.io][apigroup:rout
155156
o.Expect(out).To(o.Equal(scaledReplicaCount))
156157
})
157158
})
159+
160+
var _ = g.Describe("[sig-cli] oc idle Deployments [apigroup:route.openshift.io][apigroup:project.openshift.io][apigroup:image.openshift.io]", func() {
161+
defer g.GinkgoRecover()
162+
163+
var (
164+
oc = exutil.NewCLIWithPodSecurityLevel("oc-idle", admissionapi.LevelBaseline)
165+
cmdTestData = exutil.FixturePath("testdata", "cmd", "test", "cmd", "testdata")
166+
idleSVCRoute = filepath.Join(cmdTestData, "idling-svc-route.yaml")
167+
idleDeployment = filepath.Join(cmdTestData, "idling-deployment.yaml")
168+
idledTemplate = fmt.Sprintf("--template={{index .metadata.annotations \"%s\"}}", idledAnnotation)
169+
)
170+
171+
var deploymentName, expectedOutput string
172+
g.JustBeforeEach(func() {
173+
projectName, err := oc.Run("project").Args("-q").Output()
174+
o.Expect(err).NotTo(o.HaveOccurred())
175+
176+
g.By("create required service and routers")
177+
err = oc.Run("create").Args("-f", idleSVCRoute).Execute()
178+
o.Expect(err).NotTo(o.HaveOccurred())
179+
180+
g.By("create deployment and get deployment name")
181+
_, err = oc.Run("create").Args("-f", idleDeployment).Output()
182+
o.Expect(err).NotTo(o.HaveOccurred())
183+
184+
dcList, err := oc.AdminKubeClient().AppsV1().Deployments(projectName).List(context.TODO(), metav1.ListOptions{LabelSelector: "app=idling-echo,deployment=idling-echo"})
185+
o.Expect(dcList.Items).Should(o.HaveLen(1))
186+
deploymentName = dcList.Items[0].Name
187+
188+
expectedOutput = fmt.Sprintf("The service will unidle Deployment \"%s/%s\" to %s replicas once it receives traffic", projectName, deploymentName, scaledReplicaCount)
189+
190+
err = oc.Run("describe").Args("deployments", deploymentName).Execute()
191+
o.Expect(err).NotTo(o.HaveOccurred())
192+
193+
g.By("wait until idling-echo endpoint is ready")
194+
err = wait.PollImmediate(time.Second, 60*time.Second, func() (done bool, err error) {
195+
err = oc.Run("describe").Args("endpoints", "idling-echo").Execute()
196+
if err != nil {
197+
return false, nil
198+
}
199+
200+
return true, nil
201+
})
202+
o.Expect(err).NotTo(o.HaveOccurred())
203+
204+
g.By("wait until replicaset is ready")
205+
var rsName string
206+
err = wait.PollImmediate(time.Second, 60*time.Second, func() (done bool, err error) {
207+
rsList, err := oc.AdminKubeClient().AppsV1().ReplicaSets(projectName).List(context.TODO(), metav1.ListOptions{LabelSelector: "app=idling-echo,deployment=idling-echo"})
208+
o.Expect(err).NotTo(o.HaveOccurred())
209+
if len(rsList.Items) != 1 {
210+
klog.Infof("Expected only a single replicaset, got %d instead", len(rsList.Items))
211+
return false, nil
212+
}
213+
rsName = rsList.Items[0].Name
214+
err = oc.Run("get").Args("replicaset", rsName).Execute()
215+
if err != nil {
216+
return false, nil
217+
}
218+
219+
return true, nil
220+
})
221+
o.Expect(err).NotTo(o.HaveOccurred())
222+
223+
g.By(fmt.Sprintf("scale deployment to %s replicas", scaledReplicaCount))
224+
err = oc.Run("scale").Args("replicaset", rsName, fmt.Sprintf("--replicas=%s", scaledReplicaCount)).Execute()
225+
o.Expect(err).NotTo(o.HaveOccurred())
226+
227+
g.By(fmt.Sprintf("wait until pod is scaled to %s", scaledReplicaCount))
228+
err = wait.PollImmediate(time.Second, 60*time.Second, func() (done bool, err error) {
229+
out, err := oc.Run("get").Args("pods", "-l", "app=idling-echo", "--template={{ len .items }}", "--output=go-template").Output()
230+
if err != nil {
231+
return false, err
232+
}
233+
234+
if out != scaledReplicaCount {
235+
return false, nil
236+
}
237+
238+
return true, nil
239+
})
240+
o.Expect(err).NotTo(o.HaveOccurred())
241+
242+
g.By(fmt.Sprintf("wait until endpoint addresses are scaled to %s", scaledReplicaCount))
243+
err = wait.PollImmediate(time.Second, 60*time.Second, func() (done bool, err error) {
244+
out, err := oc.Run("get").Args("endpoints", "idling-echo", "--template={{ len (index .subsets 0).addresses }}", "--output=go-template").Output()
245+
if err != nil || out != scaledReplicaCount {
246+
return false, nil
247+
}
248+
249+
return true, nil
250+
})
251+
o.Expect(err).NotTo(o.HaveOccurred())
252+
})
253+
254+
g.It("by name", func() {
255+
err := oc.Run("idle").Args(fmt.Sprintf("deployment/%s", deploymentName)).Execute()
256+
o.Expect(err).To(o.HaveOccurred())
257+
258+
out, err := oc.Run("idle").Args("idling-echo").Output()
259+
o.Expect(err).NotTo(o.HaveOccurred())
260+
o.Expect(out).To(o.ContainSubstring(expectedOutput))
261+
262+
out, err = oc.Run("get").Args("service", "idling-echo", idledTemplate, "--output=go-template").Output()
263+
o.Expect(err).NotTo(o.HaveOccurred())
264+
o.Expect(out).NotTo(o.BeEmpty())
265+
})
266+
267+
g.It("by label", func() {
268+
out, err := oc.Run("idle").Args("-l", "app=idling-echo").Output()
269+
o.Expect(err).NotTo(o.HaveOccurred())
270+
o.Expect(out).To(o.ContainSubstring(expectedOutput))
271+
272+
out, err = oc.Run("get").Args("service", "idling-echo", idledTemplate, "--output=go-template").Output()
273+
o.Expect(err).NotTo(o.HaveOccurred())
274+
o.Expect(out).NotTo(o.BeEmpty())
275+
})
276+
277+
g.It("by all", func() {
278+
out, err := oc.Run("idle").Args("--all").Output()
279+
o.Expect(err).NotTo(o.HaveOccurred())
280+
o.Expect(out).To(o.ContainSubstring(expectedOutput))
281+
282+
out, err = oc.Run("get").Args("service", "idling-echo", idledTemplate, "--output=go-template").Output()
283+
o.Expect(err).NotTo(o.HaveOccurred())
284+
o.Expect(out).NotTo(o.BeEmpty())
285+
})
286+
})

test/extended/cli/run.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,13 @@ var _ = g.Describe("[sig-cli] oc run", func() {
2222
o.Expect(err).To(o.HaveOccurred())
2323
o.Expect(err.Error()).To(o.ContainSubstring("error: Invalid image name \"\\\"InvalidImageValue0192\\\"\": invalid reference format"))
2424
})
25+
26+
g.It("can use --image flag correctly for deployment", func() {
27+
_, err := oc.Run("create").Args("deployment", "newdcforimage", "--image=validimagevalue").Output()
28+
o.Expect(err).NotTo(o.HaveOccurred())
29+
30+
_, err = oc.Run("run").Args("newdcforimage2", "--image=\"InvalidImageValue0192\"").Output()
31+
o.Expect(err).To(o.HaveOccurred())
32+
o.Expect(err.Error()).To(o.ContainSubstring("error: Invalid image name \"\\\"InvalidImageValue0192\\\"\": invalid reference format"))
33+
})
2534
})

0 commit comments

Comments
 (0)