test_dockergen_v3.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import os
  2. import docker
  3. import logging
  4. import pytest
  5. import re
  6. def versiontuple(v):
  7. """
  8. >>> versiontuple("1.12.3")
  9. (1, 12, 3)
  10. >>> versiontuple("1.13.0")
  11. (1, 13, 0)
  12. >>> versiontuple("17.03.0-ce")
  13. (17, 3, 0)
  14. >>> versiontuple("17.03.0-ce") < (1, 13)
  15. False
  16. """
  17. return tuple(map(int, (v.split("-")[0].split("."))))
  18. raw_version = docker.from_env().version()["Version"]
  19. pytestmark = pytest.mark.skipif(
  20. versiontuple(raw_version) < (1, 13),
  21. reason="Docker compose syntax v3 requires docker engine v1.13 or later (got %s)"
  22. % raw_version,
  23. )
  24. @pytest.fixture(scope="module")
  25. def nginx_tmpl():
  26. """
  27. pytest fixture which extracts the the nginx config template from
  28. the nginxproxy/nginx-proxy:test image
  29. """
  30. script_dir = os.path.dirname(__file__)
  31. logging.info("extracting nginx.tmpl from nginxproxy/nginx-proxy:test")
  32. docker_client = docker.from_env()
  33. print(
  34. docker_client.containers.run(
  35. image="nginxproxy/nginx-proxy:test",
  36. remove=True,
  37. volumes=["{current_dir}:{current_dir}".format(current_dir=script_dir)],
  38. entrypoint="sh",
  39. command='-xc "cp /app/nginx.tmpl {current_dir} && chmod 777 {current_dir}/nginx.tmpl"'.format(
  40. current_dir=script_dir
  41. ),
  42. stderr=True,
  43. )
  44. )
  45. yield
  46. logging.info("removing nginx.tmpl")
  47. os.remove(os.path.join(script_dir, "nginx.tmpl"))
  48. def test_unknown_virtual_host_is_503(nginx_tmpl, docker_compose, nginxproxy):
  49. r = nginxproxy.get("http://unknown.nginx.container.docker/")
  50. assert r.status_code == 503
  51. def test_forwards_to_whoami(nginx_tmpl, docker_compose, nginxproxy):
  52. r = nginxproxy.get("http://whoami.nginx.container.docker/")
  53. assert r.status_code == 200
  54. whoami_container = docker_compose.containers.get("whoami")
  55. assert r.text == "I'm %s\n" % whoami_container.id[:12]
  56. if __name__ == "__main__":
  57. import doctest
  58. doctest.testmod()