github.com/jen20/docker@v1.13.1/builder/tarsum_test.go (about)

     1  package builder
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/docker/docker/pkg/archive"
    12  	"github.com/docker/docker/pkg/reexec"
    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  
    27  	if err != nil {
    28  		t.Fatalf("Error with creating temporary directory: %s", err)
    29  	}
    30  
    31  	tarsum := &tarSumContext{root: contextDir}
    32  
    33  	err = tarsum.Close()
    34  
    35  	if err != nil {
    36  		t.Fatalf("Error while executing Close: %s", err)
    37  	}
    38  
    39  	_, err = os.Stat(contextDir)
    40  
    41  	if !os.IsNotExist(err) {
    42  		t.Fatalf("Directory should not exist at this point")
    43  		defer os.RemoveAll(contextDir)
    44  	}
    45  }
    46  
    47  func TestOpenFile(t *testing.T) {
    48  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
    49  	defer cleanup()
    50  
    51  	createTestTempFile(t, contextDir, filename, contents, 0777)
    52  
    53  	tarSum := &tarSumContext{root: contextDir}
    54  
    55  	file, err := tarSum.Open(filename)
    56  
    57  	if err != nil {
    58  		t.Fatalf("Error when executing Open: %s", err)
    59  	}
    60  
    61  	defer file.Close()
    62  
    63  	scanner := bufio.NewScanner(file)
    64  	buff := bytes.NewBufferString("")
    65  
    66  	for scanner.Scan() {
    67  		buff.WriteString(scanner.Text())
    68  	}
    69  
    70  	if contents != buff.String() {
    71  		t.Fatalf("Contents are not equal. Expected: %s, got: %s", contents, buff.String())
    72  	}
    73  
    74  }
    75  
    76  func TestOpenNotExisting(t *testing.T) {
    77  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
    78  	defer cleanup()
    79  
    80  	tarSum := &tarSumContext{root: contextDir}
    81  
    82  	file, err := tarSum.Open("not-existing")
    83  
    84  	if file != nil {
    85  		t.Fatal("Opened file should be nil")
    86  	}
    87  
    88  	if !os.IsNotExist(err) {
    89  		t.Fatalf("Error when executing Open: %s", err)
    90  	}
    91  }
    92  
    93  func TestStatFile(t *testing.T) {
    94  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
    95  	defer cleanup()
    96  
    97  	testFilename := createTestTempFile(t, contextDir, filename, contents, 0777)
    98  
    99  	tarSum := &tarSumContext{root: contextDir}
   100  
   101  	relPath, fileInfo, err := tarSum.Stat(filename)
   102  
   103  	if err != nil {
   104  		t.Fatalf("Error when executing Stat: %s", err)
   105  	}
   106  
   107  	if relPath != filename {
   108  		t.Fatalf("Relative path should be equal to %s, got %s", filename, relPath)
   109  	}
   110  
   111  	if fileInfo.Path() != testFilename {
   112  		t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
   113  	}
   114  }
   115  
   116  func TestStatSubdir(t *testing.T) {
   117  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   118  	defer cleanup()
   119  
   120  	contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
   121  
   122  	testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0777)
   123  
   124  	tarSum := &tarSumContext{root: contextDir}
   125  
   126  	relativePath, err := filepath.Rel(contextDir, testFilename)
   127  
   128  	if err != nil {
   129  		t.Fatalf("Error when getting relative path: %s", err)
   130  	}
   131  
   132  	relPath, fileInfo, err := tarSum.Stat(relativePath)
   133  
   134  	if err != nil {
   135  		t.Fatalf("Error when executing Stat: %s", err)
   136  	}
   137  
   138  	if relPath != relativePath {
   139  		t.Fatalf("Relative path should be equal to %s, got %s", relativePath, relPath)
   140  	}
   141  
   142  	if fileInfo.Path() != testFilename {
   143  		t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
   144  	}
   145  }
   146  
   147  func TestStatNotExisting(t *testing.T) {
   148  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   149  	defer cleanup()
   150  
   151  	tarSum := &tarSumContext{root: contextDir}
   152  
   153  	relPath, fileInfo, err := tarSum.Stat("not-existing")
   154  
   155  	if relPath != "" {
   156  		t.Fatal("Relative path should be nil")
   157  	}
   158  
   159  	if fileInfo != nil {
   160  		t.Fatalf("File info should be nil")
   161  	}
   162  
   163  	if !os.IsNotExist(err) {
   164  		t.Fatalf("This file should not exist: %s", err)
   165  	}
   166  }
   167  
   168  func TestRemoveDirectory(t *testing.T) {
   169  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   170  	defer cleanup()
   171  
   172  	contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
   173  
   174  	relativePath, err := filepath.Rel(contextDir, contextSubdir)
   175  
   176  	if err != nil {
   177  		t.Fatalf("Error when getting relative path: %s", err)
   178  	}
   179  
   180  	tarSum := &tarSumContext{root: contextDir}
   181  
   182  	err = tarSum.Remove(relativePath)
   183  
   184  	if err != nil {
   185  		t.Fatalf("Error when executing Remove: %s", err)
   186  	}
   187  
   188  	_, err = os.Stat(contextSubdir)
   189  
   190  	if !os.IsNotExist(err) {
   191  		t.Fatalf("Directory should not exist at this point")
   192  	}
   193  }
   194  
   195  func TestMakeTarSumContext(t *testing.T) {
   196  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   197  	defer cleanup()
   198  
   199  	createTestTempFile(t, contextDir, filename, contents, 0777)
   200  
   201  	tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
   202  
   203  	if err != nil {
   204  		t.Fatalf("error: %s", err)
   205  	}
   206  
   207  	defer tarStream.Close()
   208  
   209  	tarSum, err := MakeTarSumContext(tarStream)
   210  
   211  	if err != nil {
   212  		t.Fatalf("Error when executing MakeTarSumContext: %s", err)
   213  	}
   214  
   215  	if tarSum == nil {
   216  		t.Fatalf("Tar sum context should not be nil")
   217  	}
   218  }
   219  
   220  func TestWalkWithoutError(t *testing.T) {
   221  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   222  	defer cleanup()
   223  
   224  	contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
   225  
   226  	createTestTempFile(t, contextSubdir, filename, contents, 0777)
   227  
   228  	tarSum := &tarSumContext{root: contextDir}
   229  
   230  	walkFun := func(path string, fi FileInfo, err error) error {
   231  		return nil
   232  	}
   233  
   234  	err := tarSum.Walk(contextSubdir, walkFun)
   235  
   236  	if err != nil {
   237  		t.Fatalf("Error when executing Walk: %s", err)
   238  	}
   239  }
   240  
   241  type WalkError struct {
   242  }
   243  
   244  func (we WalkError) Error() string {
   245  	return "Error when executing Walk"
   246  }
   247  
   248  func TestWalkWithError(t *testing.T) {
   249  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   250  	defer cleanup()
   251  
   252  	contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
   253  
   254  	tarSum := &tarSumContext{root: contextDir}
   255  
   256  	walkFun := func(path string, fi FileInfo, err error) error {
   257  		return WalkError{}
   258  	}
   259  
   260  	err := tarSum.Walk(contextSubdir, walkFun)
   261  
   262  	if err == nil {
   263  		t.Fatalf("Error should not be nil")
   264  	}
   265  }