github.com/xuyutom/docker@v1.6.0/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 }