123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- createTestTempFile(t, contextDir, filename, contents, 0777)
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- testFilename := createTestTempFile(t, contextDir, filename, contents, 0777)
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
- testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0777)
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- 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, 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.Fatalf("Directory should not exist at this point")
- }
- }
- func TestMakeSumTarContext(t *testing.T) {
- contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- createTestTempFile(t, contextDir, filename, contents, 0777)
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
- createTestTempFile(t, contextSubdir, filename, contents, 0777)
- 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, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
- defer cleanup()
- contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
- 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")
- }
- }
|