test_events.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """
  2. Test that nginx-proxy detects new containers
  3. """
  4. from time import sleep
  5. import pytest
  6. from docker.errors import NotFound
  7. @pytest.fixture()
  8. def web1(docker_compose):
  9. """
  10. pytest fixture creating a web container with `VIRTUAL_HOST=web1.nginx-proxy` listening on port 81.
  11. """
  12. container = docker_compose.containers.run(
  13. name="web1",
  14. image="web",
  15. detach=True,
  16. environment={
  17. "WEB_PORTS": "81",
  18. "VIRTUAL_HOST": "web1.nginx-proxy"
  19. },
  20. ports={"81/tcp": None}
  21. )
  22. docker_compose.networks.get("test_events-net").connect(container)
  23. sleep(2) # give it some time to initialize and for docker-gen to detect it
  24. yield container
  25. try:
  26. docker_compose.containers.get("web1").remove(force=True)
  27. except NotFound:
  28. pass
  29. @pytest.fixture()
  30. def web2(docker_compose):
  31. """
  32. pytest fixture creating a web container with `VIRTUAL_HOST=nginx-proxy`, `VIRTUAL_PATH=/web2/` and `VIRTUAL_DEST=/` listening on port 82.
  33. """
  34. container = docker_compose.containers.run(
  35. name="web2",
  36. image="web",
  37. detach=True,
  38. environment={
  39. "WEB_PORTS": "82",
  40. "VIRTUAL_HOST": "nginx-proxy",
  41. "VIRTUAL_PATH": "/web2/",
  42. "VIRTUAL_DEST": "/",
  43. },
  44. ports={"82/tcp": None}
  45. )
  46. docker_compose.networks.get("test_events-net").connect(container)
  47. sleep(2) # give it some time to initialize and for docker-gen to detect it
  48. yield container
  49. try:
  50. docker_compose.containers.get("web2").remove(force=True)
  51. except NotFound:
  52. pass
  53. def test_nginx_proxy_behavior_when_alone(docker_compose, nginxproxy):
  54. r = nginxproxy.get("http://nginx-proxy/")
  55. assert r.status_code == 503
  56. def test_new_container_is_detected_vhost(web1, nginxproxy):
  57. r = nginxproxy.get("http://web1.nginx-proxy/port")
  58. assert r.status_code == 200
  59. assert "answer from port 81\n" == r.text
  60. web1.remove(force=True)
  61. sleep(2)
  62. r = nginxproxy.get("http://web1.nginx-proxy/port")
  63. assert r.status_code == 503
  64. def test_new_container_is_detected_vpath(web2, nginxproxy):
  65. r = nginxproxy.get("http://nginx-proxy/web2/port")
  66. assert r.status_code == 200
  67. assert "answer from port 82\n" == r.text
  68. r = nginxproxy.get("http://nginx-proxy/port")
  69. assert r.status_code in [404, 503]
  70. web2.remove(force=True)
  71. sleep(2)
  72. r = nginxproxy.get("http://nginx-proxy/web2/port")
  73. assert r.status_code == 503