50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from yaml import load, SafeLoader
|
|
from os import environ
|
|
|
|
import warnings
|
|
import socket
|
|
from requests import get
|
|
from requests.exceptions import SSLError
|
|
|
|
|
|
def req(url, ip, verify=True):
|
|
# Monkey patch to force IPv4 resolution
|
|
old_getaddrinfo = socket.getaddrinfo
|
|
def new_getaddrinfo(*args, **kwargs):
|
|
ret = old_getaddrinfo(*args, **kwargs)
|
|
dns = list(ret[0])
|
|
dns[-1] = (ip, dns[-1][1])
|
|
return [dns]
|
|
socket.getaddrinfo = new_getaddrinfo
|
|
if not verify:
|
|
with warnings.catch_warnings():
|
|
warnings.simplefilter("ignore")
|
|
ret = get(url, verify=verify)
|
|
else:
|
|
ret = get(url, verify=verify)
|
|
ret_code = ret.status_code
|
|
content = ret.content
|
|
socket.getaddrinfo = old_getaddrinfo
|
|
return ret_code, content.decode()
|
|
|
|
|
|
def test_revprox():
|
|
conf_file = f'{environ["MACHINE_TEST_DIR"]}/reverse-proxy.yml'
|
|
with open(conf_file) as yaml:
|
|
data = load(yaml, Loader=SafeLoader)
|
|
# test unknown domain
|
|
url = 'google.fr'
|
|
ret_code, content = req(f'https://{url}', data['address'], verify=False)
|
|
assert ret_code == 200, f'https://{url} do not returns code 200 but {ret_code}'
|
|
assert "<title>Test Page for the HTTP Server on Fedora</title>" in content, f'https://{url} returns default fedora page'
|
|
# test certificate
|
|
try:
|
|
req(f'https://{url}', data['address'])
|
|
raise Exception(f'not certificat problem for https://{url}')
|
|
except SSLError:
|
|
pass
|
|
# test known domains
|
|
for url in data['urls']:
|
|
ret_code, content = req(f'https://{url}', data['address'])
|
|
assert ret_code == 200, f'https://{url} do not returns code 200 but {ret_code}'
|
|
assert "<title>Test Page for the HTTP Server on Fedora</title>" not in content, f'https://{url} returns default fedora page'
|