Skip to content

Commit 5a7d929

Browse files
authored
Merge pull request #2829 from dgageot/simpler-TestBuildInCluster
Simplify TestBuildInCluster
2 parents 47de12f + 2e14d0e commit 5a7d929

File tree

2 files changed

+61
-75
lines changed

2 files changed

+61
-75
lines changed

integration/build_test.go

+61-23
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"os"
2323
"os/exec"
2424
"path"
25+
"path/filepath"
2526
"strings"
2627
"testing"
2728
"time"
@@ -124,12 +125,15 @@ func TestBuildInCluster(t *testing.T) {
124125
}
125126

126127
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+
}
133137

134138
// copy the skaffold binary to the test case folder
135139
// this is geared towards the in-docker setup: the fresh built binary is here
@@ -138,49 +142,83 @@ func TestBuildInCluster(t *testing.T) {
138142
if err != nil {
139143
t.Fatalf("failed to find skaffold binary: %s", err)
140144
}
141-
skaffoldDst := path.Join(workDir, "skaffold")
142-
t.CopyFile(skaffoldSrc, skaffoldDst)
143145

144-
ns, k8sClient, cleanupNs := SetupNamespace(t.T)
145-
defer cleanupNs()
146+
t.NewTempDir().Chdir()
147+
copyDir(t, project, ".")
148+
copyFile(t, skaffoldSrc, "skaffold")
146149

147150
// TODO: until https://github.com/GoogleContainerTools/skaffold/issues/2757 is resolved, this is the simplest
148151
// 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)
153154

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
155156
secret, err := k8sClient.client.CoreV1().Secrets("default").Get("e2esecret", metav1.GetOptions{})
156157
if err != nil {
157-
t.Fatalf("failed reading default/e2escret: %s", err)
158+
t.Fatalf("failed reading default/e2esecret: %s", err)
158159
}
159160
secret.Namespace = ns.Name
160161
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)
164164
}
165165

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)
167167
t.Logf("create-build-step logs: \n%s", logs)
168168

169169
k8sClient.WaitForPodsInPhase(corev1.PodSucceeded, "skaffold-in-cluster")
170170
})
171171
}
172172

173-
func replaceNamespace(fileName string, t *testutil.T, ns *corev1.Namespace) func() {
173+
func replaceNamespace(t *testutil.T, fileName string, ns *corev1.Namespace) {
174174
origSkaffoldYaml, err := ioutil.ReadFile(fileName)
175175
if err != nil {
176176
t.Fatalf("failed reading %s: %s", fileName, err)
177177
}
178+
178179
namespacedYaml := strings.ReplaceAll(string(origSkaffoldYaml), "VAR_CLUSTER_NAMESPACE", ns.Name)
180+
179181
if err := ioutil.WriteFile(fileName, []byte(namespacedYaml), 0666); err != nil {
180182
t.Fatalf("failed to write %s: %s", fileName, err)
181183
}
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+
}
184222
}
185223
}
186224

testutil/util.go

-52
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,8 @@ package testutil
1919
import (
2020
"errors"
2121
"fmt"
22-
"io/ioutil"
2322
"net/http"
2423
"net/http/httptest"
25-
"os"
26-
"path"
2724
"reflect"
2825
"regexp"
2926
"strings"
@@ -57,55 +54,6 @@ func (t *T) Override(dest, tmp interface{}) {
5754
t.teardownActions = append(t.teardownActions, teardown)
5855
}
5956

60-
func (t *T) CopyFile(src, dst string) {
61-
content, err := ioutil.ReadFile(src)
62-
if err != nil {
63-
t.Fatalf("can't read source file: %s: %s", src, err)
64-
}
65-
err = ioutil.WriteFile(dst, content, 0666)
66-
if err != nil {
67-
t.Fatalf("failed to copy file %s to %s: %s", src, dst, err)
68-
}
69-
t.teardownActions = append(t.teardownActions, func() {
70-
if err := os.Remove(dst); err != nil && !os.IsNotExist(err) {
71-
t.Errorf("failed to remove %s: %s", dst, err)
72-
}
73-
})
74-
}
75-
76-
func (t *T) CopyDir(src string, dst string) {
77-
srcInfo, err := os.Stat(src)
78-
if err != nil {
79-
t.Fatalf("failed to copy dir %s->%s: %s ", src, dst, err)
80-
}
81-
82-
if err = os.MkdirAll(dst, srcInfo.Mode()); err != nil {
83-
t.Fatalf("failed to copy dir %s->%s: %s ", src, dst, err)
84-
}
85-
86-
files, err := ioutil.ReadDir(src)
87-
if err != nil {
88-
t.Fatalf("failed to copy dir %s->%s: %s ", src, dst, err)
89-
}
90-
91-
for _, f := range files {
92-
srcfp := path.Join(src, f.Name())
93-
dstfp := path.Join(dst, f.Name())
94-
95-
if f.IsDir() {
96-
t.CopyDir(srcfp, dstfp)
97-
} else {
98-
t.CopyFile(srcfp, dstfp)
99-
}
100-
}
101-
t.teardownActions = append(t.teardownActions, func() {
102-
//by the time this callback is called, all the files should be removed
103-
if err := os.Remove(dst); err != nil && !os.IsNotExist(err) {
104-
t.Errorf("failed to remove dir %s: %s", dst, err)
105-
}
106-
})
107-
}
108-
10957
func (t *T) CheckMatches(pattern, actual string) {
11058
t.T.Helper()
11159
if matches, _ := regexp.MatchString(pattern, actual); !matches {

0 commit comments

Comments
 (0)