github.com/goern/docker@v1.9.0-rc1/api/common_test.go (about) 1 package api 2 3 import ( 4 "io/ioutil" 5 "path/filepath" 6 "testing" 7 8 "github.com/docker/docker/api/types" 9 "os" 10 ) 11 12 type ports struct { 13 ports []types.Port 14 expected string 15 } 16 17 // DisplayablePorts 18 func TestDisplayablePorts(t *testing.T) { 19 cases := []ports{ 20 { 21 []types.Port{ 22 { 23 PrivatePort: 9988, 24 Type: "tcp", 25 }, 26 }, 27 "9988/tcp"}, 28 { 29 []types.Port{ 30 { 31 PrivatePort: 9988, 32 Type: "udp", 33 }, 34 }, 35 "9988/udp", 36 }, 37 { 38 []types.Port{ 39 { 40 IP: "0.0.0.0", 41 PrivatePort: 9988, 42 Type: "tcp", 43 }, 44 }, 45 "0.0.0.0:0->9988/tcp", 46 }, 47 { 48 []types.Port{ 49 { 50 PrivatePort: 9988, 51 PublicPort: 8899, 52 Type: "tcp", 53 }, 54 }, 55 "9988/tcp", 56 }, 57 { 58 []types.Port{ 59 { 60 IP: "4.3.2.1", 61 PrivatePort: 9988, 62 PublicPort: 8899, 63 Type: "tcp", 64 }, 65 }, 66 "4.3.2.1:8899->9988/tcp", 67 }, 68 { 69 []types.Port{ 70 { 71 IP: "4.3.2.1", 72 PrivatePort: 9988, 73 PublicPort: 9988, 74 Type: "tcp", 75 }, 76 }, 77 "4.3.2.1:9988->9988/tcp", 78 }, 79 { 80 []types.Port{ 81 { 82 PrivatePort: 9988, 83 Type: "udp", 84 }, { 85 PrivatePort: 9988, 86 Type: "udp", 87 }, 88 }, 89 "9988/udp, 9988/udp", 90 }, 91 { 92 []types.Port{ 93 { 94 IP: "1.2.3.4", 95 PublicPort: 9998, 96 PrivatePort: 9998, 97 Type: "udp", 98 }, { 99 IP: "1.2.3.4", 100 PublicPort: 9999, 101 PrivatePort: 9999, 102 Type: "udp", 103 }, 104 }, 105 "1.2.3.4:9998-9999->9998-9999/udp", 106 }, 107 { 108 []types.Port{ 109 { 110 IP: "1.2.3.4", 111 PublicPort: 8887, 112 PrivatePort: 9998, 113 Type: "udp", 114 }, { 115 IP: "1.2.3.4", 116 PublicPort: 8888, 117 PrivatePort: 9999, 118 Type: "udp", 119 }, 120 }, 121 "1.2.3.4:8887->9998/udp, 1.2.3.4:8888->9999/udp", 122 }, 123 { 124 []types.Port{ 125 { 126 PrivatePort: 9998, 127 Type: "udp", 128 }, { 129 PrivatePort: 9999, 130 Type: "udp", 131 }, 132 }, 133 "9998-9999/udp", 134 }, 135 { 136 []types.Port{ 137 { 138 IP: "1.2.3.4", 139 PrivatePort: 6677, 140 PublicPort: 7766, 141 Type: "tcp", 142 }, { 143 PrivatePort: 9988, 144 PublicPort: 8899, 145 Type: "udp", 146 }, 147 }, 148 "9988/udp, 1.2.3.4:7766->6677/tcp", 149 }, 150 { 151 []types.Port{ 152 { 153 IP: "1.2.3.4", 154 PrivatePort: 9988, 155 PublicPort: 8899, 156 Type: "udp", 157 }, { 158 IP: "1.2.3.4", 159 PrivatePort: 9988, 160 PublicPort: 8899, 161 Type: "tcp", 162 }, { 163 IP: "4.3.2.1", 164 PrivatePort: 2233, 165 PublicPort: 3322, 166 Type: "tcp", 167 }, 168 }, 169 "4.3.2.1:3322->2233/tcp, 1.2.3.4:8899->9988/udp, 1.2.3.4:8899->9988/tcp", 170 }, 171 { 172 []types.Port{ 173 { 174 PrivatePort: 9988, 175 PublicPort: 8899, 176 Type: "udp", 177 }, { 178 IP: "1.2.3.4", 179 PrivatePort: 6677, 180 PublicPort: 7766, 181 Type: "tcp", 182 }, { 183 IP: "4.3.2.1", 184 PrivatePort: 2233, 185 PublicPort: 3322, 186 Type: "tcp", 187 }, 188 }, 189 "9988/udp, 4.3.2.1:3322->2233/tcp, 1.2.3.4:7766->6677/tcp", 190 }, 191 } 192 193 for _, port := range cases { 194 actual := DisplayablePorts(port.ports) 195 if port.expected != actual { 196 t.Fatalf("Expected %s, got %s.", port.expected, actual) 197 } 198 } 199 } 200 201 // MatchesContentType 202 func TestJsonContentType(t *testing.T) { 203 if !MatchesContentType("application/json", "application/json") { 204 t.Fail() 205 } 206 207 if !MatchesContentType("application/json; charset=utf-8", "application/json") { 208 t.Fail() 209 } 210 211 if MatchesContentType("dockerapplication/json", "application/json") { 212 t.Fail() 213 } 214 } 215 216 // LoadOrCreateTrustKey 217 func TestLoadOrCreateTrustKeyInvalidKeyFile(t *testing.T) { 218 tmpKeyFolderPath, err := ioutil.TempDir("", "api-trustkey-test") 219 if err != nil { 220 t.Fatal(err) 221 } 222 defer os.RemoveAll(tmpKeyFolderPath) 223 224 tmpKeyFile, err := ioutil.TempFile(tmpKeyFolderPath, "keyfile") 225 if err != nil { 226 t.Fatal(err) 227 } 228 229 if _, err := LoadOrCreateTrustKey(tmpKeyFile.Name()); err == nil { 230 t.Fatalf("expected an error, got nothing.") 231 } 232 233 } 234 235 func TestLoadOrCreateTrustKeyCreateKey(t *testing.T) { 236 tmpKeyFolderPath, err := ioutil.TempDir("", "api-trustkey-test") 237 if err != nil { 238 t.Fatal(err) 239 } 240 defer os.RemoveAll(tmpKeyFolderPath) 241 242 // Without the need to create the folder hierarchy 243 tmpKeyFile := filepath.Join(tmpKeyFolderPath, "keyfile") 244 245 if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil { 246 t.Fatalf("expected a new key file, got : %v and %v", err, key) 247 } 248 249 if _, err := os.Stat(tmpKeyFile); err != nil { 250 t.Fatalf("Expected to find a file %s, got %v", tmpKeyFile, err) 251 } 252 253 // With the need to create the folder hierarchy as tmpKeyFie is in a path 254 // where some folder do not exists. 255 tmpKeyFile = filepath.Join(tmpKeyFolderPath, "folder/hierarchy/keyfile") 256 257 if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil { 258 t.Fatalf("expected a new key file, got : %v and %v", err, key) 259 } 260 261 if _, err := os.Stat(tmpKeyFile); err != nil { 262 t.Fatalf("Expected to find a file %s, got %v", tmpKeyFile, err) 263 } 264 265 // With no path at all 266 defer os.Remove("keyfile") 267 if key, err := LoadOrCreateTrustKey("keyfile"); err != nil || key == nil { 268 t.Fatalf("expected a new key file, got : %v and %v", err, key) 269 } 270 271 if _, err := os.Stat("keyfile"); err != nil { 272 t.Fatalf("Expected to find a file keyfile, got %v", err) 273 } 274 } 275 276 func TestLoadOrCreateTrustKeyLoadValidKey(t *testing.T) { 277 tmpKeyFile := filepath.Join("fixtures", "keyfile") 278 279 if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil { 280 t.Fatalf("expected a key file, got : %v and %v", err, key) 281 } 282 }