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 "Test Page for the HTTP Server on Fedora" 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 "Test Page for the HTTP Server on Fedora" not in content, f'https://{url} returns default fedora page'