test: isolate in project
This commit is contained in:
parent
8fd179bf9f
commit
381293ad3f
11 changed files with 30 additions and 13 deletions
|
@ -331,8 +331,8 @@ def get_nginx_conf_from_container(container):
|
|||
return conffile.read()
|
||||
|
||||
|
||||
def docker_compose_up(compose_file='docker-compose.yml'):
|
||||
composeCmd = f'{DOCKER_COMPOSE} --file {compose_file} up --remove-orphans --force-recreate --detach'
|
||||
def docker_compose_up(project_name, compose_file='docker-compose.yml'):
|
||||
composeCmd = f'{DOCKER_COMPOSE} --project-name {project_name} --file {compose_file} up --remove-orphans --force-recreate --detach'
|
||||
logging.info(composeCmd)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
def docker_compose_down(compose_file='docker-compose.yml'):
|
||||
composeCmd = f'{DOCKER_COMPOSE} --file {compose_file} down --remove-orphans --volumes'
|
||||
def docker_compose_down(project_name, compose_file='docker-compose.yml'):
|
||||
composeCmd = f'{DOCKER_COMPOSE} --project-name {project_name} --file {compose_file} down --remove-orphans --volumes'
|
||||
logging.info(composeCmd)
|
||||
|
||||
try:
|
||||
|
@ -467,6 +467,7 @@ def connect_to_all_networks():
|
|||
class DockerComposer(contextlib.AbstractContextManager):
|
||||
def __init__(self):
|
||||
self._docker_compose_file = None
|
||||
self._project_name = None
|
||||
|
||||
def __exit__(self, *exc_info):
|
||||
self._down()
|
||||
|
@ -476,19 +477,22 @@ class DockerComposer(contextlib.AbstractContextManager):
|
|||
return
|
||||
for network in self._networks:
|
||||
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
|
||||
|
||||
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()
|
||||
if docker_compose_file is None:
|
||||
return
|
||||
remove_all_containers()
|
||||
docker_compose_up(docker_compose_file)
|
||||
docker_compose_up(project_name, docker_compose_file)
|
||||
self._networks = connect_to_all_networks()
|
||||
wait_for_nginxproxy_to_be_ready()
|
||||
time.sleep(3) # give time to containers to be ready
|
||||
self._docker_compose_file = docker_compose_file
|
||||
self._project_name = project_name
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
@ -517,7 +521,7 @@ def monkey_patched_dns():
|
|||
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ def web1(docker_compose):
|
|||
},
|
||||
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
|
||||
yield container
|
||||
try:
|
||||
|
@ -47,7 +47,7 @@ def web2(docker_compose):
|
|||
},
|
||||
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
|
||||
yield container
|
||||
try:
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
networks:
|
||||
default:
|
||||
name: nginx-proxy-test-events
|
||||
|
||||
volumes:
|
||||
nginx_conf:
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ def require_openssl(required_version):
|
|||
@require_openssl("1.0.2")
|
||||
def negotiate_cipher(sut_container, additional_params='', grep='Cipher is'):
|
||||
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:
|
||||
# Enforce TLS 1.2 as newer versions don't support custom dhparam or ciphersuite preference.
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
networks:
|
||||
default:
|
||||
name: nginx-proxy-test-ssl-dhparam
|
||||
|
||||
services:
|
||||
web5:
|
||||
image: web
|
||||
|
|
|
@ -39,7 +39,7 @@ def web4(docker_compose):
|
|||
},
|
||||
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
|
||||
yield container
|
||||
try:
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
networks:
|
||||
default:
|
||||
name: nginx-proxy-test-virtual-paths
|
||||
|
||||
volumes:
|
||||
nginx_conf:
|
||||
|
||||
|
|
Loading…
Reference in a new issue