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