Browse code

Changing secrets.go to avoid unreliable docker build output capture. Also changing test cases so that BuildConfig resources are local to the tree and do not need to be current in origin/master HEAD.

jupierce authored on 2016/06/18 01:26:22
Showing 10 changed files
... ...
@@ -5,7 +5,6 @@ import (
5 5
 
6 6
 	g "github.com/onsi/ginkgo"
7 7
 	o "github.com/onsi/gomega"
8
-
9 8
 	exutil "github.com/openshift/origin/test/extended/util"
10 9
 	kapi "k8s.io/kubernetes/pkg/api"
11 10
 )
... ...
@@ -13,39 +12,38 @@ import (
13 13
 var _ = g.Describe("[builds][Slow] can use build secrets", func() {
14 14
 	defer g.GinkgoRecover()
15 15
 	var (
16
-		buildSecretBaseDir   = exutil.FixturePath("testdata", "build-secrets")
17
-		secretsFixture       = filepath.Join(buildSecretBaseDir, "test-secret.json")
18
-		secondSecretsFixture = filepath.Join(buildSecretBaseDir, "test-secret-2.json")
19
-		isFixture            = filepath.Join(buildSecretBaseDir, "test-is.json")
20
-		dockerBuildFixture   = filepath.Join(buildSecretBaseDir, "test-docker-build.json")
21
-		sourceBuildFixture   = filepath.Join(buildSecretBaseDir, "test-s2i-build.json")
22
-		oc                   = exutil.NewCLI("build-secrets", exutil.KubeConfigPath())
16
+		buildSecretBaseDir    = exutil.FixturePath("testdata", "build-secrets")
17
+		secretsFixture        = filepath.Join(buildSecretBaseDir, "test-secret.json")
18
+		secondSecretsFixture  = filepath.Join(buildSecretBaseDir, "test-secret-2.json")
19
+		isFixture             = filepath.Join(buildSecretBaseDir, "test-is.json")
20
+		dockerBuildFixture    = filepath.Join(buildSecretBaseDir, "test-docker-build.json")
21
+		dockerBuildDockerfile = filepath.Join(buildSecretBaseDir, "Dockerfile")
22
+		sourceBuildFixture    = filepath.Join(buildSecretBaseDir, "test-s2i-build.json")
23
+		sourceBuildBinDir     = filepath.Join(buildSecretBaseDir, "s2i-binary-dir")
24
+		oc                    = exutil.NewCLI("build-secrets", exutil.KubeConfigPath())
23 25
 	)
24 26
 
25 27
 	g.Describe("build with secrets", func() {
26 28
 		oc.SetOutputDir(exutil.TestContext.OutputDir)
27 29
 
28
-		g.It("should print the secrets during the source strategy build", func() {
29
-			g.By("creating the sample secret files")
30
+		g.It("should contain secrets during the source strategy build", func() {
31
+			g.By("creating secret fixtures")
30 32
 			err := oc.Run("create").Args("-f", secretsFixture).Execute()
31 33
 			o.Expect(err).NotTo(o.HaveOccurred())
32 34
 			err = oc.Run("create").Args("-f", secondSecretsFixture).Execute()
33 35
 			o.Expect(err).NotTo(o.HaveOccurred())
34 36
 
35
-			g.By("creating the sample source build config and image stream")
37
+			g.By("creating test image stream")
36 38
 			err = oc.Run("create").Args("-f", isFixture).Execute()
37 39
 			o.Expect(err).NotTo(o.HaveOccurred())
38 40
 
41
+			g.By("creating test build config")
39 42
 			err = oc.Run("create").Args("-f", sourceBuildFixture).Execute()
40 43
 			o.Expect(err).NotTo(o.HaveOccurred())
41 44
 
42
-			g.By("starting the sample source build")
43
-			out, err := oc.Run("start-build").Args("test", "--follow", "--wait").Output()
45
+			g.By("starting the test source build")
46
+			err = oc.Run("start-build").Args("test", "--from-dir", sourceBuildBinDir).Execute()
44 47
 			o.Expect(err).NotTo(o.HaveOccurred())
45
-			o.Expect(out).To(o.ContainSubstring("secret1=secret1"))
46
-			o.Expect(out).To(o.ContainSubstring("secret3=secret3"))
47
-			o.Expect(out).To(o.ContainSubstring("relative-secret1=secret1"))
48
-			o.Expect(out).To(o.ContainSubstring("relative-secret3=secret3"))
49 48
 
50 49
 			g.By("checking the status of the build")
51 50
 			err = exutil.WaitForABuild(oc.REST().Builds(oc.Namespace()), "test-1", exutil.CheckBuildSuccessFn, exutil.CheckBuildFailedFn)
... ...
@@ -58,33 +56,36 @@ var _ = g.Describe("[builds][Slow] can use build secrets", func() {
58 58
 			image, err := exutil.GetDockerImageReference(oc.REST().ImageStreams(oc.Namespace()), "test", "latest")
59 59
 			o.Expect(err).NotTo(o.HaveOccurred())
60 60
 
61
-			g.By("verifying the build secrets are not present in the output image")
61
+			g.By("verifying the build secrets were available during build and not present in the output image")
62 62
 			pod := exutil.GetPodForContainer(kapi.Container{Name: "test", Image: image})
63 63
 			oc.KubeFramework().TestContainerOutput("test-build-secret-source", pod, 0, []string{
64
-				"relative-secret1=empty",
65
-				"secret3=empty",
64
+				"testsecret/secret1=secret1",
65
+				"testsecret/secret2=secret2",
66
+				"testsecret/secret3=secret3",
67
+				"testsecret2/secret1=secret1",
68
+				"testsecret2/secret2=secret2",
69
+				"testsecret2/secret3=secret3",
66 70
 			})
67 71
 		})
68 72
 
69
-		g.It("should print the secrets during the docker strategy build", func() {
70
-			g.By("creating the sample secret files")
73
+		g.It("should contain secrets during the docker strategy build", func() {
74
+			g.By("creating secret fixtures")
71 75
 			err := oc.Run("create").Args("-f", secretsFixture).Execute()
72 76
 			o.Expect(err).NotTo(o.HaveOccurred())
73 77
 			err = oc.Run("create").Args("-f", secondSecretsFixture).Execute()
74 78
 			o.Expect(err).NotTo(o.HaveOccurred())
75 79
 
76
-			g.By("creating the sample source build config and image stream")
80
+			g.By("creating test image stream")
77 81
 			err = oc.Run("create").Args("-f", isFixture).Execute()
78 82
 			o.Expect(err).NotTo(o.HaveOccurred())
79 83
 
84
+			g.By("creating test build config")
80 85
 			err = oc.Run("create").Args("-f", dockerBuildFixture).Execute()
81 86
 			o.Expect(err).NotTo(o.HaveOccurred())
82 87
 
83
-			g.By("starting the sample source build")
84
-			out, err := oc.Run("start-build").Args("test", "--follow", "--wait").Output()
88
+			g.By("starting the test docker build")
89
+			err = oc.Run("start-build").Args("test", "--from-file", dockerBuildDockerfile).Execute()
85 90
 			o.Expect(err).NotTo(o.HaveOccurred())
86
-			o.Expect(out).To(o.ContainSubstring("secret1=secret1"))
87
-			o.Expect(out).To(o.ContainSubstring("relative-secret2=secret2"))
88 91
 
89 92
 			g.By("checking the status of the build")
90 93
 			err = exutil.WaitForABuild(oc.REST().Builds(oc.Namespace()), "test-1", exutil.CheckBuildSuccessFn, exutil.CheckBuildFailedFn)
... ...
@@ -92,6 +93,18 @@ var _ = g.Describe("[builds][Slow] can use build secrets", func() {
92 92
 				exutil.DumpBuildLogs("test", oc)
93 93
 			}
94 94
 			o.Expect(err).NotTo(o.HaveOccurred())
95
+
96
+			g.By("getting the image name")
97
+			image, err := exutil.GetDockerImageReference(oc.REST().ImageStreams(oc.Namespace()), "test", "latest")
98
+			o.Expect(err).NotTo(o.HaveOccurred())
99
+
100
+			g.By("verifying the secrets are present in container output")
101
+			pod := exutil.GetPodForContainer(kapi.Container{Name: "test", Image: image})
102
+			oc.KubeFramework().TestContainerOutput("test-build-secret-docker", pod, 0, []string{
103
+				"secret1=secret1",
104
+				"relative-secret2=secret2",
105
+			})
106
+
95 107
 		})
96 108
 
97 109
 	})
... ...
@@ -4,8 +4,10 @@ USER root
4 4
 ADD ./secret-dir /secrets
5 5
 COPY ./secret2 /
6 6
 
7
-RUN test -f /secrets/secret1 && echo -n "secret1=" && cat /secrets/secret1
8
-RUN test -f /secret2 && echo -n "relative-secret2=" && cat /secret2
9
-RUN rm -rf /secrets && rm -rf /secret2
7
+# Create a shell script that will output secrets when the image is run
8
+RUN echo '#!/bin/sh' > /secret_report.sh
9
+RUN echo '(test -f /secrets/secret1 && echo -n "secret1=" && cat /secrets/secret1)' >> /secret_report.sh
10
+RUN echo '(test -f /secret2 && echo -n "relative-secret2=" && cat /secret2)' >> /secret_report.sh
11
+RUN chmod 755 /secret_report.sh
10 12
 
11
-CMD ["true"]
13
+CMD ["/bin/sh", "-c", "/secret_report.sh"]
12 14
new file mode 100755
... ...
@@ -0,0 +1,21 @@
0
+#!/bin/bash
1
+
2
+# Copy secrets into a location they can be output during image run
3
+
4
+mkdir -p "${HOME}/testsecret"
5
+if [[ -f /tmp/secret1 ]]; then
6
+    # Copy three secrets defined in testsecret fixture to directory
7
+    cp /tmp/secret? "${HOME}/testsecret"
8
+else
9
+    echo "Unable to locate testsecret fixture files"
10
+    exit 1
11
+fi
12
+
13
+mkdir -p "${HOME}/testsecret2"
14
+if [[ -f secret1  ]]; then
15
+    # Copy three secrets defined in testsecret2 fixture to directory
16
+    cp secret? "${HOME}/testsecret2"
17
+else
18
+    echo "Unable to locate testsecret2 fixture files"
19
+    exit 2
20
+fi 
0 21
\ No newline at end of file
1 22
new file mode 100755
... ...
@@ -0,0 +1,15 @@
0
+#!/bin/bash
1
+
2
+# Ensure none of the build config inject secrets still exist in the file system
3
+for s in /tmp/secret? secret?; do
4
+    if [[ -s "${s}" ]]; then
5
+        echo "Found secret file which should have been removed: ${s}"
6
+        exit 1
7
+    fi
8
+done
9
+
10
+# Print out the secrets copied into the image during assemble
11
+cd "${HOME}"
12
+for s in testsecret/* testsecret2/*; do
13
+    echo -n "${s}=" && cat "${s}"
14
+done
0 15
\ No newline at end of file
1 16
new file mode 100644
... ...
@@ -0,0 +1,3 @@
0
+source "https://rubygems.org"
1
+
2
+gem "rack"
0 3
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+run Proc.new {|env| [200, {"Content-Type" => "text/html"}, [ENV['TEST_ENV']]]}
0 1
deleted file mode 100755
... ...
@@ -1,9 +0,0 @@
1
-#!/bin/bash
2
-
3
-[[ -f secret1 ]] && echo "relative-secret1=$(cat secret1)"
4
-[[ -f secret2 ]] && echo "relative-secret2=$(cat secret2)"
5
-[[ -f secret3 ]] && echo "relative-secret3=$(cat secret3)"
6
-
7
-[[ -f /tmp/secret1 ]] && echo "secret1=$(cat /tmp/secret1)"
8
-[[ -f /tmp/secret2 ]] && echo "secret2=$(cat /tmp/secret2)"
9
-[[ -f /tmp/secret3 ]] && echo "secret3=$(cat /tmp/secret3)"
10 1
deleted file mode 100755
... ...
@@ -1,4 +0,0 @@
1
-#!/bin/bash
2
-
3
-[[ ! -s secret1 ]] && echo "relative-secret1=empty"
4
-[[ ! -s /tmp/secret3 ]] && echo "secret3=empty"
... ...
@@ -10,12 +10,9 @@
10 10
   "spec":{
11 11
     "triggers":[],
12 12
     "source":{
13
-      "type":"Git",
14
-      "git":{
15
-        "uri":"https://github.com/openshift/origin",
16
-        "ref": "secrets"
13
+      "type":"Binary",
14
+      "binary": {
17 15
       },
18
-      "contextDir":"test/extended/testdata/build-secrets",
19 16
       "secrets": [
20 17
         {
21 18
           "secret": { "name": "testsecret" },
... ...
@@ -1,52 +1,52 @@
1 1
 {
2
-  "kind":"BuildConfig",
3
-  "apiVersion":"v1",
4
-  "metadata":{
5
-    "name":"test",
6
-    "labels":{
7
-      "name":"test"
2
+  "kind": "BuildConfig",
3
+  "apiVersion": "v1",
4
+  "metadata": {
5
+    "name": "test",
6
+    "labels": {
7
+      "name": "test"
8 8
     }
9 9
   },
10
-  "spec":{
11
-    "triggers":[],
12
-    "source":{
13
-      "type":"Git",
14
-      "git":{
15
-        "uri":"https://github.com/openshift/origin",
16
-        "ref": "secrets"
10
+  "spec": {
11
+    "triggers": [],
12
+    "source": {
13
+      "type": "Binary",
14
+      "binary": {
17 15
       },
18
-      "contextDir":"test/extended/testdata/test-build-app",
19 16
       "secrets": [
20 17
         {
21
-          "secret": { "name": "testsecret" },
18
+          "secret": {
19
+            "name": "testsecret"
20
+          },
22 21
           "destinationDir": "/tmp"
23 22
         },
24 23
         {
25
-          "secret": { "name": "testsecret2" }
24
+          "secret": {
25
+            "name": "testsecret2"
26
+          }
26 27
         }
27 28
       ]
28 29
     },
29
-    "strategy":{
30
-      "type":"Source",
30
+    "strategy": {
31
+      "type": "Source",
31 32
       "env": [
32 33
         {
33 34
           "name": "BUILD_LOGLEVEL",
34 35
           "value": "5"
35 36
         }
36 37
       ],
37
-      "sourceStrategy":{
38
-        "from":{
39
-          "kind":"DockerImage",
40
-          "name":"centos/ruby-22-centos7"
41
-        },
42
-        "scripts":"https://raw.githubusercontent.com/openshift/origin/secrets/test/extended/testdata/build-secrets/s2i"
38
+      "sourceStrategy": {
39
+        "from": {
40
+          "kind": "DockerImage",
41
+          "name": "centos/ruby-22-centos7"
42
+        }
43 43
       }
44 44
     },
45
-    "output":{
46
-      "to":{
47
-        "kind":"ImageStreamTag",
48
-        "name":"test:latest"
45
+    "output": {
46
+      "to": {
47
+        "kind": "ImageStreamTag",
48
+        "name": "test:latest"
49 49
       }
50 50
     }
51 51
   }
52
-}
52
+}
53 53
\ No newline at end of file