diff --git a/tests/tests.py b/tests/tests.py new file mode 100644 index 0000000..076411a --- /dev/null +++ b/tests/tests.py @@ -0,0 +1,68 @@ +import glob +import logging +import os +import unittest +import subprocess +import requests +import dotenv +import time +import itertools + +dotenv.load_dotenv() + + +def get_ip(version=None): + """provider = 'https://%swtfismyip.com/text' + prefix = { + None: '', + 4: 'ipv4.', + 6: 'ipv6.' + }[version]""" + provider = 'https://%sipify.org' + prefix = { + None: 'api64.', + 4: 'api4.', + 6: 'api6.' + }[version] + result = requests.Session().get(provider % prefix).text.strip() + return result + + +def get_tool_path(): + default = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'target', '*', 'tun2proxy')) + default = default[0] if len(default) > 0 else 'tun2proxy' + return os.environ.get('TOOL_PATH', default) + + +def start_process(*args): + pass + + +class Tun2ProxyTest(unittest.TestCase): + @staticmethod + def _test(ip_version, dns, proxy_var): + ip_noproxy = get_ip(ip_version) + print(ip_noproxy) + additional = ['-6'] if ip_version == 6 else [] + p = subprocess.Popen([get_tool_path(), "--proxy", os.getenv(proxy_var), '--setup', '-v', 'trace', '--dns', dns, *additional]) + try: + time.sleep(1) + ip_withproxy = get_ip(ip_version) + print(ip_withproxy) + + assert ip_noproxy != ip_withproxy + except Exception as e: + raise e + finally: + p.terminate() + p.wait() + + @classmethod + def add_tests(cls): + for ip_version, dns, proxy_var in itertools.product([None, 4, 6], ['virtual', 'over-tcp'], ['SOCKS5_PROXY', 'HTTP_PROXY']): + setattr(cls, 'test_ipv%s_dns%s_proxy%s' % (ip_version, dns, proxy_var), lambda self: cls._test(ip_version, dns, proxy_var)) + + +if __name__ == '__main__': + Tun2ProxyTest.add_tests() + unittest.main()