github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/builder/remotecontext/tarsum_test.go (about) 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 ) 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.Fatal("Directory should not exist at this point") 42 defer os.RemoveAll(contextDir) 43 } 44 } 45 46 func TestHashFile(t *testing.T) { 47 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 48 defer cleanup() 49 50 createTestTempFile(t, contextDir, filename, contents, 0755) 51 52 tarSum := makeTestTarsumContext(t, contextDir) 53 54 sum, err := tarSum.Hash(filename) 55 56 if err != nil { 57 t.Fatalf("Error when executing Stat: %s", err) 58 } 59 60 if len(sum) == 0 { 61 t.Fatalf("Hash returned empty sum") 62 } 63 64 expected := "1149ab94af7be6cc1da1335e398f24ee1cf4926b720044d229969dfc248ae7ec" 65 66 if actual := sum; expected != actual { 67 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) 68 } 69 } 70 71 func TestHashSubdir(t *testing.T) { 72 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 73 defer cleanup() 74 75 contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir") 76 err := os.Mkdir(contextSubdir, 0755) 77 if err != nil { 78 t.Fatalf("Failed to make directory: %s", contextSubdir) 79 } 80 81 testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0755) 82 83 tarSum := makeTestTarsumContext(t, contextDir) 84 85 relativePath, err := filepath.Rel(contextDir, testFilename) 86 87 if err != nil { 88 t.Fatalf("Error when getting relative path: %s", err) 89 } 90 91 sum, err := tarSum.Hash(relativePath) 92 93 if err != nil { 94 t.Fatalf("Error when executing Stat: %s", err) 95 } 96 97 if len(sum) == 0 { 98 t.Fatalf("Hash returned empty sum") 99 } 100 101 expected := "d7f8d6353dee4816f9134f4156bf6a9d470fdadfb5d89213721f7e86744a4e69" 102 103 if actual := sum; expected != actual { 104 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) 105 } 106 } 107 108 func TestStatNotExisting(t *testing.T) { 109 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 110 defer cleanup() 111 112 tarSum := &tarSumContext{root: contextDir} 113 114 _, err := tarSum.Hash("not-existing") 115 116 if !os.IsNotExist(err) { 117 t.Fatalf("This file should not exist: %s", err) 118 } 119 } 120 121 func TestRemoveDirectory(t *testing.T) { 122 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 123 defer cleanup() 124 125 contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir") 126 127 relativePath, err := filepath.Rel(contextDir, contextSubdir) 128 129 if err != nil { 130 t.Fatalf("Error when getting relative path: %s", err) 131 } 132 133 tarSum := &tarSumContext{root: contextDir} 134 135 err = tarSum.Remove(relativePath) 136 137 if err != nil { 138 t.Fatalf("Error when executing Remove: %s", err) 139 } 140 141 _, err = os.Stat(contextSubdir) 142 143 if !os.IsNotExist(err) { 144 t.Fatal("Directory should not exist at this point") 145 } 146 } 147 148 func makeTestTarsumContext(t *testing.T, dir string) builder.Source { 149 tarStream, err := archive.Tar(dir, archive.Uncompressed) 150 if err != nil { 151 t.Fatalf("error: %s", err) 152 } 153 defer tarStream.Close() 154 tarSum, err := MakeTarSumContext(tarStream) 155 if err != nil { 156 t.Fatalf("Error when executing MakeTarSumContext: %s", err) 157 } 158 return tarSum 159 }