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 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} do returns default fedora page'