From 0479cb02a2d6fec892ebd56b67706aace7b1c0e4 Mon Sep 17 00:00:00 2001 From: Nicolas Duchon Date: Fri, 23 May 2025 21:33:33 +0200 Subject: [PATCH] test: fix docker-gen flaky tests --- test/conftest.py | 34 +++++++++++++++---- test/test_dockergen/test_dockergen.base.yml | 2 +- test/test_dockergen/test_dockergen.py | 4 +-- ..._network_segregation-custom-label.base.yml | 2 +- ...kergen_network_segregation-custom-label.py | 4 +-- ...est_dockergen_network_segregation.base.yml | 2 +- .../test_dockergen_network_segregation.py | 4 +-- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/test/conftest.py b/test/conftest.py index 83f5865..c0a060b 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -199,26 +199,48 @@ def container_ipv6(container: Container) -> str: def nginx_proxy_dns_resolver(domain_name: str) -> Optional[str]: """ if "nginx-proxy" if found in host, return the ip address of the docker container - issued from the docker image nginxproxy/nginx-proxy:test. + issued from the docker image nginxproxy/nginx-proxy:test or nginx:latest. :return: IP or None """ log = logging.getLogger('DNS') log.debug(f"nginx_proxy_dns_resolver({domain_name!r})") + if 'nginx-proxy' in domain_name: nginxproxy_containers = docker_client.containers.list(filters={"status": "running", "ancestor": "nginxproxy/nginx-proxy:test"}) - if len(nginxproxy_containers) == 0: - log.warning(f"no container found from image nginxproxy/nginx-proxy:test while resolving {domain_name!r}") + nginx_containers = docker_client.containers.list(filters={"status": "running", "ancestor": "nginx:latest"}) + + if len(nginxproxy_containers) == 0 and len(nginx_containers) == 0: + log.warning(f"no runninf container found from image nginxproxy/nginx-proxy:test or nginx:latest while resolving {domain_name!r}") + exited_nginxproxy_containers = docker_client.containers.list(filters={"status": "exited", "ancestor": "nginxproxy/nginx-proxy:test"}) + exited_nginx_containers = docker_client.containers.list(filters={"status": "exited", "ancestor": "nginx:latest"}) + if len(exited_nginxproxy_containers) > 0: exited_nginxproxy_container_logs = exited_nginxproxy_containers[0].logs() log.warning(f"nginxproxy/nginx-proxy:test container might have exited unexpectedly. Container logs: " + "\n" + exited_nginxproxy_container_logs.decode()) + if len(exited_nginx_containers) > 0: + exited_nginx_container_logs = exited_nginx_containers[0].logs() + log.warning(f"nginx:latest container might have exited unexpectedly. Container logs: " + "\n" + exited_nginx_container_logs.decode()) + return None - nginxproxy_container = nginxproxy_containers[0] - ip = container_ip(nginxproxy_container) - log.info(f"resolving domain name {domain_name!r} as IP address {ip} of nginx-proxy container {nginxproxy_container.name}") + + container = None + container_type = "nginx-proxy" + + if len(nginxproxy_containers) >= 1: + container = nginxproxy_containers[0] + if len(nginx_containers) >= 1: + container = nginx_containers[0] + container_type = "nginx" + + ip = container_ip(container) + log.info(f"resolving domain name {domain_name!r} as IP address {ip} of {container_type} container {container.name}") return ip + return None + + def docker_container_dns_resolver(domain_name: str) -> Optional[str]: """ if domain name is of the form "XXX.container.docker" or "anything.XXX.container.docker", diff --git a/test/test_dockergen/test_dockergen.base.yml b/test/test_dockergen/test_dockergen.base.yml index 69f6c85..3012abe 100644 --- a/test/test_dockergen/test_dockergen.base.yml +++ b/test/test_dockergen/test_dockergen.base.yml @@ -27,4 +27,4 @@ services: - "80" environment: WEB_PORTS: "80" - VIRTUAL_HOST: whoami.nginx.container.docker + VIRTUAL_HOST: whoami.nginx-proxy.tld diff --git a/test/test_dockergen/test_dockergen.py b/test/test_dockergen/test_dockergen.py index 6d419cd..8784ed5 100644 --- a/test/test_dockergen/test_dockergen.py +++ b/test/test_dockergen/test_dockergen.py @@ -11,12 +11,12 @@ pytestmark = pytest.mark.skipif( def test_unknown_virtual_host_is_503(docker_compose, nginxproxy): - r = nginxproxy.get("http://unknown.nginx.container.docker/") + r = nginxproxy.get("http://unknown.nginx-proxy.tld/") assert r.status_code == 503 def test_forwards_to_whoami(docker_compose, nginxproxy): - r = nginxproxy.get("http://whoami.nginx.container.docker/") + r = nginxproxy.get("http://whoami.nginx-proxy.tld/") assert r.status_code == 200 whoami_container = docker_compose.containers.get("whoami") assert r.text == f"I'm {whoami_container.id[:12]}\n" diff --git a/test/test_dockergen/test_dockergen_network_segregation-custom-label.base.yml b/test/test_dockergen/test_dockergen_network_segregation-custom-label.base.yml index 1429e9f..bc79d2d 100644 --- a/test/test_dockergen/test_dockergen_network_segregation-custom-label.base.yml +++ b/test/test_dockergen/test_dockergen_network_segregation-custom-label.base.yml @@ -40,6 +40,6 @@ services: - "80" environment: WEB_PORTS: "80" - VIRTUAL_HOST: whoami2.nginx.container.docker + VIRTUAL_HOST: whoami2.nginx-proxy.tld networks: - proxy diff --git a/test/test_dockergen/test_dockergen_network_segregation-custom-label.py b/test/test_dockergen/test_dockergen_network_segregation-custom-label.py index ad487d9..ed5c20b 100644 --- a/test/test_dockergen/test_dockergen_network_segregation-custom-label.py +++ b/test/test_dockergen/test_dockergen_network_segregation-custom-label.py @@ -11,12 +11,12 @@ pytestmark = pytest.mark.skipif( def test_unknown_virtual_host_is_503(docker_compose, nginxproxy): - r = nginxproxy.get("http://unknown.nginx.container.docker/") + r = nginxproxy.get("http://unknown.nginx-proxy.tld/") assert r.status_code == 503 def test_forwards_to_whoami(docker_compose, nginxproxy): - r = nginxproxy.get("http://whoami2.nginx.container.docker/") + r = nginxproxy.get("http://whoami2.nginx-proxy.tld/") assert r.status_code == 200 whoami_container = docker_compose.containers.get("whoami2") assert r.text == f"I'm {whoami_container.id[:12]}\n" diff --git a/test/test_dockergen/test_dockergen_network_segregation.base.yml b/test/test_dockergen/test_dockergen_network_segregation.base.yml index c0e85ac..10f61a7 100644 --- a/test/test_dockergen/test_dockergen_network_segregation.base.yml +++ b/test/test_dockergen/test_dockergen_network_segregation.base.yml @@ -38,6 +38,6 @@ services: - "80" environment: WEB_PORTS: "80" - VIRTUAL_HOST: whoami2.nginx.container.docker + VIRTUAL_HOST: whoami2.nginx-proxy.tld networks: - proxy diff --git a/test/test_dockergen/test_dockergen_network_segregation.py b/test/test_dockergen/test_dockergen_network_segregation.py index ad487d9..ed5c20b 100644 --- a/test/test_dockergen/test_dockergen_network_segregation.py +++ b/test/test_dockergen/test_dockergen_network_segregation.py @@ -11,12 +11,12 @@ pytestmark = pytest.mark.skipif( def test_unknown_virtual_host_is_503(docker_compose, nginxproxy): - r = nginxproxy.get("http://unknown.nginx.container.docker/") + r = nginxproxy.get("http://unknown.nginx-proxy.tld/") assert r.status_code == 503 def test_forwards_to_whoami(docker_compose, nginxproxy): - r = nginxproxy.get("http://whoami2.nginx.container.docker/") + r = nginxproxy.get("http://whoami2.nginx-proxy.tld/") assert r.status_code == 200 whoami_container = docker_compose.containers.get("whoami2") assert r.text == f"I'm {whoami_container.id[:12]}\n"