@@ -117,33 +117,61 @@ def test_get_volumes_from_service_no_container(self):
117
117
118
118
def test_split_port_with_host_ip (self ):
119
119
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" )] )
122
122
123
123
def test_split_port_with_protocol (self ):
124
124
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" )] )
127
127
128
128
def test_split_port_with_host_ip_no_port (self ):
129
129
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 )])
132
137
133
138
def test_split_port_with_host_port (self ):
134
139
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" ])
137
147
138
148
def test_split_port_no_host_port (self ):
139
149
internal_port , external_port = split_port ("2000" )
140
- self .assertEqual (internal_port , "2000" )
150
+ self .assertEqual (internal_port , [ "2000" ] )
141
151
self .assertEqual (external_port , None )
142
152
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
+
143
163
def test_split_port_invalid (self ):
144
164
with self .assertRaises (ConfigError ):
145
165
split_port ("0.0.0.0:1000:2000:tcp" )
146
166
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
+
147
175
def test_build_port_bindings_with_one_port (self ):
148
176
port_bindings = build_port_bindings (["127.0.0.1:1000:1000" ])
149
177
self .assertEqual (port_bindings ["1000" ],[("127.0.0.1" ,"1000" )])
@@ -157,6 +185,21 @@ def test_build_port_bindings_with_nonmatching_internal_ports(self):
157
185
self .assertEqual (port_bindings ["1000" ],[("127.0.0.1" ,"1000" )])
158
186
self .assertEqual (port_bindings ["2000" ],[("127.0.0.1" ,"2000" )])
159
187
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
+
160
203
def test_split_domainname_none (self ):
161
204
service = Service ('foo' , hostname = 'name' , client = self .mock_client )
162
205
self .mock_client .containers .return_value = []
0 commit comments