Skip to content

Commit 7cfb08a

Browse files
committed
fixing tests for port range support. fixes docker#1102
Signed-off-by: Yuval Kohavi <yuval.kohavi@gmail.com>
1 parent 2f4ae0b commit 7cfb08a

File tree

1 file changed

+52
-9
lines changed

1 file changed

+52
-9
lines changed

tests/unit/service_test.py

+52-9
Original file line numberDiff line numberDiff line change
@@ -117,33 +117,61 @@ def test_get_volumes_from_service_no_container(self):
117117

118118
def test_split_port_with_host_ip(self):
119119
internal_port, external_port = split_port("127.0.0.1:1000:2000")
120-
self.assertEqual(internal_port, "2000")
121-
self.assertEqual(external_port, ("127.0.0.1", "1000"))
120+
self.assertEqual(internal_port, ["2000"])
121+
self.assertEqual(external_port, [("127.0.0.1", "1000")])
122122

123123
def test_split_port_with_protocol(self):
124124
internal_port, external_port = split_port("127.0.0.1:1000:2000/udp")
125-
self.assertEqual(internal_port, "2000/udp")
126-
self.assertEqual(external_port, ("127.0.0.1", "1000"))
125+
self.assertEqual(internal_port, ["2000/udp"])
126+
self.assertEqual(external_port, [("127.0.0.1", "1000")])
127127

128128
def test_split_port_with_host_ip_no_port(self):
129129
internal_port, external_port = split_port("127.0.0.1::2000")
130-
self.assertEqual(internal_port, "2000")
131-
self.assertEqual(external_port, ("127.0.0.1", None))
130+
self.assertEqual(internal_port, ["2000"])
131+
self.assertEqual(external_port, [("127.0.0.1", None)])
132+
133+
def test_split_port_range_with_host_ip_no_port(self):
134+
internal_port, external_port = split_port("127.0.0.1::2000-2001")
135+
self.assertEqual(internal_port, ["2000", "2001"])
136+
self.assertEqual(external_port, [("127.0.0.1", None), ("127.0.0.1", None)])
132137

133138
def test_split_port_with_host_port(self):
134139
internal_port, external_port = split_port("1000:2000")
135-
self.assertEqual(internal_port, "2000")
136-
self.assertEqual(external_port, "1000")
140+
self.assertEqual(internal_port, ["2000"])
141+
self.assertEqual(external_port, ["1000"])
142+
143+
def test_split_port_range_with_host_port(self):
144+
internal_port, external_port = split_port("1000-1001:2000-2001")
145+
self.assertEqual(internal_port, ["2000", "2001"])
146+
self.assertEqual(external_port, ["1000", "1001"])
137147

138148
def test_split_port_no_host_port(self):
139149
internal_port, external_port = split_port("2000")
140-
self.assertEqual(internal_port, "2000")
150+
self.assertEqual(internal_port, ["2000"])
141151
self.assertEqual(external_port, None)
142152

153+
def test_split_port_range_no_host_port(self):
154+
internal_port, external_port = split_port("2000-2001")
155+
self.assertEqual(internal_port, ["2000", "2001"])
156+
self.assertEqual(external_port, None)
157+
158+
def test_split_port_range_with_protocol(self):
159+
internal_port, external_port = split_port("127.0.0.1:1000-1001:2000-2001/udp")
160+
self.assertEqual(internal_port, ["2000/udp", "2001/udp"])
161+
self.assertEqual(external_port, [("127.0.0.1", "1000"), ("127.0.0.1", "1001")])
162+
143163
def test_split_port_invalid(self):
144164
with self.assertRaises(ConfigError):
145165
split_port("0.0.0.0:1000:2000:tcp")
146166

167+
def test_non_matching_length_port_ranges(self):
168+
with self.assertRaises(ConfigError):
169+
split_port("0.0.0.0:1000-1010:2000-2002/tcp")
170+
171+
def test_port_and_range_invalid(self):
172+
with self.assertRaises(ConfigError):
173+
split_port("0.0.0.0:1000:2000-2002/tcp")
174+
147175
def test_build_port_bindings_with_one_port(self):
148176
port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
149177
self.assertEqual(port_bindings["1000"],[("127.0.0.1","1000")])
@@ -157,6 +185,21 @@ def test_build_port_bindings_with_nonmatching_internal_ports(self):
157185
self.assertEqual(port_bindings["1000"],[("127.0.0.1","1000")])
158186
self.assertEqual(port_bindings["2000"],[("127.0.0.1","2000")])
159187

188+
def test_build_port_bindings_with_port_range(self):
189+
port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001"])
190+
self.assertEqual(port_bindings["1000"],[("127.0.0.1","1000")])
191+
self.assertEqual(port_bindings["1001"],[("127.0.0.1","1001")])
192+
193+
def test_build_port_bindings_with_matching_internal_port_ranges(self):
194+
port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001","127.0.0.1:2000-2001:1000-1001"])
195+
self.assertEqual(port_bindings["1000"],[("127.0.0.1","1000"),("127.0.0.1","2000")])
196+
self.assertEqual(port_bindings["1001"],[("127.0.0.1","1001"),("127.0.0.1","2001")])
197+
198+
def test_build_port_bindings_with_nonmatching_internal_port_ranges(self):
199+
port_bindings = build_port_bindings(["127.0.0.1:1000:1000","127.0.0.1:2000:2000"])
200+
self.assertEqual(port_bindings["1000"],[("127.0.0.1","1000")])
201+
self.assertEqual(port_bindings["2000"],[("127.0.0.1","2000")])
202+
160203
def test_split_domainname_none(self):
161204
service = Service('foo', hostname='name', client=self.mock_client)
162205
self.mock_client.containers.return_value = []

0 commit comments

Comments
 (0)