github.com/LazyboyChen7/engine@v17.12.1-ce-rc2+incompatible/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 "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().Path()) 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 TestRemoveDirectory(t *testing.T) { 108 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 109 defer cleanup() 110 111 contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir") 112 113 relativePath, err := filepath.Rel(contextDir, contextSubdir) 114 115 if err != nil { 116 t.Fatalf("Error when getting relative path: %s", err) 117 } 118 119 src := makeTestArchiveContext(t, contextDir) 120 121 _, err = src.Root().Stat(src.Root().Join(src.Root().Path(), relativePath)) 122 if err != nil { 123 t.Fatalf("Statting %s shouldn't fail: %+v", relativePath, err) 124 } 125 126 tarSum := src.(modifiableContext) 127 err = tarSum.Remove(relativePath) 128 if err != nil { 129 t.Fatalf("Error when executing Remove: %s", err) 130 } 131 132 _, err = src.Root().Stat(src.Root().Join(src.Root().Path(), relativePath)) 133 if !os.IsNotExist(errors.Cause(err)) { 134 t.Fatalf("Directory should not exist at this point: %+v ", err) 135 } 136 } 137 138 func makeTestArchiveContext(t *testing.T, dir string) builder.Source { 139 tarStream, err := archive.Tar(dir, archive.Uncompressed) 140 if err != nil { 141 t.Fatalf("error: %s", err) 142 } 143 defer tarStream.Close() 144 tarSum, err := FromArchive(tarStream) 145 if err != nil { 146 t.Fatalf("Error when executing FromArchive: %s", err) 147 } 148 return tarSum 149 }