github.com/lmars/docker@v1.6.0-rc2/utils/utils_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  func TestReplaceAndAppendEnvVars(t *testing.T) {
    11  	var (
    12  		d = []string{"HOME=/"}
    13  		o = []string{"HOME=/root", "TERM=xterm"}
    14  	)
    15  
    16  	env := ReplaceOrAppendEnvValues(d, o)
    17  	if len(env) != 2 {
    18  		t.Fatalf("expected len of 2 got %d", len(env))
    19  	}
    20  	if env[0] != "HOME=/root" {
    21  		t.Fatalf("expected HOME=/root got '%s'", env[0])
    22  	}
    23  	if env[1] != "TERM=xterm" {
    24  		t.Fatalf("expected TERM=xterm got '%s'", env[1])
    25  	}
    26  }
    27  
    28  // Reading a symlink to a directory must return the directory
    29  func TestReadSymlinkedDirectoryExistingDirectory(t *testing.T) {
    30  	var err error
    31  	if err = os.Mkdir("/tmp/testReadSymlinkToExistingDirectory", 0777); err != nil {
    32  		t.Errorf("failed to create directory: %s", err)
    33  	}
    34  
    35  	if err = os.Symlink("/tmp/testReadSymlinkToExistingDirectory", "/tmp/dirLinkTest"); err != nil {
    36  		t.Errorf("failed to create symlink: %s", err)
    37  	}
    38  
    39  	var path string
    40  	if path, err = ReadSymlinkedDirectory("/tmp/dirLinkTest"); err != nil {
    41  		t.Fatalf("failed to read symlink to directory: %s", err)
    42  	}
    43  
    44  	if path != "/tmp/testReadSymlinkToExistingDirectory" {
    45  		t.Fatalf("symlink returned unexpected directory: %s", path)
    46  	}
    47  
    48  	if err = os.Remove("/tmp/testReadSymlinkToExistingDirectory"); err != nil {
    49  		t.Errorf("failed to remove temporary directory: %s", err)
    50  	}
    51  
    52  	if err = os.Remove("/tmp/dirLinkTest"); err != nil {
    53  		t.Errorf("failed to remove symlink: %s", err)
    54  	}
    55  }
    56  
    57  // Reading a non-existing symlink must fail
    58  func TestReadSymlinkedDirectoryNonExistingSymlink(t *testing.T) {
    59  	var path string
    60  	var err error
    61  	if path, err = ReadSymlinkedDirectory("/tmp/test/foo/Non/ExistingPath"); err == nil {
    62  		t.Fatalf("error expected for non-existing symlink")
    63  	}
    64  
    65  	if path != "" {
    66  		t.Fatalf("expected empty path, but '%s' was returned", path)
    67  	}
    68  }
    69  
    70  // Reading a symlink to a file must fail
    71  func TestReadSymlinkedDirectoryToFile(t *testing.T) {
    72  	var err error
    73  	var file *os.File
    74  
    75  	if file, err = os.Create("/tmp/testReadSymlinkToFile"); err != nil {
    76  		t.Fatalf("failed to create file: %s", err)
    77  	}
    78  
    79  	file.Close()
    80  
    81  	if err = os.Symlink("/tmp/testReadSymlinkToFile", "/tmp/fileLinkTest"); err != nil {
    82  		t.Errorf("failed to create symlink: %s", err)
    83  	}
    84  
    85  	var path string
    86  	if path, err = ReadSymlinkedDirectory("/tmp/fileLinkTest"); err == nil {
    87  		t.Fatalf("ReadSymlinkedDirectory on a symlink to a file should've failed")
    88  	}
    89  
    90  	if path != "" {
    91  		t.Fatalf("path should've been empty: %s", path)
    92  	}
    93  
    94  	if err = os.Remove("/tmp/testReadSymlinkToFile"); err != nil {
    95  		t.Errorf("failed to remove file: %s", err)
    96  	}
    97  
    98  	if err = os.Remove("/tmp/fileLinkTest"); err != nil {
    99  		t.Errorf("failed to remove symlink: %s", err)
   100  	}
   101  }
   102  
   103  func TestWriteCounter(t *testing.T) {
   104  	dummy1 := "This is a dummy string."
   105  	dummy2 := "This is another dummy string."
   106  	totalLength := int64(len(dummy1) + len(dummy2))
   107  
   108  	reader1 := strings.NewReader(dummy1)
   109  	reader2 := strings.NewReader(dummy2)
   110  
   111  	var buffer bytes.Buffer
   112  	wc := NewWriteCounter(&buffer)
   113  
   114  	reader1.WriteTo(wc)
   115  	reader2.WriteTo(wc)
   116  
   117  	if wc.Count != totalLength {
   118  		t.Errorf("Wrong count: %d vs. %d", wc.Count, totalLength)
   119  	}
   120  
   121  	if buffer.String() != dummy1+dummy2 {
   122  		t.Error("Wrong message written")
   123  	}
   124  }
   125  
   126  func TestImageReference(t *testing.T) {
   127  	tests := []struct {
   128  		repo     string
   129  		ref      string
   130  		expected string
   131  	}{
   132  		{"repo", "tag", "repo:tag"},
   133  		{"repo", "sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64", "repo@sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64"},
   134  	}
   135  
   136  	for i, test := range tests {
   137  		actual := ImageReference(test.repo, test.ref)
   138  		if test.expected != actual {
   139  			t.Errorf("%d: expected %q, got %q", i, test.expected, actual)
   140  		}
   141  	}
   142  }
   143  
   144  func TestDigestReference(t *testing.T) {
   145  	input := "sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64"
   146  	if !DigestReference(input) {
   147  		t.Errorf("Expected DigestReference=true for input %q", input)
   148  	}
   149  
   150  	input = "latest"
   151  	if DigestReference(input) {
   152  		t.Errorf("Unexpected DigestReference=true for input %q", input)
   153  	}
   154  }