test_dockergen_v3.py 1.7 KB

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