Skip to content

Commit cae5648

Browse files
committed
add env variable REUSE_ENABLED
1 parent 596d098 commit cae5648

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

core/testcontainers/core/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
RYUK_DOCKER_SOCKET: str = environ.get("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE", "/var/run/docker.sock")
1616
RYUK_RECONNECTION_TIMEOUT: str = environ.get("RYUK_RECONNECTION_TIMEOUT", "10s")
1717
TC_HOST_OVERRIDE: Optional[str] = environ.get("TC_HOST", environ.get("TESTCONTAINERS_HOST_OVERRIDE"))
18+
REUSE_ENABLED: bool = environ.get("TESTCONTAINERS_REUSE_ENABLED", "false") == "true"
1819

1920
TC_FILE = ".testcontainers.properties"
2021
TC_GLOBAL = Path.home() / TC_FILE
@@ -54,6 +55,7 @@ class TestcontainersConfiguration:
5455
tc_properties: dict[str, str] = field(default_factory=read_tc_properties)
5556
_docker_auth_config: Optional[str] = field(default_factory=lambda: environ.get("DOCKER_AUTH_CONFIG"))
5657
tc_host_override: Optional[str] = TC_HOST_OVERRIDE
58+
reuse_enabled: bool = REUSE_ENABLED
5759
"""
5860
https://github.com/testcontainers/testcontainers-go/blob/dd76d1e39c654433a3d80429690d07abcec04424/docker.go#L644
5961
if os env TC_HOST is set, use it

core/testcontainers/core/container.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ def _start():
125125
encoding="utf-8",
126126
)
127127
).hexdigest()
128-
129-
if self._reuse:
128+
# TODO: warn user if with_reuse in use but REUSE_ENABLED false
129+
if self._reuse and c.reuse_enabled:
130130
docker_client = self.get_docker_client()
131131
container = docker_client.find_container_by_hash(hash_)
132132
if container:
@@ -145,8 +145,9 @@ def _start():
145145

146146
def stop(self, force=True, delete_volume=True) -> None:
147147
if self._container:
148-
if self._reuse:
149-
self._container.stop()
148+
if self._reuse and c.reuse_enabled:
149+
#self._container.stop()
150+
return
150151
else:
151152
self._container.remove(force=force, v=delete_volume)
152153
self.get_docker_client().client.close()

core/tests/test_reusable_containers.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from docker.models.containers import Container
22
from testcontainers.core.container import DockerContainer
33
from testcontainers.core.docker_client import DockerClient
4+
from testcontainers.core.waiting_utils import wait_for_logs
45

56

67
def test_docker_container_reuse_default():
@@ -11,17 +12,27 @@ def test_docker_container_reuse_default():
1112
assert id not in [container.id for container in containers]
1213

1314

14-
def test_docker_container_with_reuse():
15+
def test_docker_container_with_reuse_reuse_disabled():
1516
with DockerContainer("hello-world").with_reuse() as container:
1617
assert container._reuse == True
1718
id = container._container.id
1819
containers = DockerClient().client.containers.list(all=True)
20+
assert id not in [container.id for container in containers]
21+
22+
23+
def test_docker_container_with_reuse_reuse_enabled(monkeypatch):
24+
monkeypatch.setattr("testcontainers.core.config.testcontainers_config.reuse_enabled", True)
25+
monkeypatch.setattr("testcontainers.core.config.testcontainers_config.ryuk_disabled", True)
26+
with DockerContainer("postgres", auto_remove=False).with_reuse() as container:
27+
assert container._reuse == True
28+
id = container._container.id
29+
containers = DockerClient().client.containers.list(all=True)
1930
assert id in [container.id for container in containers]
2031

2132

2233
def test_docker_container_labels_hash():
2334
with DockerContainer("hello-world").with_reuse() as container:
24-
assert container._container.labels["hash"] == "fd35c55b0a6d03b7d569828d4bc4cc7f74b4312ded5936ae9bb7035798bb3628"
35+
assert container._container.labels["hash"] == "505d1d913abe7f54b5a66202e8559a4f798038a204d39fe8b1577735ed632e32"
2536

2637

2738
def test_docker_client_find_container_by_hash_not_existing():

0 commit comments

Comments
 (0)