|
22 | 22 |
|
23 | 23 | from .helpers.host import get_localhost_ip |
24 | 24 |
|
25 | | -log = logging.getLogger(__name__) |
| 25 | +_logger = logging.getLogger(__name__) |
26 | 26 |
|
27 | 27 |
|
28 | 28 | @pytest.fixture(scope="session") |
29 | 29 | def docker_registry(keep_docker_up: bool) -> Iterator[str]: |
| 30 | + """sets up and runs a docker registry container locally and returns its URL""" |
| 31 | + yield from _docker_registry_impl(keep_docker_up, registry_version="3") |
| 32 | + |
| 33 | + |
| 34 | +@pytest.fixture(scope="session") |
| 35 | +def docker_registry_v2() -> Iterator[str]: |
| 36 | + """sets up and runs a docker registry v2 container locally and returns its URL""" |
| 37 | + yield from _docker_registry_impl(keep_docker_up=False, registry_version="2") |
| 38 | + |
| 39 | + |
| 40 | +def _docker_registry_impl(keep_docker_up: bool, registry_version: str) -> Iterator[str]: |
30 | 41 | """sets up and runs a docker registry container locally and returns its URL""" |
31 | 42 | # run the registry outside of the stack |
32 | 43 | docker_client = docker.from_env() |
33 | 44 | # try to login to private registry |
34 | 45 | host = "127.0.0.1" |
35 | | - port = 5000 |
| 46 | + port = 5000 if registry_version == "3" else 5001 |
36 | 47 | url = f"{host}:{port}" |
| 48 | + container_name = f"pytest_registry_v{registry_version}" |
| 49 | + volume_name = f"pytest_registry_v{registry_version}_data" |
| 50 | + |
37 | 51 | container = None |
38 | 52 | try: |
39 | 53 | docker_client.login(registry=url, username="simcore") |
40 | | - container = docker_client.containers.list(filters={"name": "pytest_registry"})[ |
41 | | - 0 |
42 | | - ] |
| 54 | + container = docker_client.containers.list(filters={"name": container_name})[0] |
43 | 55 | print("Warning: docker registry is already up!") |
44 | 56 | except Exception: # pylint: disable=broad-except |
45 | 57 | container = docker_client.containers.run( |
46 | | - "registry:3", |
47 | | - ports={"5000": "5000"}, |
48 | | - name="pytest_registry", |
| 58 | + f"registry:{registry_version}", |
| 59 | + ports={"5000": port}, |
| 60 | + name=container_name, |
49 | 61 | environment=["REGISTRY_STORAGE_DELETE_ENABLED=true"], |
50 | 62 | restart_policy={"Name": "always"}, |
51 | | - volumes={ |
52 | | - "pytest_registry_data": {"bind": "/var/lib/registry", "mode": "rw"} |
53 | | - }, |
| 63 | + volumes={volume_name: {"bind": "/var/lib/registry", "mode": "rw"}}, |
54 | 64 | detach=True, |
55 | 65 | ) |
56 | 66 |
|
@@ -79,9 +89,9 @@ def docker_registry(keep_docker_up: bool) -> Iterator[str]: |
79 | 89 | os.environ["REGISTRY_SSL"] = "False" |
80 | 90 | os.environ["REGISTRY_AUTH"] = "False" |
81 | 91 | # the registry URL is how to access from the container (e.g. for accessing the API) |
82 | | - os.environ["REGISTRY_URL"] = f"{get_localhost_ip()}:5000" |
| 92 | + os.environ["REGISTRY_URL"] = f"{get_localhost_ip()}:{port}" |
83 | 93 | # the registry PATH is how the docker engine shall access the images (usually same as REGISTRY_URL but for testing) |
84 | | - os.environ["REGISTRY_PATH"] = "127.0.0.1:5000" |
| 94 | + os.environ["REGISTRY_PATH"] = f"127.0.0.1:{port}" |
85 | 95 | os.environ["REGISTRY_USER"] = "simcore" |
86 | 96 | os.environ["REGISTRY_PW"] = "" |
87 | 97 |
|
@@ -124,7 +134,7 @@ def registry_settings( |
124 | 134 | @tenacity.retry( |
125 | 135 | wait=tenacity.wait_fixed(2), |
126 | 136 | stop=tenacity.stop_after_delay(20), |
127 | | - before_sleep=tenacity.before_sleep_log(log, logging.INFO), |
| 137 | + before_sleep=tenacity.before_sleep_log(_logger, logging.INFO), |
128 | 138 | reraise=True, |
129 | 139 | ) |
130 | 140 | def wait_till_registry_is_responsive(url: str) -> bool: |
|
0 commit comments