github.com/endocode/docker@v1.4.2-0.20160113120958-46eb4700391e/opts/hosts_test.go (about) 1 package opts 2 3 import ( 4 "runtime" 5 "testing" 6 ) 7 8 func TestParseHost(t *testing.T) { 9 invalid := map[string]string{ 10 "anything": "Invalid bind address format: anything", 11 "something with spaces": "Invalid bind address format: something with spaces", 12 "://": "Invalid bind address format: ://", 13 "unknown://": "Invalid bind address format: unknown://", 14 "tcp://:port": "Invalid bind address format: :port", 15 "tcp://invalid": "Invalid bind address format: invalid", 16 "tcp://invalid:port": "Invalid bind address format: invalid:port", 17 } 18 const defaultHTTPHost = "tcp://127.0.0.1:2375" 19 var defaultHOST = "unix:///var/run/docker.sock" 20 21 if runtime.GOOS == "windows" { 22 defaultHOST = defaultHTTPHost 23 } 24 valid := map[string]string{ 25 "": defaultHOST, 26 "fd://": "fd://", 27 "fd://something": "fd://something", 28 "tcp://host:": "tcp://host:2375", 29 "tcp://": "tcp://localhost:2375", 30 "tcp://:2375": "tcp://localhost:2375", // default ip address 31 "tcp://:2376": "tcp://localhost:2376", // default ip address 32 "tcp://0.0.0.0:8080": "tcp://0.0.0.0:8080", 33 "tcp://192.168.0.0:12000": "tcp://192.168.0.0:12000", 34 "tcp://192.168:8080": "tcp://192.168:8080", 35 "tcp://0.0.0.0:1234567890": "tcp://0.0.0.0:1234567890", // yeah it's valid :P 36 "tcp://docker.com:2375": "tcp://docker.com:2375", 37 "unix://": "unix:///var/run/docker.sock", // default unix:// value 38 "unix://path/to/socket": "unix://path/to/socket", 39 } 40 41 for value, errorMessage := range invalid { 42 if _, err := ParseHost(defaultHTTPHost, value); err == nil || err.Error() != errorMessage { 43 t.Fatalf("Expected an error for %v with [%v], got [%v]", value, errorMessage, err) 44 } 45 } 46 for value, expected := range valid { 47 if actual, err := ParseHost(defaultHTTPHost, value); err != nil || actual != expected { 48 t.Fatalf("Expected for %v [%v], got [%v, %v]", value, expected, actual, err) 49 } 50 } 51 } 52 53 func TestParseDockerDaemonHost(t *testing.T) { 54 var ( 55 defaultHTTPHost = "tcp://localhost:2375" 56 defaultHTTPSHost = "tcp://localhost:2376" 57 defaultUnix = "/var/run/docker.sock" 58 defaultHOST = "unix:///var/run/docker.sock" 59 ) 60 if runtime.GOOS == "windows" { 61 defaultHOST = defaultHTTPHost 62 } 63 invalids := map[string]string{ 64 "0.0.0.0": "Invalid bind address format: 0.0.0.0", 65 "tcp:a.b.c.d": "Invalid bind address format: tcp:a.b.c.d", 66 "tcp:a.b.c.d/path": "Invalid bind address format: tcp:a.b.c.d/path", 67 "udp://127.0.0.1": "Invalid bind address format: udp://127.0.0.1", 68 "udp://127.0.0.1:2375": "Invalid bind address format: udp://127.0.0.1:2375", 69 "tcp://unix:///run/docker.sock": "Invalid bind address format: unix", 70 "tcp": "Invalid bind address format: tcp", 71 "unix": "Invalid bind address format: unix", 72 "fd": "Invalid bind address format: fd", 73 } 74 valids := map[string]string{ 75 "0.0.0.1:": "tcp://0.0.0.1:2375", 76 "0.0.0.1:5555": "tcp://0.0.0.1:5555", 77 "0.0.0.1:5555/path": "tcp://0.0.0.1:5555/path", 78 "[::1]:": "tcp://[::1]:2375", 79 "[::1]:5555/path": "tcp://[::1]:5555/path", 80 "[0:0:0:0:0:0:0:1]:": "tcp://[0:0:0:0:0:0:0:1]:2375", 81 "[0:0:0:0:0:0:0:1]:5555/path": "tcp://[0:0:0:0:0:0:0:1]:5555/path", 82 ":6666": "tcp://localhost:6666", 83 ":6666/path": "tcp://localhost:6666/path", 84 "": defaultHOST, 85 " ": defaultHOST, 86 " ": defaultHOST, 87 "tcp://": defaultHTTPHost, 88 "tcp://:7777": "tcp://localhost:7777", 89 "tcp://:7777/path": "tcp://localhost:7777/path", 90 " tcp://:7777/path ": "tcp://localhost:7777/path", 91 "unix:///run/docker.sock": "unix:///run/docker.sock", 92 "unix://": "unix:///var/run/docker.sock", 93 "fd://": "fd://", 94 "fd://something": "fd://something", 95 "localhost:": "tcp://localhost:2375", 96 "localhost:5555": "tcp://localhost:5555", 97 "localhost:5555/path": "tcp://localhost:5555/path", 98 } 99 for invalidAddr, expectedError := range invalids { 100 if addr, err := parseDockerDaemonHost(defaultHTTPHost, defaultHTTPSHost, defaultUnix, "", invalidAddr); err == nil || err.Error() != expectedError { 101 t.Errorf("tcp %v address expected error %v return, got %s and addr %v", invalidAddr, expectedError, err, addr) 102 } 103 } 104 for validAddr, expectedAddr := range valids { 105 if addr, err := parseDockerDaemonHost(defaultHTTPHost, defaultHTTPSHost, defaultUnix, "", validAddr); err != nil || addr != expectedAddr { 106 t.Errorf("%v -> expected %v, got (%v) addr (%v)", validAddr, expectedAddr, err, addr) 107 } 108 } 109 } 110 111 func TestParseTCP(t *testing.T) { 112 var ( 113 defaultHTTPHost = "tcp://127.0.0.1:2376" 114 ) 115 invalids := map[string]string{ 116 "0.0.0.0": "Invalid bind address format: 0.0.0.0", 117 "tcp:a.b.c.d": "Invalid bind address format: tcp:a.b.c.d", 118 "tcp:a.b.c.d/path": "Invalid bind address format: tcp:a.b.c.d/path", 119 "udp://127.0.0.1": "Invalid proto, expected tcp: udp://127.0.0.1", 120 "udp://127.0.0.1:2375": "Invalid proto, expected tcp: udp://127.0.0.1:2375", 121 } 122 valids := map[string]string{ 123 "": defaultHTTPHost, 124 "tcp://": defaultHTTPHost, 125 "0.0.0.1:": "tcp://0.0.0.1:2376", 126 "0.0.0.1:5555": "tcp://0.0.0.1:5555", 127 "0.0.0.1:5555/path": "tcp://0.0.0.1:5555/path", 128 ":6666": "tcp://127.0.0.1:6666", 129 ":6666/path": "tcp://127.0.0.1:6666/path", 130 "tcp://:7777": "tcp://127.0.0.1:7777", 131 "tcp://:7777/path": "tcp://127.0.0.1:7777/path", 132 "[::1]:": "tcp://[::1]:2376", 133 "[::1]:5555": "tcp://[::1]:5555", 134 "[::1]:5555/path": "tcp://[::1]:5555/path", 135 "[0:0:0:0:0:0:0:1]:": "tcp://[0:0:0:0:0:0:0:1]:2376", 136 "[0:0:0:0:0:0:0:1]:5555": "tcp://[0:0:0:0:0:0:0:1]:5555", 137 "[0:0:0:0:0:0:0:1]:5555/path": "tcp://[0:0:0:0:0:0:0:1]:5555/path", 138 "localhost:": "tcp://localhost:2376", 139 "localhost:5555": "tcp://localhost:5555", 140 "localhost:5555/path": "tcp://localhost:5555/path", 141 } 142 for invalidAddr, expectedError := range invalids { 143 if addr, err := parseTCPAddr(invalidAddr, defaultHTTPHost); err == nil || err.Error() != expectedError { 144 t.Errorf("tcp %v address expected error %v return, got %s and addr %v", invalidAddr, expectedError, err, addr) 145 } 146 } 147 for validAddr, expectedAddr := range valids { 148 if addr, err := parseTCPAddr(validAddr, defaultHTTPHost); err != nil || addr != expectedAddr { 149 t.Errorf("%v -> expected %v, got %v and addr %v", validAddr, expectedAddr, err, addr) 150 } 151 } 152 } 153 154 func TestParseInvalidUnixAddrInvalid(t *testing.T) { 155 if _, err := parseUnixAddr("tcp://127.0.0.1", "unix:///var/run/docker.sock"); err == nil || err.Error() != "Invalid proto, expected unix: tcp://127.0.0.1" { 156 t.Fatalf("Expected an error, got %v", err) 157 } 158 if _, err := parseUnixAddr("unix://tcp://127.0.0.1", "/var/run/docker.sock"); err == nil || err.Error() != "Invalid proto, expected unix: tcp://127.0.0.1" { 159 t.Fatalf("Expected an error, got %v", err) 160 } 161 if v, err := parseUnixAddr("", "/var/run/docker.sock"); err != nil || v != "unix:///var/run/docker.sock" { 162 t.Fatalf("Expected an %v, got %v", v, "unix:///var/run/docker.sock") 163 } 164 }