test_events.py 2.6 KB

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