2
0

test_dockergen_v3.py 1.9 KB

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