fix compile error
[platform/upstream/docker-engine.git] / builder / remotecontext / tarsum_test.go
1 package remotecontext
2
3 import (
4         "io/ioutil"
5         "os"
6         "path/filepath"
7         "testing"
8
9         "github.com/docker/docker/builder"
10         "github.com/docker/docker/pkg/archive"
11         "github.com/docker/docker/pkg/reexec"
12         "github.com/pkg/errors"
13 )
14
15 const (
16         filename = "test"
17         contents = "contents test"
18 )
19
20 func init() {
21         reexec.Init()
22 }
23
24 func TestCloseRootDirectory(t *testing.T) {
25         contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
26         defer os.RemoveAll(contextDir)
27         if err != nil {
28                 t.Fatalf("Error with creating temporary directory: %s", err)
29         }
30
31         src := makeTestArchiveContext(t, contextDir)
32         err = src.Close()
33
34         if err != nil {
35                 t.Fatalf("Error while executing Close: %s", err)
36         }
37
38         _, err = os.Stat(src.Root())
39
40         if !os.IsNotExist(err) {
41                 t.Fatal("Directory should not exist at this point")
42         }
43 }
44
45 func TestHashFile(t *testing.T) {
46         contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
47         defer cleanup()
48
49         createTestTempFile(t, contextDir, filename, contents, 0755)
50
51         tarSum := makeTestArchiveContext(t, contextDir)
52
53         sum, err := tarSum.Hash(filename)
54
55         if err != nil {
56                 t.Fatalf("Error when executing Stat: %s", err)
57         }
58
59         if len(sum) == 0 {
60                 t.Fatalf("Hash returned empty sum")
61         }
62
63         expected := "1149ab94af7be6cc1da1335e398f24ee1cf4926b720044d229969dfc248ae7ec"
64
65         if actual := sum; expected != actual {
66                 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
67         }
68 }
69
70 func TestHashSubdir(t *testing.T) {
71         contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
72         defer cleanup()
73
74         contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir")
75         err := os.Mkdir(contextSubdir, 0755)
76         if err != nil {
77                 t.Fatalf("Failed to make directory: %s", contextSubdir)
78         }
79
80         testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0755)
81
82         tarSum := makeTestArchiveContext(t, contextDir)
83
84         relativePath, err := filepath.Rel(contextDir, testFilename)
85
86         if err != nil {
87                 t.Fatalf("Error when getting relative path: %s", err)
88         }
89
90         sum, err := tarSum.Hash(relativePath)
91
92         if err != nil {
93                 t.Fatalf("Error when executing Stat: %s", err)
94         }
95
96         if len(sum) == 0 {
97                 t.Fatalf("Hash returned empty sum")
98         }
99
100         expected := "d7f8d6353dee4816f9134f4156bf6a9d470fdadfb5d89213721f7e86744a4e69"
101
102         if actual := sum; expected != actual {
103                 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
104         }
105 }
106
107 func TestStatNotExisting(t *testing.T) {
108         contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
109         defer cleanup()
110
111         src := makeTestArchiveContext(t, contextDir)
112         _, err := src.Hash("not-existing")
113         if !os.IsNotExist(errors.Cause(err)) {
114                 t.Fatalf("This file should not exist: %s", err)
115         }
116 }
117
118 func TestRemoveDirectory(t *testing.T) {
119         contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
120         defer cleanup()
121
122         contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
123
124         relativePath, err := filepath.Rel(contextDir, contextSubdir)
125
126         if err != nil {
127                 t.Fatalf("Error when getting relative path: %s", err)
128         }
129
130         src := makeTestArchiveContext(t, contextDir)
131
132         tarSum := src.(modifiableContext)
133
134         err = tarSum.Remove(relativePath)
135         if err != nil {
136                 t.Fatalf("Error when executing Remove: %s", err)
137         }
138
139         _, err = src.Hash(contextSubdir)
140
141         if !os.IsNotExist(errors.Cause(err)) {
142                 t.Fatal("Directory should not exist at this point")
143         }
144 }
145
146 func makeTestArchiveContext(t *testing.T, dir string) builder.Source {
147         tarStream, err := archive.Tar(dir, archive.Uncompressed)
148         if err != nil {
149                 t.Fatalf("error: %s", err)
150         }
151         defer tarStream.Close()
152         tarSum, err := FromArchive(tarStream)
153         if err != nil {
154                 t.Fatalf("Error when executing FromArchive: %s", err)
155         }
156         return tarSum
157 }