| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | """Test that nginx-proxy detects new containers"""from time import sleepimport pytestfrom docker.errors import NotFound@pytest.fixturedef web1(docker_compose):    """    pytest fixture creating a web container with `VIRTUAL_HOST=web1.nginx-proxy` listening on port 81.    """    container = docker_compose.containers.run(        name="web1",        image="web",        detach=True,        environment={            "WEB_PORTS": "81",            "VIRTUAL_HOST": "web1.nginx-proxy"        },        ports={"81/tcp": None}    )    docker_compose.networks.get("test_events-net").connect(container)    sleep(2)  # give it some time to initialize and for docker-gen to detect it    yield container    try:        docker_compose.containers.get("web1").remove(force=True)    except NotFound:        pass@pytest.fixturedef web2(docker_compose):    """    pytest fixture creating a web container with `VIRTUAL_HOST=nginx-proxy`, `VIRTUAL_PATH=/web2/` and `VIRTUAL_DEST=/` listening on port 82.    """    container = docker_compose.containers.run(        name="web2",        image="web",        detach=True,        environment={            "WEB_PORTS": "82",            "VIRTUAL_HOST": "nginx-proxy",            "VIRTUAL_PATH": "/web2/",            "VIRTUAL_DEST": "/",        },        ports={"82/tcp": None}    )    docker_compose.networks.get("test_events-net").connect(container)    sleep(2)  # give it some time to initialize and for docker-gen to detect it    yield container    try:        docker_compose.containers.get("web2").remove(force=True)    except NotFound:        passdef test_nginx_proxy_behavior_when_alone(docker_compose, nginxproxy):    r = nginxproxy.get("http://nginx-proxy/")    assert r.status_code == 503def test_new_container_is_detected_vhost(web1, nginxproxy):    r = nginxproxy.get("http://web1.nginx-proxy/port")    assert r.status_code == 200    assert "answer from port 81\n" == r.text    web1.remove(force=True)    sleep(2)    r = nginxproxy.get("http://web1.nginx-proxy/port")    assert r.status_code == 503def test_new_container_is_detected_vpath(web2, nginxproxy):    r = nginxproxy.get("http://nginx-proxy/web2/port")    assert r.status_code == 200    assert "answer from port 82\n" == r.text    r = nginxproxy.get("http://nginx-proxy/port")    assert r.status_code in [404, 503]    web2.remove(force=True)    sleep(2)    r = nginxproxy.get("http://nginx-proxy/web2/port")    assert r.status_code == 503
 |