test: isolate in project

This commit is contained in:
Nicolas Duchon 2024-12-23 21:05:25 +01:00
parent 8fd179bf9f
commit 381293ad3f
11 changed files with 30 additions and 13 deletions

View file

@ -331,8 +331,8 @@ def get_nginx_conf_from_container(container):
return conffile.read() return conffile.read()
def docker_compose_up(compose_file='docker-compose.yml'): def docker_compose_up(project_name, compose_file='docker-compose.yml'):
composeCmd = f'{DOCKER_COMPOSE} --file {compose_file} up --remove-orphans --force-recreate --detach' composeCmd = f'{DOCKER_COMPOSE} --project-name {project_name} --file {compose_file} up --remove-orphans --force-recreate --detach'
logging.info(composeCmd) logging.info(composeCmd)
try: try:
@ -341,8 +341,8 @@ def docker_compose_up(compose_file='docker-compose.yml'):
pytest.fail(f"Error while runninng '{composeCmd}:\n{e.output}", pytrace=False) pytest.fail(f"Error while runninng '{composeCmd}:\n{e.output}", pytrace=False)
def docker_compose_down(compose_file='docker-compose.yml'): def docker_compose_down(project_name, compose_file='docker-compose.yml'):
composeCmd = f'{DOCKER_COMPOSE} --file {compose_file} down --remove-orphans --volumes' composeCmd = f'{DOCKER_COMPOSE} --project-name {project_name} --file {compose_file} down --remove-orphans --volumes'
logging.info(composeCmd) logging.info(composeCmd)
try: try:
@ -467,6 +467,7 @@ def connect_to_all_networks():
class DockerComposer(contextlib.AbstractContextManager): class DockerComposer(contextlib.AbstractContextManager):
def __init__(self): def __init__(self):
self._docker_compose_file = None self._docker_compose_file = None
self._project_name = None
def __exit__(self, *exc_info): def __exit__(self, *exc_info):
self._down() self._down()
@ -476,19 +477,22 @@ class DockerComposer(contextlib.AbstractContextManager):
return return
for network in self._networks: for network in self._networks:
disconnect_from_network(network) disconnect_from_network(network)
docker_compose_down(self._docker_compose_file) docker_compose_down(self._project_name, self._docker_compose_file)
self._docker_compose_file = None self._docker_compose_file = None
def compose(self, docker_compose_file): def compose(self, project_name, docker_compose_file):
if docker_compose_file == self._docker_compose_file and project_name == self._project_name:
return
self._down() self._down()
if docker_compose_file is None: if docker_compose_file is None:
return return
remove_all_containers() remove_all_containers()
docker_compose_up(docker_compose_file) docker_compose_up(project_name, docker_compose_file)
self._networks = connect_to_all_networks() self._networks = connect_to_all_networks()
wait_for_nginxproxy_to_be_ready() wait_for_nginxproxy_to_be_ready()
time.sleep(3) # give time to containers to be ready time.sleep(3) # give time to containers to be ready
self._docker_compose_file = docker_compose_file self._docker_compose_file = docker_compose_file
self._project_name = project_name
############################################################################### ###############################################################################
@ -517,7 +521,7 @@ def monkey_patched_dns():
@pytest.fixture @pytest.fixture
def docker_compose(monkey_patched_dns, docker_composer, docker_compose_file): def docker_compose(request, monkey_patched_dns, docker_composer, docker_compose_file):
"""Ensures containers described in a docker compose file are started. """Ensures containers described in a docker compose file are started.
A custom docker compose file name can be specified by overriding the `docker_compose_file` A custom docker compose file name can be specified by overriding the `docker_compose_file`
@ -526,7 +530,8 @@ def docker_compose(monkey_patched_dns, docker_composer, docker_compose_file):
Also, in the case where pytest is running from a docker container, this fixture makes sure Also, in the case where pytest is running from a docker container, this fixture makes sure
our container will be attached to all the docker networks. our container will be attached to all the docker networks.
""" """
docker_composer.compose(docker_compose_file) project_name = request.module.__name__
docker_composer.compose(project_name, docker_compose_file)
yield docker_client yield docker_client

View file

@ -22,7 +22,7 @@ def web1(docker_compose):
}, },
ports={"81/tcp": None} ports={"81/tcp": None}
) )
docker_compose.networks.get("test_default").connect(container) docker_compose.networks.get("nginx-proxy-test-events").connect(container)
sleep(2) # give it some time to initialize and for docker-gen to detect it sleep(2) # give it some time to initialize and for docker-gen to detect it
yield container yield container
try: try:
@ -47,7 +47,7 @@ def web2(docker_compose):
}, },
ports={"82/tcp": None} ports={"82/tcp": None}
) )
docker_compose.networks.get("test_default").connect(container) docker_compose.networks.get("nginx-proxy-test-events").connect(container)
sleep(2) # give it some time to initialize and for docker-gen to detect it sleep(2) # give it some time to initialize and for docker-gen to detect it
yield container yield container
try: try:

View file

@ -1,3 +1,7 @@
networks:
default:
name: nginx-proxy-test-events
volumes: volumes:
nginx_conf: nginx_conf:

View file

@ -62,7 +62,7 @@ def require_openssl(required_version):
@require_openssl("1.0.2") @require_openssl("1.0.2")
def negotiate_cipher(sut_container, additional_params='', grep='Cipher is'): def negotiate_cipher(sut_container, additional_params='', grep='Cipher is'):
sut_container.reload() sut_container.reload()
host = f"{sut_container.attrs['NetworkSettings']['Networks']['test_ssl_default']['IPAddress']}:443" host = f"{sut_container.attrs['NetworkSettings']['Networks']['nginx-proxy-test-ssl-dhparam']['IPAddress']}:443"
try: try:
# Enforce TLS 1.2 as newer versions don't support custom dhparam or ciphersuite preference. # Enforce TLS 1.2 as newer versions don't support custom dhparam or ciphersuite preference.

View file

@ -1,3 +1,7 @@
networks:
default:
name: nginx-proxy-test-ssl-dhparam
services: services:
web5: web5:
image: web image: web

View file

@ -39,7 +39,7 @@ def web4(docker_compose):
}, },
ports={"84/tcp": None} ports={"84/tcp": None}
) )
docker_compose.networks.get("test_virtual-path_default").connect(container) docker_compose.networks.get("nginx-proxy-test-virtual-paths").connect(container)
sleep(2) # give it some time to initialize and for docker-gen to detect it sleep(2) # give it some time to initialize and for docker-gen to detect it
yield container yield container
try: try:

View file

@ -1,3 +1,7 @@
networks:
default:
name: nginx-proxy-test-virtual-paths
volumes: volumes:
nginx_conf: nginx_conf: