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