|
@@ -0,0 +1,351 @@
|
|
|
+package builder
|
|
|
+
|
|
|
+import (
|
|
|
+ "bufio"
|
|
|
+ "bytes"
|
|
|
+ "io/ioutil"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "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.Fatalf("Directory should not exist at this point")
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestOpenFile(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, filename)
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ file, err := tarSum.Open(filename)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Open: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer file.Close()
|
|
|
+
|
|
|
+ scanner := bufio.NewScanner(file)
|
|
|
+ buff := bytes.NewBufferString("")
|
|
|
+
|
|
|
+ for scanner.Scan() {
|
|
|
+ buff.WriteString(scanner.Text())
|
|
|
+ }
|
|
|
+
|
|
|
+ if contents != buff.String() {
|
|
|
+ t.Fatalf("Contents are not equal. Expected: %s, got: %s", contents, buff.String())
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func TestOpenNotExisting(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ file, err := tarSum.Open("not-existing")
|
|
|
+
|
|
|
+ if file != nil {
|
|
|
+ t.Fatal("Opened file should be nil")
|
|
|
+ }
|
|
|
+
|
|
|
+ if !os.IsNotExist(err) {
|
|
|
+ t.Fatalf("Error when executing Open: %s", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestStatFile(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, filename)
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ relPath, fileInfo, err := tarSum.Stat(filename)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Stat: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if relPath != filename {
|
|
|
+ t.Fatalf("Relative path should be equal to %s, got %s", filename, relPath)
|
|
|
+ }
|
|
|
+
|
|
|
+ if fileInfo.Path() != testFilename {
|
|
|
+ t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestStatSubdir(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextSubdir, filename)
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ relativePath, err := filepath.Rel(contextDir, testFilename)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when getting relative path: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ relPath, fileInfo, err := tarSum.Stat(relativePath)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Stat: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if relPath != relativePath {
|
|
|
+ t.Fatalf("Relative path should be equal to %s, got %s", relativePath, relPath)
|
|
|
+ }
|
|
|
+
|
|
|
+ if fileInfo.Path() != testFilename {
|
|
|
+ t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestStatNotExisting(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ relPath, fileInfo, err := tarSum.Stat("not-existing")
|
|
|
+
|
|
|
+ if relPath != "" {
|
|
|
+ t.Fatal("Relative path should be nil")
|
|
|
+ }
|
|
|
+
|
|
|
+ if fileInfo != nil {
|
|
|
+ t.Fatalf("File info should be nil")
|
|
|
+ }
|
|
|
+
|
|
|
+ if !os.IsNotExist(err) {
|
|
|
+ t.Fatalf("This file should not exist: %s", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestRemoveDirectory(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ 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.Fatalf("Directory should not exist at this point")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestMakeSumTarContext(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, filename)
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(contents), 0644)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarStream, err := archive.Tar(contextDir, 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 MakeSumContext: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if tarSum == nil {
|
|
|
+ t.Fatalf("Tar sum context should not be nil")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestWalkWithoutError(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextSubdir, filename)
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ walkFun := func(path string, fi FileInfo, err error) error {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ err = tarSum.Walk(contextSubdir, walkFun)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Walk: %s", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+type WalkError struct {
|
|
|
+}
|
|
|
+
|
|
|
+func (we WalkError) Error() string {
|
|
|
+ return "Error when executing Walk"
|
|
|
+}
|
|
|
+
|
|
|
+func TestWalkWithError(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tarSum := &tarSumContext{root: contextDir}
|
|
|
+
|
|
|
+ walkFun := func(path string, fi FileInfo, err error) error {
|
|
|
+ return WalkError{}
|
|
|
+ }
|
|
|
+
|
|
|
+ err = tarSum.Walk(contextSubdir, walkFun)
|
|
|
+
|
|
|
+ if err == nil {
|
|
|
+ t.Fatalf("Error should not be nil")
|
|
|
+ }
|
|
|
+}
|