hosts_test.go 6.6 KB

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