@@ -22,6 +22,7 @@ import (
22
22
"os"
23
23
"os/exec"
24
24
"path"
25
+ "path/filepath"
25
26
"strings"
26
27
"testing"
27
28
"time"
@@ -124,12 +125,15 @@ func TestBuildInCluster(t *testing.T) {
124
125
}
125
126
126
127
testutil .Run (t , "" , func (t * testutil.T ) {
127
- //this workaround is to ensure there is no overlap between testcases on kokoro
128
- //see https://github.com/GoogleContainerTools/skaffold/issues/2781#issuecomment-527770537
129
- tmpDir := t .NewTempDir ()
130
- testCaseDir := "testdata/skaffold-in-cluster"
131
- workDir := path .Join (tmpDir .Root (), "testdata/skaffold-in-cluster" )
132
- t .CopyDir (testCaseDir , workDir )
128
+ ns , k8sClient , cleanupNs := SetupNamespace (t .T )
129
+ defer cleanupNs ()
130
+
131
+ // this workaround is to ensure there is no overlap between testcases on kokoro
132
+ // see https://github.com/GoogleContainerTools/skaffold/issues/2781#issuecomment-527770537
133
+ project , err := filepath .Abs ("testdata/skaffold-in-cluster" )
134
+ if err != nil {
135
+ t .Fatalf ("failed getting path to project: %s" , err )
136
+ }
133
137
134
138
// copy the skaffold binary to the test case folder
135
139
// this is geared towards the in-docker setup: the fresh built binary is here
@@ -138,49 +142,83 @@ func TestBuildInCluster(t *testing.T) {
138
142
if err != nil {
139
143
t .Fatalf ("failed to find skaffold binary: %s" , err )
140
144
}
141
- skaffoldDst := path .Join (workDir , "skaffold" )
142
- t .CopyFile (skaffoldSrc , skaffoldDst )
143
145
144
- ns , k8sClient , cleanupNs := SetupNamespace (t .T )
145
- defer cleanupNs ()
146
+ t .NewTempDir ().Chdir ()
147
+ copyDir (t , project , "." )
148
+ copyFile (t , skaffoldSrc , "skaffold" )
146
149
147
150
// TODO: until https://github.com/GoogleContainerTools/skaffold/issues/2757 is resolved, this is the simplest
148
151
// way to override the build.cluster.namespace
149
- revert := replaceNamespace (path .Join (workDir , "skaffold.yaml" ), t , ns )
150
- defer revert ()
151
- revert = replaceNamespace (path .Join (workDir , "build-step/kustomization.yaml" ), t , ns )
152
- defer revert ()
152
+ replaceNamespace (t , "skaffold.yaml" , ns )
153
+ replaceNamespace (t , "build-step/kustomization.yaml" , ns )
153
154
154
- //we have to copy the e2esecret from default ns -> temporary namespace for kaniko
155
+ // we have to copy the e2esecret from default ns -> temporary namespace for kaniko
155
156
secret , err := k8sClient .client .CoreV1 ().Secrets ("default" ).Get ("e2esecret" , metav1.GetOptions {})
156
157
if err != nil {
157
- t .Fatalf ("failed reading default/e2escret : %s" , err )
158
+ t .Fatalf ("failed reading default/e2esecret : %s" , err )
158
159
}
159
160
secret .Namespace = ns .Name
160
161
secret .ResourceVersion = ""
161
- _ , err = k8sClient .Secrets ().Create (secret )
162
- if err != nil {
163
- t .Fatalf ("failed creating %s/e2escret: %s" , ns .Name , err )
162
+ if _ , err = k8sClient .Secrets ().Create (secret ); err != nil {
163
+ t .Fatalf ("failed creating %s/e2esecret: %s" , ns .Name , err )
164
164
}
165
165
166
- logs := skaffold .Run ("-p" , "create-build-step" , "--cache-artifacts=true" ). InDir ( workDir ).InNs (ns .Name ).RunOrFailOutput (t .T )
166
+ logs := skaffold .Run ("-p" , "create-build-step" ).InNs (ns .Name ).RunOrFailOutput (t .T )
167
167
t .Logf ("create-build-step logs: \n %s" , logs )
168
168
169
169
k8sClient .WaitForPodsInPhase (corev1 .PodSucceeded , "skaffold-in-cluster" )
170
170
})
171
171
}
172
172
173
- func replaceNamespace (fileName string , t * testutil.T , ns * corev1.Namespace ) func ( ) {
173
+ func replaceNamespace (t * testutil.T , fileName string , ns * corev1.Namespace ) {
174
174
origSkaffoldYaml , err := ioutil .ReadFile (fileName )
175
175
if err != nil {
176
176
t .Fatalf ("failed reading %s: %s" , fileName , err )
177
177
}
178
+
178
179
namespacedYaml := strings .ReplaceAll (string (origSkaffoldYaml ), "VAR_CLUSTER_NAMESPACE" , ns .Name )
180
+
179
181
if err := ioutil .WriteFile (fileName , []byte (namespacedYaml ), 0666 ); err != nil {
180
182
t .Fatalf ("failed to write %s: %s" , fileName , err )
181
183
}
182
- return func () {
183
- ioutil .WriteFile (fileName , origSkaffoldYaml , 0666 )
184
+ }
185
+
186
+ func copyFile (t * testutil.T , src , dst string ) {
187
+ content , err := ioutil .ReadFile (src )
188
+ if err != nil {
189
+ t .Fatalf ("can't read source file: %s: %s" , src , err )
190
+ }
191
+
192
+ err = ioutil .WriteFile (dst , content , 0666 )
193
+ if err != nil {
194
+ t .Fatalf ("failed to copy file %s to %s: %s" , src , dst , err )
195
+ }
196
+ }
197
+
198
+ func copyDir (t * testutil.T , src string , dst string ) {
199
+ srcInfo , err := os .Stat (src )
200
+ if err != nil {
201
+ t .Fatalf ("failed to copy dir %s->%s: %s " , src , dst , err )
202
+ }
203
+
204
+ if err = os .MkdirAll (dst , srcInfo .Mode ()); err != nil {
205
+ t .Fatalf ("failed to copy dir %s->%s: %s " , src , dst , err )
206
+ }
207
+
208
+ files , err := ioutil .ReadDir (src )
209
+ if err != nil {
210
+ t .Fatalf ("failed to copy dir %s->%s: %s " , src , dst , err )
211
+ }
212
+
213
+ for _ , f := range files {
214
+ srcfp := path .Join (src , f .Name ())
215
+ dstfp := path .Join (dst , f .Name ())
216
+
217
+ if f .IsDir () {
218
+ copyDir (t , srcfp , dstfp )
219
+ } else {
220
+ copyFile (t , srcfp , dstfp )
221
+ }
184
222
}
185
223
}
186
224
0 commit comments