|
9 | 9 | create_host_config, Ulimit, LogConfig, parse_bytes
|
10 | 10 | )
|
11 | 11 | from docker.utils.ports import build_port_bindings, split_port
|
12 |
| -from docker.auth import resolve_authconfig |
| 12 | +from docker.auth import resolve_repository_name, resolve_authconfig |
13 | 13 |
|
14 | 14 | import base
|
15 | 15 |
|
@@ -167,6 +167,61 @@ def test_logconfig_invalid_type(self):
|
167 | 167 | type=LogConfig.types.JSON, config='helloworld'
|
168 | 168 | ))
|
169 | 169 |
|
| 170 | + def test_resolve_repository_name(self): |
| 171 | + # docker hub library image |
| 172 | + self.assertEqual( |
| 173 | + resolve_repository_name('image'), |
| 174 | + ('index.docker.io', 'image'), |
| 175 | + ) |
| 176 | + |
| 177 | + # docker hub image |
| 178 | + self.assertEqual( |
| 179 | + resolve_repository_name('username/image'), |
| 180 | + ('index.docker.io', 'username/image'), |
| 181 | + ) |
| 182 | + |
| 183 | + # private registry |
| 184 | + self.assertEqual( |
| 185 | + resolve_repository_name('my.registry.net/image'), |
| 186 | + ('my.registry.net', 'image'), |
| 187 | + ) |
| 188 | + |
| 189 | + # private registry with port |
| 190 | + self.assertEqual( |
| 191 | + resolve_repository_name('my.registry.net:5000/image'), |
| 192 | + ('my.registry.net:5000', 'image'), |
| 193 | + ) |
| 194 | + |
| 195 | + # private registry with username |
| 196 | + self.assertEqual( |
| 197 | + resolve_repository_name('my.registry.net/username/image'), |
| 198 | + ('my.registry.net', 'username/image'), |
| 199 | + ) |
| 200 | + |
| 201 | + # no dots but port |
| 202 | + self.assertEqual( |
| 203 | + resolve_repository_name('hostname:5000/image'), |
| 204 | + ('hostname:5000', 'image'), |
| 205 | + ) |
| 206 | + |
| 207 | + # no dots but port and username |
| 208 | + self.assertEqual( |
| 209 | + resolve_repository_name('hostname:5000/username/image'), |
| 210 | + ('hostname:5000', 'username/image'), |
| 211 | + ) |
| 212 | + |
| 213 | + # localhost |
| 214 | + self.assertEqual( |
| 215 | + resolve_repository_name('localhost/image'), |
| 216 | + ('localhost', 'image'), |
| 217 | + ) |
| 218 | + |
| 219 | + # localhost with username |
| 220 | + self.assertEqual( |
| 221 | + resolve_repository_name('localhost/username/image'), |
| 222 | + ('localhost', 'username/image'), |
| 223 | + ) |
| 224 | + |
170 | 225 | def test_resolve_authconfig(self):
|
171 | 226 | auth_config = {
|
172 | 227 | 'https://index.docker.io/v1/': {'auth': 'indexuser'},
|
@@ -231,6 +286,40 @@ def test_resolve_authconfig(self):
|
231 | 286 | resolve_authconfig(auth_config, 'does.not.exist') is None
|
232 | 287 | )
|
233 | 288 |
|
| 289 | + def test_resolve_registry_and_auth(self): |
| 290 | + auth_config = { |
| 291 | + 'https://index.docker.io/v1/': {'auth': 'indexuser'}, |
| 292 | + 'my.registry.net': {'auth': 'privateuser'}, |
| 293 | + } |
| 294 | + |
| 295 | + # library image |
| 296 | + image = 'image' |
| 297 | + self.assertEqual( |
| 298 | + resolve_authconfig(auth_config, resolve_repository_name(image)[0]), |
| 299 | + {'auth': 'indexuser'}, |
| 300 | + ) |
| 301 | + |
| 302 | + # docker hub image |
| 303 | + image = 'username/image' |
| 304 | + self.assertEqual( |
| 305 | + resolve_authconfig(auth_config, resolve_repository_name(image)[0]), |
| 306 | + {'auth': 'indexuser'}, |
| 307 | + ) |
| 308 | + |
| 309 | + # private registry |
| 310 | + image = 'my.registry.net/image' |
| 311 | + self.assertEqual( |
| 312 | + resolve_authconfig(auth_config, resolve_repository_name(image)[0]), |
| 313 | + {'auth': 'privateuser'}, |
| 314 | + ) |
| 315 | + |
| 316 | + # unauthenticated registry |
| 317 | + image = 'other.registry.net/image' |
| 318 | + self.assertEqual( |
| 319 | + resolve_authconfig(auth_config, resolve_repository_name(image)[0]), |
| 320 | + None, |
| 321 | + ) |
| 322 | + |
234 | 323 | def test_split_port_with_host_ip(self):
|
235 | 324 | internal_port, external_port = split_port("127.0.0.1:1000:2000")
|
236 | 325 | self.assertEqual(internal_port, ["2000"])
|
|
0 commit comments