github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/builder/remotecontext/tarsum_test.go (about)

     1  package remotecontext
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/docker/docker/builder"
    10  	"github.com/docker/docker/pkg/archive"
    11  	"github.com/docker/docker/pkg/reexec"
    12  )
    13  
    14  const (
    15  	filename = "test"
    16  	contents = "contents test"
    17  )
    18  
    19  func init() {
    20  	reexec.Init()
    21  }
    22  
    23  func TestCloseRootDirectory(t *testing.T) {
    24  	contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
    25  
    26  	if err != nil {
    27  		t.Fatalf("Error with creating temporary directory: %s", err)
    28  	}
    29  
    30  	tarsum := &tarSumContext{root: contextDir}
    31  
    32  	err = tarsum.Close()
    33  
    34  	if err != nil {
    35  		t.Fatalf("Error while executing Close: %s", err)
    36  	}
    37  
    38  	_, err = os.Stat(contextDir)
    39  
    40  	if !os.IsNotExist(err) {
    41  		t.Fatal("Directory should not exist at this point")
    42  		defer os.RemoveAll(contextDir)
    43  	}
    44  }
    45  
    46  func TestHashFile(t *testing.T) {
    47  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
    48  	defer cleanup()
    49  
    50  	createTestTempFile(t, contextDir, filename, contents, 0755)
    51  
    52  	tarSum := makeTestTarsumContext(t, contextDir)
    53  
    54  	sum, err := tarSum.Hash(filename)
    55  
    56  	if err != nil {
    57  		t.Fatalf("Error when executing Stat: %s", err)
    58  	}
    59  
    60  	if len(sum) == 0 {
    61  		t.Fatalf("Hash returned empty sum")
    62  	}
    63  
    64  	expected := "1149ab94af7be6cc1da1335e398f24ee1cf4926b720044d229969dfc248ae7ec"
    65  
    66  	if actual := sum; expected != actual {
    67  		t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
    68  	}
    69  }
    70  
    71  func TestHashSubdir(t *testing.T) {
    72  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
    73  	defer cleanup()
    74  
    75  	contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir")
    76  	err := os.Mkdir(contextSubdir, 0755)
    77  	if err != nil {
    78  		t.Fatalf("Failed to make directory: %s", contextSubdir)
    79  	}
    80  
    81  	testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0755)
    82  
    83  	tarSum := makeTestTarsumContext(t, contextDir)
    84  
    85  	relativePath, err := filepath.Rel(contextDir, testFilename)
    86  
    87  	if err != nil {
    88  		t.Fatalf("Error when getting relative path: %s", err)
    89  	}
    90  
    91  	sum, err := tarSum.Hash(relativePath)
    92  
    93  	if err != nil {
    94  		t.Fatalf("Error when executing Stat: %s", err)
    95  	}
    96  
    97  	if len(sum) == 0 {
    98  		t.Fatalf("Hash returned empty sum")
    99  	}
   100  
   101  	expected := "d7f8d6353dee4816f9134f4156bf6a9d470fdadfb5d89213721f7e86744a4e69"
   102  
   103  	if actual := sum; expected != actual {
   104  		t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
   105  	}
   106  }
   107  
   108  func TestStatNotExisting(t *testing.T) {
   109  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   110  	defer cleanup()
   111  
   112  	tarSum := &tarSumContext{root: contextDir}
   113  
   114  	_, err := tarSum.Hash("not-existing")
   115  
   116  	if !os.IsNotExist(err) {
   117  		t.Fatalf("This file should not exist: %s", err)
   118  	}
   119  }
   120  
   121  func TestRemoveDirectory(t *testing.T) {
   122  	contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
   123  	defer cleanup()
   124  
   125  	contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
   126  
   127  	relativePath, err := filepath.Rel(contextDir, contextSubdir)
   128  
   129  	if err != nil {
   130  		t.Fatalf("Error when getting relative path: %s", err)
   131  	}
   132  
   133  	tarSum := &tarSumContext{root: contextDir}
   134  
   135  	err = tarSum.Remove(relativePath)
   136  
   137  	if err != nil {
   138  		t.Fatalf("Error when executing Remove: %s", err)
   139  	}
   140  
   141  	_, err = os.Stat(contextSubdir)
   142  
   143  	if !os.IsNotExist(err) {
   144  		t.Fatal("Directory should not exist at this point")
   145  	}
   146  }
   147  
   148  func makeTestTarsumContext(t *testing.T, dir string) builder.Source {
   149  	tarStream, err := archive.Tar(dir, archive.Uncompressed)
   150  	if err != nil {
   151  		t.Fatalf("error: %s", err)
   152  	}
   153  	defer tarStream.Close()
   154  	tarSum, err := MakeTarSumContext(tarStream)
   155  	if err != nil {
   156  		t.Fatalf("Error when executing MakeTarSumContext: %s", err)
   157  	}
   158  	return tarSum
   159  }