@@ -18,6 +18,10 @@ package initializer
18
18
19
19
import (
20
20
"bytes"
21
+ "io/ioutil"
22
+ "os"
23
+ "path/filepath"
24
+ "strings"
21
25
"testing"
22
26
23
27
"github.com/GoogleContainerTools/skaffold/testutil"
@@ -59,3 +63,146 @@ func TestPrintAnalyzeJSON(t *testing.T) {
59
63
})
60
64
}
61
65
}
66
+
67
+ func TestWalk (t * testing.T ) {
68
+ emptyFile := []byte ("" )
69
+ tests := []struct {
70
+ name string
71
+ filesWithContents map [string ][]byte
72
+ expectedConfigs []string
73
+ expectedDockerfiles []string
74
+ force bool
75
+ err bool
76
+ }{
77
+ {
78
+ name : "shd return correct k8 configs and dockerfiles" ,
79
+ filesWithContents : map [string ][]byte {
80
+ "config/test.yaml" : emptyFile ,
81
+ "k8pod.yml" : emptyFile ,
82
+ "README" : emptyFile ,
83
+ "deploy/Dockerfile" : emptyFile ,
84
+ "Dockerfile" : emptyFile ,
85
+ },
86
+ force : false ,
87
+ expectedConfigs : []string {
88
+ "config/test.yaml" ,
89
+ "k8pod.yml" ,
90
+ },
91
+ expectedDockerfiles : []string {
92
+ "Dockerfile" ,
93
+ "deploy/Dockerfile" ,
94
+ },
95
+ err : false ,
96
+ },
97
+ {
98
+ name : "shd skip hidden dir" ,
99
+ filesWithContents : map [string ][]byte {
100
+ ".hidden/test.yaml" : emptyFile ,
101
+ "k8pod.yml" : emptyFile ,
102
+ "README" : emptyFile ,
103
+ ".hidden/Dockerfile" : emptyFile ,
104
+ "Dockerfile" : emptyFile ,
105
+ },
106
+ force : false ,
107
+ expectedConfigs : []string {
108
+ "k8pod.yml" ,
109
+ },
110
+ expectedDockerfiles : []string {
111
+ "Dockerfile" ,
112
+ },
113
+ err : false ,
114
+ },
115
+ {
116
+ name : "shd not error when skaffold.config present and force = true" ,
117
+ filesWithContents : map [string ][]byte {
118
+ "skaffold.yaml" : []byte (`apiVersion: skaffold/v1beta6
119
+ kind: Config
120
+ deploy:
121
+ kustomize: {}` ),
122
+ "config/test.yaml" : emptyFile ,
123
+ "k8pod.yml" : emptyFile ,
124
+ "README" : emptyFile ,
125
+ "deploy/Dockerfile" : emptyFile ,
126
+ "Dockerfile" : emptyFile ,
127
+ },
128
+ force : true ,
129
+ expectedConfigs : []string {
130
+ "config/test.yaml" ,
131
+ "k8pod.yml" ,
132
+ },
133
+ expectedDockerfiles : []string {
134
+ "Dockerfile" ,
135
+ "deploy/Dockerfile" ,
136
+ },
137
+ err : false ,
138
+ },
139
+ {
140
+ name : "shd error when skaffold.config present and force = false" ,
141
+ filesWithContents : map [string ][]byte {
142
+ "config/test.yaml" : emptyFile ,
143
+ "k8pod.yml" : emptyFile ,
144
+ "README" : emptyFile ,
145
+ "deploy/Dockerfile" : emptyFile ,
146
+ "Dockerfile" : emptyFile ,
147
+ "skaffold.yaml" : []byte (`apiVersion: skaffold/v1beta6
148
+ kind: Config
149
+ deploy:
150
+ kustomize: {}` ),
151
+ },
152
+ force : false ,
153
+ expectedConfigs : nil ,
154
+ expectedDockerfiles : nil ,
155
+ err : true ,
156
+ },
157
+ }
158
+ for _ , test := range tests {
159
+ t .Run (test .name , func (t * testing.T ) {
160
+ rootDir , err := ioutil .TempDir ("" , "test" )
161
+ if err != nil {
162
+ t .Fatal (err )
163
+ }
164
+ createDirStructure (t , rootDir , test .filesWithContents )
165
+ potentialConfigs , dockerfiles , err := walk (rootDir , test .force , testValidDocker )
166
+ testutil .CheckErrorAndDeepEqual (t , test .err , err ,
167
+ convertToAbsPath (rootDir , test .expectedConfigs ), potentialConfigs )
168
+ testutil .CheckErrorAndDeepEqual (t , test .err , err ,
169
+ convertToAbsPath (rootDir , test .expectedDockerfiles ), dockerfiles )
170
+ os .Remove (rootDir )
171
+ })
172
+ }
173
+ }
174
+
175
+ func testValidDocker (path string ) bool {
176
+ return strings .HasSuffix (path , "Dockerfile" )
177
+ }
178
+
179
+ func createDirStructure (t * testing.T , dir string , filesWithContents map [string ][]byte ) {
180
+ t .Helper ()
181
+ for file , content := range filesWithContents {
182
+ // Create Directory path if it does not exist.
183
+ absPath := filepath .Join (dir , filepath .Dir (file ))
184
+ if _ , err := os .Stat (absPath ); err != nil {
185
+ if err := os .MkdirAll (absPath , os .ModePerm ); err != nil {
186
+ t .Fatal (err )
187
+ }
188
+ }
189
+ // Create filepath with contents
190
+ f , err := os .Create (filepath .Join (dir , file ))
191
+ if err != nil {
192
+ t .Fatal (err )
193
+ }
194
+ f .Write (content )
195
+ f .Close ()
196
+ }
197
+ }
198
+
199
+ func convertToAbsPath (dir string , files []string ) []string {
200
+ if files == nil {
201
+ return files
202
+ }
203
+ absPaths := make ([]string , len (files ))
204
+ for i , file := range files {
205
+ absPaths [i ] = filepath .Join (dir , file )
206
+ }
207
+ return absPaths
208
+ }
0 commit comments