package remotecontext import ( "io/ioutil" "os" "path/filepath" "testing" "github.com/docker/docker/builder" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/reexec" ) const ( filename = "test" contents = "contents test" ) func init() { reexec.Init() } func TestCloseRootDirectory(t *testing.T) { contextDir, err := ioutil.TempDir("", "builder-tarsum-test") if err != nil { t.Fatalf("Error with creating temporary directory: %s", err) } tarsum := &tarSumContext{root: contextDir} err = tarsum.Close() if err != nil { t.Fatalf("Error while executing Close: %s", err) } _, err = os.Stat(contextDir) if !os.IsNotExist(err) { t.Fatal("Directory should not exist at this point") defer os.RemoveAll(contextDir) } } func TestHashFile(t *testing.T) { contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") defer cleanup() createTestTempFile(t, contextDir, filename, contents, 0755) tarSum := makeTestTarsumContext(t, contextDir) sum, err := tarSum.Hash(filename) if err != nil { t.Fatalf("Error when executing Stat: %s", err) } if len(sum) == 0 { t.Fatalf("Hash returned empty sum") } expected := "1149ab94af7be6cc1da1335e398f24ee1cf4926b720044d229969dfc248ae7ec" if actual := sum; expected != actual { t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) } } func TestHashSubdir(t *testing.T) { contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") defer cleanup() contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir") err := os.Mkdir(contextSubdir, 0755) if err != nil { t.Fatalf("Failed to make directory: %s", contextSubdir) } testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0755) tarSum := makeTestTarsumContext(t, contextDir) relativePath, err := filepath.Rel(contextDir, testFilename) if err != nil { t.Fatalf("Error when getting relative path: %s", err) } sum, err := tarSum.Hash(relativePath) if err != nil { t.Fatalf("Error when executing Stat: %s", err) } if len(sum) == 0 { t.Fatalf("Hash returned empty sum") } expected := "d7f8d6353dee4816f9134f4156bf6a9d470fdadfb5d89213721f7e86744a4e69" if actual := sum; expected != actual { t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) } } func TestStatNotExisting(t *testing.T) { contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") defer cleanup() tarSum := &tarSumContext{root: contextDir} _, err := tarSum.Hash("not-existing") if !os.IsNotExist(err) { t.Fatalf("This file should not exist: %s", err) } } func TestRemoveDirectory(t *testing.T) { contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") defer cleanup() contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir") relativePath, err := filepath.Rel(contextDir, contextSubdir) if err != nil { t.Fatalf("Error when getting relative path: %s", err) } tarSum := &tarSumContext{root: contextDir} err = tarSum.Remove(relativePath) if err != nil { t.Fatalf("Error when executing Remove: %s", err) } _, err = os.Stat(contextSubdir) if !os.IsNotExist(err) { t.Fatal("Directory should not exist at this point") } } func makeTestTarsumContext(t *testing.T, dir string) builder.Source { tarStream, err := archive.Tar(dir, archive.Uncompressed) if err != nil { t.Fatalf("error: %s", err) } defer tarStream.Close() tarSum, err := MakeTarSumContext(tarStream) if err != nil { t.Fatalf("Error when executing MakeTarSumContext: %s", err) } return tarSum }