Explorar o código

Builder/tarsum unit tests

Signed-off-by: Tomasz Kopczynski <tomek@kopczynski.net.pl>
Tomasz Kopczynski %!s(int64=9) %!d(string=hai) anos
pai
achega
61ca9cc99e
Modificáronse 1 ficheiros con 351 adicións e 0 borrados
  1. 351 0
      builder/tarsum_test.go

+ 351 - 0
builder/tarsum_test.go

@@ -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")
+	}
+}