1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import os
- import docker
- import logging
- import pytest
- import re
- def versiontuple(v):
- """
- >>> versiontuple("1.12.3")
- (1, 12, 3)
- >>> versiontuple("1.13.0")
- (1, 13, 0)
- >>> versiontuple("17.03.0-ce")
- (17, 3, 0)
- >>> versiontuple("17.03.0-ce") < (1, 13)
- False
- """
- return tuple(map(int, (v.split("-")[0].split("."))))
- raw_version = docker.from_env().version()["Version"]
- pytestmark = pytest.mark.skipif(
- versiontuple(raw_version) < (1, 13),
- reason="Docker compose syntax v3 requires docker engine v1.13 or later (got {raw_version})"
- )
- @pytest.fixture(scope="module")
- def nginx_tmpl():
- """
- pytest fixture which extracts the the nginx config template from
- the nginxproxy/nginx-proxy:test image
- """
- script_dir = os.path.dirname(__file__)
- logging.info("extracting nginx.tmpl from nginxproxy/nginx-proxy:test")
- docker_client = docker.from_env()
- print(
- docker_client.containers.run(
- image="nginxproxy/nginx-proxy:test",
- remove=True,
- volumes=["{current_dir}:{current_dir}".format(current_dir=script_dir)],
- entrypoint="sh",
- command='-xc "cp /app/nginx.tmpl {current_dir} && chmod 777 {current_dir}/nginx.tmpl"'.format(
- current_dir=script_dir
- ),
- stderr=True,
- )
- )
- yield
- logging.info("removing nginx.tmpl")
- os.remove(os.path.join(script_dir, "nginx.tmpl"))
- def test_unknown_virtual_host_is_503(nginx_tmpl, docker_compose, nginxproxy):
- r = nginxproxy.get("http://unknown.nginx.container.docker/")
- assert r.status_code == 503
- def test_forwards_to_whoami(nginx_tmpl, docker_compose, nginxproxy):
- r = nginxproxy.get("http://whoami.nginx.container.docker/")
- assert r.status_code == 200
- whoami_container = docker_compose.containers.get("whoami")
- assert r.text == f"I'm {whoami_container.id[:12]}\n"
- if __name__ == "__main__":
- import doctest
- doctest.testmod()
|