mirror of
https://github.com/thib8956/nginx-proxy
synced 2025-02-24 01:38:15 +00:00
chore(ci): ♻️ convert Python old %
string to f-strings
This commit is contained in:
parent
eba9ac4261
commit
37e85e6e8d
@ -132,7 +132,7 @@ def container_ip(container):
|
|||||||
pytest.skip("This system does not support IPv6")
|
pytest.skip("This system does not support IPv6")
|
||||||
ip = container_ipv6(container)
|
ip = container_ipv6(container)
|
||||||
if ip == '':
|
if ip == '':
|
||||||
pytest.skip("Container %s has no IPv6 address" % container.name)
|
pytest.skip(f"Container {container.name} has no IPv6 address")
|
||||||
else:
|
else:
|
||||||
return ip
|
return ip
|
||||||
else:
|
else:
|
||||||
@ -166,15 +166,15 @@ def nginx_proxy_dns_resolver(domain_name):
|
|||||||
:return: IP or None
|
:return: IP or None
|
||||||
"""
|
"""
|
||||||
log = logging.getLogger('DNS')
|
log = logging.getLogger('DNS')
|
||||||
log.debug("nginx_proxy_dns_resolver(%r)" % domain_name)
|
log.debug(f"nginx_proxy_dns_resolver({domain_name!r})")
|
||||||
if 'nginx-proxy' in domain_name:
|
if 'nginx-proxy' in domain_name:
|
||||||
nginxproxy_containers = docker_client.containers.list(filters={"status": "running", "ancestor": "nginxproxy/nginx-proxy:test"})
|
nginxproxy_containers = docker_client.containers.list(filters={"status": "running", "ancestor": "nginxproxy/nginx-proxy:test"})
|
||||||
if len(nginxproxy_containers) == 0:
|
if len(nginxproxy_containers) == 0:
|
||||||
log.warn("no container found from image nginxproxy/nginx-proxy:test while resolving %r", domain_name)
|
log.warn(f"no container found from image nginxproxy/nginx-proxy:test while resolving {domain_name!r}")
|
||||||
return
|
return
|
||||||
nginxproxy_container = nginxproxy_containers[0]
|
nginxproxy_container = nginxproxy_containers[0]
|
||||||
ip = container_ip(nginxproxy_container)
|
ip = container_ip(nginxproxy_container)
|
||||||
log.info("resolving domain name %r as IP address %s of nginx-proxy container %s" % (domain_name, ip, nginxproxy_container.name))
|
log.info(f"resolving domain name {domain_name!r} as IP address {ip} of nginx-proxy container {nginxproxy_container.name}")
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
def docker_container_dns_resolver(domain_name):
|
def docker_container_dns_resolver(domain_name):
|
||||||
@ -185,24 +185,24 @@ def docker_container_dns_resolver(domain_name):
|
|||||||
:return: IP or None
|
:return: IP or None
|
||||||
"""
|
"""
|
||||||
log = logging.getLogger('DNS')
|
log = logging.getLogger('DNS')
|
||||||
log.debug("docker_container_dns_resolver(%r)" % domain_name)
|
log.debug(f"docker_container_dns_resolver({domain_name!r})")
|
||||||
|
|
||||||
match = re.search(r'(^|.+\.)(?P<container>[^.]+)\.container\.docker$', domain_name)
|
match = re.search(r'(^|.+\.)(?P<container>[^.]+)\.container\.docker$', domain_name)
|
||||||
if not match:
|
if not match:
|
||||||
log.debug("%r does not match" % domain_name)
|
log.debug(f"{domain_name!r} does not match")
|
||||||
return
|
return
|
||||||
|
|
||||||
container_name = match.group('container')
|
container_name = match.group('container')
|
||||||
log.debug("looking for container %r" % container_name)
|
log.debug(f"looking for container {container_name!r}")
|
||||||
try:
|
try:
|
||||||
container = docker_client.containers.get(container_name)
|
container = docker_client.containers.get(container_name)
|
||||||
except docker.errors.NotFound:
|
except docker.errors.NotFound:
|
||||||
log.warn("container named %r not found while resolving %r" % (container_name, domain_name))
|
log.warn(f"container named {container_name!r} not found while resolving {domain_name!r}")
|
||||||
return
|
return
|
||||||
log.debug("container %r found (%s)" % (container.name, container.short_id))
|
log.debug(f"container {container.name!r} found ({container.short_id})")
|
||||||
|
|
||||||
ip = container_ip(container)
|
ip = container_ip(container)
|
||||||
log.info("resolving domain name %r as IP address %s of container %s" % (domain_name, ip, container.name))
|
log.info(f"resolving domain name {domain_name!r} as IP address {ip} of container {container.name}")
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ def monkey_patch_urllib_dns_resolver():
|
|||||||
prv_getaddrinfo = socket.getaddrinfo
|
prv_getaddrinfo = socket.getaddrinfo
|
||||||
dns_cache = {}
|
dns_cache = {}
|
||||||
def new_getaddrinfo(*args):
|
def new_getaddrinfo(*args):
|
||||||
logging.getLogger('DNS').debug("resolving domain name %s" % repr(args))
|
logging.getLogger('DNS').debug(f"resolving domain name {repr(args)}")
|
||||||
_args = list(args)
|
_args = list(args)
|
||||||
|
|
||||||
# custom DNS resolvers
|
# custom DNS resolvers
|
||||||
@ -243,7 +243,7 @@ def remove_all_containers():
|
|||||||
for container in docker_client.containers.list(all=True):
|
for container in docker_client.containers.list(all=True):
|
||||||
if I_AM_RUNNING_INSIDE_A_DOCKER_CONTAINER and container.id.startswith(socket.gethostname()):
|
if I_AM_RUNNING_INSIDE_A_DOCKER_CONTAINER and container.id.startswith(socket.gethostname()):
|
||||||
continue # pytest is running within a Docker container, so we do not want to remove that particular container
|
continue # pytest is running within a Docker container, so we do not want to remove that particular container
|
||||||
logging.info("removing container %s" % container.name)
|
logging.info(f"removing container {container.name}")
|
||||||
container.remove(v=True, force=True)
|
container.remove(v=True, force=True)
|
||||||
|
|
||||||
|
|
||||||
@ -263,19 +263,19 @@ def get_nginx_conf_from_container(container):
|
|||||||
|
|
||||||
|
|
||||||
def docker_compose_up(compose_file='docker-compose.yml'):
|
def docker_compose_up(compose_file='docker-compose.yml'):
|
||||||
logging.info('docker-compose -f %s up -d' % compose_file)
|
logging.info(f'docker-compose -f {compose_file} up -d')
|
||||||
try:
|
try:
|
||||||
subprocess.check_output(shlex.split('docker-compose -f %s up -d' % compose_file), stderr=subprocess.STDOUT)
|
subprocess.check_output(shlex.split(f'docker-compose -f {compose_file} up -d'), stderr=subprocess.STDOUT)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
pytest.fail("Error while runninng 'docker-compose -f %s up -d':\n%s" % (compose_file, e.output), pytrace=False)
|
pytest.fail(f"Error while runninng 'docker-compose -f {compose_file} up -d':\n{e.output}", pytrace=False)
|
||||||
|
|
||||||
|
|
||||||
def docker_compose_down(compose_file='docker-compose.yml'):
|
def docker_compose_down(compose_file='docker-compose.yml'):
|
||||||
logging.info('docker-compose -f %s down' % compose_file)
|
logging.info(f'docker-compose -f {compose_file} down')
|
||||||
try:
|
try:
|
||||||
subprocess.check_output(shlex.split('docker-compose -f %s down' % compose_file), stderr=subprocess.STDOUT)
|
subprocess.check_output(shlex.split(f'docker-compose -f {compose_file} down'), stderr=subprocess.STDOUT)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
pytest.fail("Error while runninng 'docker-compose -f %s down':\n%s" % (compose_file, e.output), pytrace=False)
|
pytest.fail(f"Error while runninng 'docker-compose -f {compose_file} down':\n{e.output}", pytrace=False)
|
||||||
|
|
||||||
|
|
||||||
def wait_for_nginxproxy_to_be_ready():
|
def wait_for_nginxproxy_to_be_ready():
|
||||||
@ -309,7 +309,7 @@ def find_docker_compose_file(request):
|
|||||||
if docker_compose_file_module_variable is not None:
|
if docker_compose_file_module_variable is not None:
|
||||||
docker_compose_file = os.path.join( test_module_dir, docker_compose_file_module_variable)
|
docker_compose_file = os.path.join( test_module_dir, docker_compose_file_module_variable)
|
||||||
if not os.path.isfile(docker_compose_file):
|
if not os.path.isfile(docker_compose_file):
|
||||||
raise ValueError("docker compose file %r could not be found. Check your test module `docker_compose_file` variable value." % docker_compose_file)
|
raise ValueError(f"docker compose file {docker_compose_file!r} could not be found. Check your test module `docker_compose_file` variable value.")
|
||||||
else:
|
else:
|
||||||
if os.path.isfile(yml_file):
|
if os.path.isfile(yml_file):
|
||||||
docker_compose_file = yml_file
|
docker_compose_file = yml_file
|
||||||
@ -321,7 +321,7 @@ def find_docker_compose_file(request):
|
|||||||
if not os.path.isfile(docker_compose_file):
|
if not os.path.isfile(docker_compose_file):
|
||||||
logging.error("Could not find any docker-compose file named either '{0}.yml', '{0}.yaml' or 'docker-compose.yml'".format(request.module.__name__))
|
logging.error("Could not find any docker-compose file named either '{0}.yml', '{0}.yaml' or 'docker-compose.yml'".format(request.module.__name__))
|
||||||
|
|
||||||
logging.debug("using docker compose file %s" % docker_compose_file)
|
logging.debug(f"using docker compose file {docker_compose_file}")
|
||||||
return docker_compose_file
|
return docker_compose_file
|
||||||
|
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ def connect_to_network(network):
|
|||||||
try:
|
try:
|
||||||
my_container = docker_client.containers.get(socket.gethostname())
|
my_container = docker_client.containers.get(socket.gethostname())
|
||||||
except docker.errors.NotFound:
|
except docker.errors.NotFound:
|
||||||
logging.warn("container %r not found" % socket.gethostname())
|
logging.warn(f"container {socket.gethostname()!r} not found")
|
||||||
return
|
return
|
||||||
|
|
||||||
# figure out our container networks
|
# figure out our container networks
|
||||||
@ -343,7 +343,7 @@ def connect_to_network(network):
|
|||||||
|
|
||||||
# make sure our container is connected to the nginx-proxy's network
|
# make sure our container is connected to the nginx-proxy's network
|
||||||
if network not in my_networks:
|
if network not in my_networks:
|
||||||
logging.info("Connecting to docker network: %s" % network.name)
|
logging.info(f"Connecting to docker network: {network.name}")
|
||||||
network.connect(my_container)
|
network.connect(my_container)
|
||||||
return network
|
return network
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ def disconnect_from_network(network=None):
|
|||||||
try:
|
try:
|
||||||
my_container = docker_client.containers.get(socket.gethostname())
|
my_container = docker_client.containers.get(socket.gethostname())
|
||||||
except docker.errors.NotFound:
|
except docker.errors.NotFound:
|
||||||
logging.warn("container %r not found" % socket.gethostname())
|
logging.warn(f"container {socket.gethostname()!r} not found")
|
||||||
return
|
return
|
||||||
|
|
||||||
# figure out our container networks
|
# figure out our container networks
|
||||||
@ -366,7 +366,7 @@ def disconnect_from_network(network=None):
|
|||||||
|
|
||||||
# disconnect our container from the given network
|
# disconnect our container from the given network
|
||||||
if network.name in my_networks_names:
|
if network.name in my_networks_names:
|
||||||
logging.info("Disconnecting from network %s" % network.name)
|
logging.info(f"Disconnecting from network {network.name}")
|
||||||
network.disconnect(my_container)
|
network.disconnect(my_container)
|
||||||
|
|
||||||
|
|
||||||
@ -458,7 +458,7 @@ def pytest_runtest_makereport(item, call):
|
|||||||
def pytest_runtest_setup(item):
|
def pytest_runtest_setup(item):
|
||||||
previousfailed = getattr(item.parent, "_previousfailed", None)
|
previousfailed = getattr(item.parent, "_previousfailed", None)
|
||||||
if previousfailed is not None:
|
if previousfailed is not None:
|
||||||
pytest.xfail("previous test failed (%s)" % previousfailed.name)
|
pytest.xfail(f"previous test failed ({previousfailed.name})")
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
|
@ -13,13 +13,13 @@ class Handler(http.server.SimpleHTTPRequestHandler):
|
|||||||
if self.path == "/headers":
|
if self.path == "/headers":
|
||||||
response_body += self.headers.as_string()
|
response_body += self.headers.as_string()
|
||||||
elif self.path == "/port":
|
elif self.path == "/port":
|
||||||
response_body += "answer from port %s\n" % PORT
|
response_body += f"answer from port {PORT}\n"
|
||||||
elif re.match("/status/(\d+)", self.path):
|
elif re.match("/status/(\d+)", self.path):
|
||||||
result = re.match("/status/(\d+)", self.path)
|
result = re.match("/status/(\d+)", self.path)
|
||||||
response_code = int(result.group(1))
|
response_code = int(result.group(1))
|
||||||
response_body += "answer with response code %s\n" % response_code
|
response_body += f"answer with response code {response_code}\n"
|
||||||
elif self.path == "/":
|
elif self.path == "/":
|
||||||
response_body += "I'm %s\n" % os.environ['HOSTNAME']
|
response_body += f"I'm {os.environ['HOSTNAME']}\n"
|
||||||
else:
|
else:
|
||||||
response_body += "No route for this path!\n"
|
response_body += "No route for this path!\n"
|
||||||
response_code = 404
|
response_code = 404
|
||||||
|
@ -39,4 +39,4 @@ def test_forwards_to_whoami(nginx_tmpl, docker_compose, nginxproxy):
|
|||||||
r = nginxproxy.get("http://whoami.nginx.container.docker/")
|
r = nginxproxy.get("http://whoami.nginx.container.docker/")
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
whoami_container = docker_compose.containers.get("whoami")
|
whoami_container = docker_compose.containers.get("whoami")
|
||||||
assert r.text == "I'm %s\n" % whoami_container.id[:12]
|
assert r.text == f"I'm {whoami_container.id[:12]}\n"
|
||||||
|
@ -24,8 +24,7 @@ def versiontuple(v):
|
|||||||
raw_version = docker.from_env().version()["Version"]
|
raw_version = docker.from_env().version()["Version"]
|
||||||
pytestmark = pytest.mark.skipif(
|
pytestmark = pytest.mark.skipif(
|
||||||
versiontuple(raw_version) < (1, 13),
|
versiontuple(raw_version) < (1, 13),
|
||||||
reason="Docker compose syntax v3 requires docker engine v1.13 or later (got %s)"
|
reason="Docker compose syntax v3 requires docker engine v1.13 or later (got {raw_version})"
|
||||||
% raw_version,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -64,7 +63,7 @@ def test_forwards_to_whoami(nginx_tmpl, docker_compose, nginxproxy):
|
|||||||
r = nginxproxy.get("http://whoami.nginx.container.docker/")
|
r = nginxproxy.get("http://whoami.nginx.container.docker/")
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
whoami_container = docker_compose.containers.get("whoami")
|
whoami_container = docker_compose.containers.get("whoami")
|
||||||
assert r.text == "I'm %s\n" % whoami_container.id[:12]
|
assert r.text == f"I'm {whoami_container.id[:12]}\n"
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -55,7 +55,7 @@ def require_openssl(required_version):
|
|||||||
openssl_version = str(command_output.split()[1])
|
openssl_version = str(command_output.split()[1])
|
||||||
return pytest.mark.skipif(
|
return pytest.mark.skipif(
|
||||||
versiontuple(openssl_version) < versiontuple(required_version),
|
versiontuple(openssl_version) < versiontuple(required_version),
|
||||||
reason="openssl v%s is less than required version %s" % (openssl_version, required_version))
|
reason=f"openssl v{openssl_version} is less than required version {required_version}")
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -87,7 +87,7 @@ def test_web5_dhparam_is_used(docker_compose):
|
|||||||
sut_container = docker_client.containers.get("nginxproxy")
|
sut_container = docker_client.containers.get("nginxproxy")
|
||||||
assert sut_container.status == "running"
|
assert sut_container.status == "running"
|
||||||
|
|
||||||
host = "%s:443" % sut_container.attrs["NetworkSettings"]["IPAddress"]
|
host = f"{sut_container.attrs['NetworkSettings']['IPAddress']}:443"
|
||||||
r = subprocess.check_output(
|
r = subprocess.check_output(
|
||||||
f"echo '' | openssl s_client -connect {host} -cipher 'EDH' | grep 'Server Temp Key'", shell=True)
|
f"echo '' | openssl s_client -connect {host} -cipher 'EDH' | grep 'Server Temp Key'", shell=True)
|
||||||
assert b"Server Temp Key: X25519, 253 bits\n" == r
|
assert b"Server Temp Key: X25519, 253 bits\n" == r
|
||||||
|
@ -3,21 +3,21 @@ import pytest
|
|||||||
|
|
||||||
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
||||||
def test_web1_http_redirects_to_https(docker_compose, nginxproxy, subdomain):
|
def test_web1_http_redirects_to_https(docker_compose, nginxproxy, subdomain):
|
||||||
r = nginxproxy.get("http://%s.nginx-proxy.tld/" % subdomain, allow_redirects=False)
|
r = nginxproxy.get(f"http://{subdomain}.nginx-proxy.tld/", allow_redirects=False)
|
||||||
assert r.status_code == 301
|
assert r.status_code == 301
|
||||||
assert "Location" in r.headers
|
assert "Location" in r.headers
|
||||||
assert "https://%s.nginx-proxy.tld/" % subdomain == r.headers['Location']
|
assert f"https://{subdomain}.nginx-proxy.tld/" == r.headers['Location']
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
||||||
def test_web1_https_is_forwarded(docker_compose, nginxproxy, subdomain):
|
def test_web1_https_is_forwarded(docker_compose, nginxproxy, subdomain):
|
||||||
r = nginxproxy.get("https://%s.nginx-proxy.tld/port" % subdomain, allow_redirects=False)
|
r = nginxproxy.get(f"https://{subdomain}.nginx-proxy.tld/port", allow_redirects=False)
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert "answer from port 81\n" in r.text
|
assert "answer from port 81\n" in r.text
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
@pytest.mark.parametrize("subdomain", ["foo", "bar"])
|
||||||
def test_web1_HSTS_policy_is_active(docker_compose, nginxproxy, subdomain):
|
def test_web1_HSTS_policy_is_active(docker_compose, nginxproxy, subdomain):
|
||||||
r = nginxproxy.get("https://%s.nginx-proxy.tld/port" % subdomain, allow_redirects=False)
|
r = nginxproxy.get(f"https://{subdomain}.nginx-proxy.tld/port", allow_redirects=False)
|
||||||
assert "answer from port 81\n" in r.text
|
assert "answer from port 81\n" in r.text
|
||||||
assert "Strict-Transport-Security" in r.headers
|
assert "Strict-Transport-Security" in r.headers
|
||||||
|
@ -9,19 +9,19 @@ from requests.exceptions import SSLError
|
|||||||
(3, False),
|
(3, False),
|
||||||
])
|
])
|
||||||
def test_http_redirects_to_https(docker_compose, nginxproxy, subdomain, should_redirect_to_https):
|
def test_http_redirects_to_https(docker_compose, nginxproxy, subdomain, should_redirect_to_https):
|
||||||
r = nginxproxy.get("http://%s.web.nginx-proxy.tld/port" % subdomain)
|
r = nginxproxy.get(f"http://{subdomain}.web.nginx-proxy.tld/port")
|
||||||
if should_redirect_to_https:
|
if should_redirect_to_https:
|
||||||
assert len(r.history) > 0
|
assert len(r.history) > 0
|
||||||
assert r.history[0].is_redirect
|
assert r.history[0].is_redirect
|
||||||
assert r.history[0].headers.get("Location") == "https://%s.web.nginx-proxy.tld/port" % subdomain
|
assert r.history[0].headers.get("Location") == f"https://{subdomain}.web.nginx-proxy.tld/port"
|
||||||
assert "answer from port 8%s\n" % subdomain == r.text
|
assert f"answer from port 8{subdomain}\n" == r.text
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("subdomain", [1, 2])
|
@pytest.mark.parametrize("subdomain", [1, 2])
|
||||||
def test_https_get_served(docker_compose, nginxproxy, subdomain):
|
def test_https_get_served(docker_compose, nginxproxy, subdomain):
|
||||||
r = nginxproxy.get("https://%s.web.nginx-proxy.tld/port" % subdomain, allow_redirects=False)
|
r = nginxproxy.get(f"https://{subdomain}.web.nginx-proxy.tld/port", allow_redirects=False)
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert "answer from port 8%s\n" % subdomain == r.text
|
assert f"answer from port 8{subdomain}\n" == r.text
|
||||||
|
|
||||||
|
|
||||||
def test_web3_https_is_500_and_SSL_validation_fails(docker_compose, nginxproxy):
|
def test_web3_https_is_500_and_SSL_validation_fails(docker_compose, nginxproxy):
|
||||||
|
@ -18,9 +18,9 @@ import pytest
|
|||||||
("web4.whatever.nginx-proxy.regexp", 84),
|
("web4.whatever.nginx-proxy.regexp", 84),
|
||||||
])
|
])
|
||||||
def test_wildcard_prefix(docker_compose, nginxproxy, host, expected_port):
|
def test_wildcard_prefix(docker_compose, nginxproxy, host, expected_port):
|
||||||
r = nginxproxy.get("http://%s/port" % host)
|
r = nginxproxy.get(f"http://{host}/port")
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
assert r.text == "answer from port %s\n" % expected_port
|
assert r.text == f"answer from port {expected_port}\n"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("host", [
|
@pytest.mark.parametrize("host", [
|
||||||
@ -28,5 +28,5 @@ def test_wildcard_prefix(docker_compose, nginxproxy, host, expected_port):
|
|||||||
"web4.whatever.nginx-proxy.regexp-to-infinity-and-beyond"
|
"web4.whatever.nginx-proxy.regexp-to-infinity-and-beyond"
|
||||||
])
|
])
|
||||||
def test_non_matching_host_is_503(docker_compose, nginxproxy, host):
|
def test_non_matching_host_is_503(docker_compose, nginxproxy, host):
|
||||||
r = nginxproxy.get("http://%s/port" % host)
|
r = nginxproxy.get(f"http://{host}/port")
|
||||||
assert r.status_code == 503, r.text
|
assert r.status_code == 503, r.text
|
||||||
|
Loading…
x
Reference in New Issue
Block a user