tun2proxy/tests/tests.py

69 lines
1.8 KiB
Python
Raw Normal View History

2024-04-18 22:20:05 +02:00
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()