def test_fail_return(): test_str = """ function FindProxyForURL(domain, host) { return null; } """ res = pac.PACResolver(test_str) with pytest.raises(pac.EvalProxyError): res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test")))
def test_fail_parse(value): test_str_f = """ function FindProxyForURL(domain, host) {{ return "{}"; }} """ res = pac.PACResolver(test_str_f.format(value)) with pytest.raises(pac.ParseProxyError): res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test")))
def test_invalid_port(): test_str = """ function FindProxyForURL(domain, host) { return "PROXY 127.0.0.1:FOO"; } """ res = pac.PACResolver(test_str) with pytest.raises(pac.ParseProxyError): res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test")))
def test_logging(qtlog): """Make sure console.log() works for PAC files.""" test_str = """ function FindProxyForURL(domain, host) { console.log("logging test"); return "DIRECT"; } """ res = pac.PACResolver(test_str) res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) assert len(qtlog.records) == 1 assert qtlog.records[0].message == 'logging test'
def _pac_common_test(test_str): fun_str_f = """ function FindProxyForURL(domain, host) {{ {} return "DIRECT; PROXY 127.0.0.1:8080; SOCKS 192.168.1.1:4444"; }} """ fun_str = fun_str_f.format(test_str) res = pac.PACResolver(fun_str) proxies = res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) assert len(proxies) == 3 assert proxies[0].type() == QNetworkProxy.NoProxy assert proxies[1].type() == QNetworkProxy.HttpProxy assert proxies[1].hostName() == "127.0.0.1" assert proxies[1].port() == 8080 assert proxies[2].type() == QNetworkProxy.Socks5Proxy assert proxies[2].hostName() == "192.168.1.1" assert proxies[2].port() == 4444
def test_secret_url(url, has_secret, from_file): """Make sure secret parts in a URL are stripped correctly. The following parts are considered secret: - If the PAC info is loaded from a local file, nothing. - If the URL to resolve is a HTTP URL, the username/password. - If the URL to resolve is a HTTPS URL, the username/password, query and path. """ test_str = """ function FindProxyForURL(domain, host) {{ has_secret = domain.indexOf("secret") !== -1; expected_secret = {}; if (has_secret !== expected_secret) {{ throw new Error("Expected secret: " + expected_secret + ", found: " + has_secret + " in " + domain); }} return "DIRECT"; }} """.format('true' if (has_secret or from_file) else 'false') res = pac.PACResolver(test_str) res.resolve(QNetworkProxyQuery(QUrl(url)), from_file=from_file)
def test_wrong_pac_string(string): with pytest.raises(pac.EvalProxyError): pac.PACResolver(string)