Browse code

Builder/tarsum unit tests

Signed-off-by: Tomasz Kopczynski <tomek@kopczynski.net.pl>

Tomasz Kopczynski authored on 2016/03/13 21:41:59
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,351 @@
0
+package builder
1
+
2
+import (
3
+	"bufio"
4
+	"bytes"
5
+	"io/ioutil"
6
+	"os"
7
+	"path/filepath"
8
+	"testing"
9
+
10
+	"github.com/docker/docker/pkg/archive"
11
+	"github.com/docker/docker/pkg/reexec"
12
+)
13
+
14
+const (
15
+	filename = "test"
16
+	contents = "contents test"
17
+)
18
+
19
+func init() {
20
+	reexec.Init()
21
+}
22
+
23
+func TestCloseRootDirectory(t *testing.T) {
24
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
25
+
26
+	if err != nil {
27
+		t.Fatalf("Error with creating temporary directory: %s", err)
28
+	}
29
+
30
+	tarsum := &tarSumContext{root: contextDir}
31
+
32
+	err = tarsum.Close()
33
+
34
+	if err != nil {
35
+		t.Fatalf("Error while executing Close: %s", err)
36
+	}
37
+
38
+	_, err = os.Stat(contextDir)
39
+
40
+	if !os.IsNotExist(err) {
41
+		t.Fatalf("Directory should not exist at this point")
42
+		defer os.RemoveAll(contextDir)
43
+	}
44
+}
45
+
46
+func TestOpenFile(t *testing.T) {
47
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
48
+
49
+	if err != nil {
50
+		t.Fatalf("Error with creating temporary directory: %s", err)
51
+	}
52
+
53
+	defer os.RemoveAll(contextDir)
54
+
55
+	testFilename := filepath.Join(contextDir, filename)
56
+	err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
57
+
58
+	if err != nil {
59
+		t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
60
+	}
61
+
62
+	tarSum := &tarSumContext{root: contextDir}
63
+
64
+	file, err := tarSum.Open(filename)
65
+
66
+	if err != nil {
67
+		t.Fatalf("Error when executing Open: %s", err)
68
+	}
69
+
70
+	defer file.Close()
71
+
72
+	scanner := bufio.NewScanner(file)
73
+	buff := bytes.NewBufferString("")
74
+
75
+	for scanner.Scan() {
76
+		buff.WriteString(scanner.Text())
77
+	}
78
+
79
+	if contents != buff.String() {
80
+		t.Fatalf("Contents are not equal. Expected: %s, got: %s", contents, buff.String())
81
+	}
82
+
83
+}
84
+
85
+func TestOpenNotExisting(t *testing.T) {
86
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
87
+
88
+	if err != nil {
89
+		t.Fatalf("Error with creating temporary directory: %s", err)
90
+	}
91
+
92
+	defer os.RemoveAll(contextDir)
93
+
94
+	tarSum := &tarSumContext{root: contextDir}
95
+
96
+	file, err := tarSum.Open("not-existing")
97
+
98
+	if file != nil {
99
+		t.Fatal("Opened file should be nil")
100
+	}
101
+
102
+	if !os.IsNotExist(err) {
103
+		t.Fatalf("Error when executing Open: %s", err)
104
+	}
105
+}
106
+
107
+func TestStatFile(t *testing.T) {
108
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
109
+
110
+	if err != nil {
111
+		t.Fatalf("Error with creating temporary directory: %s", err)
112
+	}
113
+
114
+	defer os.RemoveAll(contextDir)
115
+
116
+	testFilename := filepath.Join(contextDir, filename)
117
+	err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
118
+
119
+	if err != nil {
120
+		t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
121
+	}
122
+
123
+	tarSum := &tarSumContext{root: contextDir}
124
+
125
+	relPath, fileInfo, err := tarSum.Stat(filename)
126
+
127
+	if err != nil {
128
+		t.Fatalf("Error when executing Stat: %s", err)
129
+	}
130
+
131
+	if relPath != filename {
132
+		t.Fatalf("Relative path should be equal to %s, got %s", filename, relPath)
133
+	}
134
+
135
+	if fileInfo.Path() != testFilename {
136
+		t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
137
+	}
138
+}
139
+
140
+func TestStatSubdir(t *testing.T) {
141
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
142
+
143
+	if err != nil {
144
+		t.Fatalf("Error with creating temporary directory: %s", err)
145
+	}
146
+
147
+	defer os.RemoveAll(contextDir)
148
+
149
+	contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
150
+
151
+	if err != nil {
152
+		t.Fatalf("Error with creating temporary subdirectory: %s", err)
153
+	}
154
+
155
+	testFilename := filepath.Join(contextSubdir, filename)
156
+	err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
157
+
158
+	if err != nil {
159
+		t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
160
+	}
161
+
162
+	tarSum := &tarSumContext{root: contextDir}
163
+
164
+	relativePath, err := filepath.Rel(contextDir, testFilename)
165
+
166
+	if err != nil {
167
+		t.Fatalf("Error when getting relative path: %s", err)
168
+	}
169
+
170
+	relPath, fileInfo, err := tarSum.Stat(relativePath)
171
+
172
+	if err != nil {
173
+		t.Fatalf("Error when executing Stat: %s", err)
174
+	}
175
+
176
+	if relPath != relativePath {
177
+		t.Fatalf("Relative path should be equal to %s, got %s", relativePath, relPath)
178
+	}
179
+
180
+	if fileInfo.Path() != testFilename {
181
+		t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
182
+	}
183
+}
184
+
185
+func TestStatNotExisting(t *testing.T) {
186
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
187
+
188
+	if err != nil {
189
+		t.Fatalf("Error with creating temporary directory: %s", err)
190
+	}
191
+
192
+	defer os.RemoveAll(contextDir)
193
+
194
+	tarSum := &tarSumContext{root: contextDir}
195
+
196
+	relPath, fileInfo, err := tarSum.Stat("not-existing")
197
+
198
+	if relPath != "" {
199
+		t.Fatal("Relative path should be nil")
200
+	}
201
+
202
+	if fileInfo != nil {
203
+		t.Fatalf("File info should be nil")
204
+	}
205
+
206
+	if !os.IsNotExist(err) {
207
+		t.Fatalf("This file should not exist: %s", err)
208
+	}
209
+}
210
+
211
+func TestRemoveDirectory(t *testing.T) {
212
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
213
+
214
+	if err != nil {
215
+		t.Fatalf("Error with creating temporary directory: %s", err)
216
+	}
217
+
218
+	defer os.RemoveAll(contextDir)
219
+
220
+	contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
221
+
222
+	if err != nil {
223
+		t.Fatalf("Error with creating temporary subdirectory: %s", err)
224
+	}
225
+
226
+	relativePath, err := filepath.Rel(contextDir, contextSubdir)
227
+
228
+	if err != nil {
229
+		t.Fatalf("Error when getting relative path: %s", err)
230
+	}
231
+
232
+	tarSum := &tarSumContext{root: contextDir}
233
+
234
+	err = tarSum.Remove(relativePath)
235
+
236
+	if err != nil {
237
+		t.Fatalf("Error when executing Remove: %s", err)
238
+	}
239
+
240
+	_, err = os.Stat(contextSubdir)
241
+
242
+	if !os.IsNotExist(err) {
243
+		t.Fatalf("Directory should not exist at this point")
244
+	}
245
+}
246
+
247
+func TestMakeSumTarContext(t *testing.T) {
248
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
249
+
250
+	if err != nil {
251
+		t.Fatalf("Error with creating temporary directory: %s", err)
252
+	}
253
+
254
+	defer os.RemoveAll(contextDir)
255
+
256
+	testFilename := filepath.Join(contextDir, filename)
257
+	err = ioutil.WriteFile(testFilename, []byte(contents), 0644)
258
+
259
+	if err != nil {
260
+		t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
261
+	}
262
+
263
+	tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
264
+
265
+	if err != nil {
266
+		t.Fatalf("error: %s", err)
267
+	}
268
+
269
+	defer tarStream.Close()
270
+
271
+	tarSum, err := MakeTarSumContext(tarStream)
272
+
273
+	if err != nil {
274
+		t.Fatalf("Error when executing MakeSumContext: %s", err)
275
+	}
276
+
277
+	if tarSum == nil {
278
+		t.Fatalf("Tar sum context should not be nil")
279
+	}
280
+}
281
+
282
+func TestWalkWithoutError(t *testing.T) {
283
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
284
+
285
+	if err != nil {
286
+		t.Fatalf("Error with creating temporary directory: %s", err)
287
+	}
288
+
289
+	defer os.RemoveAll(contextDir)
290
+
291
+	contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
292
+
293
+	if err != nil {
294
+		t.Fatalf("Error with creating temporary subdirectory: %s", err)
295
+	}
296
+
297
+	testFilename := filepath.Join(contextSubdir, filename)
298
+	err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
299
+
300
+	if err != nil {
301
+		t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
302
+	}
303
+
304
+	tarSum := &tarSumContext{root: contextDir}
305
+
306
+	walkFun := func(path string, fi FileInfo, err error) error {
307
+		return nil
308
+	}
309
+
310
+	err = tarSum.Walk(contextSubdir, walkFun)
311
+
312
+	if err != nil {
313
+		t.Fatalf("Error when executing Walk: %s", err)
314
+	}
315
+}
316
+
317
+type WalkError struct {
318
+}
319
+
320
+func (we WalkError) Error() string {
321
+	return "Error when executing Walk"
322
+}
323
+
324
+func TestWalkWithError(t *testing.T) {
325
+	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
326
+
327
+	if err != nil {
328
+		t.Fatalf("Error with creating temporary directory: %s", err)
329
+	}
330
+
331
+	defer os.RemoveAll(contextDir)
332
+
333
+	contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
334
+
335
+	if err != nil {
336
+		t.Fatalf("Error with creating temporary subdirectory: %s", err)
337
+	}
338
+
339
+	tarSum := &tarSumContext{root: contextDir}
340
+
341
+	walkFun := func(path string, fi FileInfo, err error) error {
342
+		return WalkError{}
343
+	}
344
+
345
+	err = tarSum.Walk(contextSubdir, walkFun)
346
+
347
+	if err == nil {
348
+		t.Fatalf("Error should not be nil")
349
+	}
350
+}