links_test.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package links // import "github.com/docker/docker/daemon/links"
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "testing"
  7. "github.com/docker/go-connections/nat"
  8. )
  9. // Just to make life easier
  10. func newPortNoError(proto, port string) nat.Port {
  11. p, _ := nat.NewPort(proto, port)
  12. return p
  13. }
  14. func TestLinkNaming(t *testing.T) {
  15. ports := make(nat.PortSet)
  16. ports[newPortNoError("tcp", "6379")] = struct{}{}
  17. link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker-1", nil, ports)
  18. rawEnv := link.ToEnv()
  19. env := make(map[string]string, len(rawEnv))
  20. for _, e := range rawEnv {
  21. parts := strings.Split(e, "=")
  22. if len(parts) != 2 {
  23. t.FailNow()
  24. }
  25. env[parts[0]] = parts[1]
  26. }
  27. value, ok := env["DOCKER_1_PORT"]
  28. if !ok {
  29. t.Fatal("DOCKER_1_PORT not found in env")
  30. }
  31. if value != "tcp://172.0.17.2:6379" {
  32. t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_1_PORT"])
  33. }
  34. }
  35. func TestLinkNew(t *testing.T) {
  36. ports := make(nat.PortSet)
  37. ports[newPortNoError("tcp", "6379")] = struct{}{}
  38. link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", nil, ports)
  39. if link.Name != "/db/docker" {
  40. t.Fail()
  41. }
  42. if link.ParentIP != "172.0.17.3" {
  43. t.Fail()
  44. }
  45. if link.ChildIP != "172.0.17.2" {
  46. t.Fail()
  47. }
  48. for _, p := range link.Ports {
  49. if p != newPortNoError("tcp", "6379") {
  50. t.Fail()
  51. }
  52. }
  53. }
  54. func TestLinkEnv(t *testing.T) {
  55. ports := make(nat.PortSet)
  56. ports[newPortNoError("tcp", "6379")] = struct{}{}
  57. link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
  58. rawEnv := link.ToEnv()
  59. env := make(map[string]string, len(rawEnv))
  60. for _, e := range rawEnv {
  61. parts := strings.Split(e, "=")
  62. if len(parts) != 2 {
  63. t.FailNow()
  64. }
  65. env[parts[0]] = parts[1]
  66. }
  67. if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
  68. t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
  69. }
  70. if env["DOCKER_PORT_6379_TCP"] != "tcp://172.0.17.2:6379" {
  71. t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP"])
  72. }
  73. if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
  74. t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
  75. }
  76. if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
  77. t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
  78. }
  79. if env["DOCKER_PORT_6379_TCP_PORT"] != "6379" {
  80. t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT"])
  81. }
  82. if env["DOCKER_NAME"] != "/db/docker" {
  83. t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
  84. }
  85. if env["DOCKER_ENV_PASSWORD"] != "gordon" {
  86. t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
  87. }
  88. }
  89. func TestLinkMultipleEnv(t *testing.T) {
  90. ports := make(nat.PortSet)
  91. ports[newPortNoError("tcp", "6379")] = struct{}{}
  92. ports[newPortNoError("tcp", "6380")] = struct{}{}
  93. ports[newPortNoError("tcp", "6381")] = struct{}{}
  94. link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
  95. rawEnv := link.ToEnv()
  96. env := make(map[string]string, len(rawEnv))
  97. for _, e := range rawEnv {
  98. parts := strings.Split(e, "=")
  99. if len(parts) != 2 {
  100. t.FailNow()
  101. }
  102. env[parts[0]] = parts[1]
  103. }
  104. if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
  105. t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
  106. }
  107. if env["DOCKER_PORT_6379_TCP_START"] != "tcp://172.0.17.2:6379" {
  108. t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP_START"])
  109. }
  110. if env["DOCKER_PORT_6379_TCP_END"] != "tcp://172.0.17.2:6381" {
  111. t.Fatalf("Expected tcp://172.0.17.2:6381, got %s", env["DOCKER_PORT_6379_TCP_END"])
  112. }
  113. if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
  114. t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
  115. }
  116. if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
  117. t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
  118. }
  119. if env["DOCKER_PORT_6379_TCP_PORT_START"] != "6379" {
  120. t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT_START"])
  121. }
  122. if env["DOCKER_PORT_6379_TCP_PORT_END"] != "6381" {
  123. t.Fatalf("Expected 6381, got %s", env["DOCKER_PORT_6379_TCP_PORT_END"])
  124. }
  125. if env["DOCKER_NAME"] != "/db/docker" {
  126. t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
  127. }
  128. if env["DOCKER_ENV_PASSWORD"] != "gordon" {
  129. t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
  130. }
  131. }
  132. func TestLinkPortRangeEnv(t *testing.T) {
  133. ports := make(nat.PortSet)
  134. ports[newPortNoError("tcp", "6379")] = struct{}{}
  135. ports[newPortNoError("tcp", "6380")] = struct{}{}
  136. ports[newPortNoError("tcp", "6381")] = struct{}{}
  137. link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
  138. rawEnv := link.ToEnv()
  139. env := make(map[string]string, len(rawEnv))
  140. for _, e := range rawEnv {
  141. parts := strings.Split(e, "=")
  142. if len(parts) != 2 {
  143. t.FailNow()
  144. }
  145. env[parts[0]] = parts[1]
  146. }
  147. if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
  148. t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
  149. }
  150. if env["DOCKER_PORT_6379_TCP_START"] != "tcp://172.0.17.2:6379" {
  151. t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP_START"])
  152. }
  153. if env["DOCKER_PORT_6379_TCP_END"] != "tcp://172.0.17.2:6381" {
  154. t.Fatalf("Expected tcp://172.0.17.2:6381, got %s", env["DOCKER_PORT_6379_TCP_END"])
  155. }
  156. if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
  157. t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
  158. }
  159. if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
  160. t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
  161. }
  162. if env["DOCKER_PORT_6379_TCP_PORT_START"] != "6379" {
  163. t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT_START"])
  164. }
  165. if env["DOCKER_PORT_6379_TCP_PORT_END"] != "6381" {
  166. t.Fatalf("Expected 6381, got %s", env["DOCKER_PORT_6379_TCP_PORT_END"])
  167. }
  168. if env["DOCKER_NAME"] != "/db/docker" {
  169. t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
  170. }
  171. if env["DOCKER_ENV_PASSWORD"] != "gordon" {
  172. t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
  173. }
  174. for _, i := range []int{6379, 6380, 6381} {
  175. tcpaddr := fmt.Sprintf("DOCKER_PORT_%d_TCP_ADDR", i)
  176. tcpport := fmt.Sprintf("DOCKER_PORT_%d_TCP_PORT", i)
  177. tcpproto := fmt.Sprintf("DOCKER_PORT_%d_TCP_PROTO", i)
  178. tcp := fmt.Sprintf("DOCKER_PORT_%d_TCP", i)
  179. if env[tcpaddr] != "172.0.17.2" {
  180. t.Fatalf("Expected env %s = 172.0.17.2, got %s", tcpaddr, env[tcpaddr])
  181. }
  182. if env[tcpport] != strconv.Itoa(i) {
  183. t.Fatalf("Expected env %s = %d, got %s", tcpport, i, env[tcpport])
  184. }
  185. if env[tcpproto] != "tcp" {
  186. t.Fatalf("Expected env %s = tcp, got %s", tcpproto, env[tcpproto])
  187. }
  188. if env[tcp] != fmt.Sprintf("tcp://172.0.17.2:%d", i) {
  189. t.Fatalf("Expected env %s = tcp://172.0.17.2:%d, got %s", tcp, i, env[tcp])
  190. }
  191. }
  192. }