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