|
@ -25,13 +25,16 @@ def testArgParse(rawArgs: list) -> argparse.Namespace: |
|
|
testParser.add_argument('PROTOCOL', type = str, help = 'test protocol name') |
|
|
testParser.add_argument('PROTOCOL', type = str, help = 'test protocol name') |
|
|
testParser.add_argument('-a', '--all', help = 'test extra shadowsocks items', action = 'store_true') |
|
|
testParser.add_argument('-a', '--all', help = 'test extra shadowsocks items', action = 'store_true') |
|
|
testParser.add_argument('-6', '--ipv6', help = 'test on ipv6 network', action = 'store_true') |
|
|
testParser.add_argument('-6', '--ipv6', help = 'test on ipv6 network', action = 'store_true') |
|
|
|
|
|
testParser.add_argument('--debug', help = 'enable debug log level', action = 'store_true') |
|
|
testParser.add_argument('--url', type = str, default = 'http://baidu.com', help = 'http request url') |
|
|
testParser.add_argument('--url', type = str, default = 'http://baidu.com', help = 'http request url') |
|
|
testParser.add_argument('--cert', type = str, help = 'specify the certificate id') |
|
|
testParser.add_argument('--cert', type = str, default = '', help = 'specify the certificate id') |
|
|
testParser.add_argument('--thread', type = int, default = 16, help = 'thread number in check process') |
|
|
testParser.add_argument('--thread', type = int, default = 16, help = 'thread number in check process') |
|
|
testParser.add_argument('--select', type = str, nargs = '+', help = 'select id list for test') |
|
|
testParser.add_argument('--select', type = str, nargs = '+', help = 'select id list for test') |
|
|
return testParser.parse_args(rawArgs) |
|
|
return testParser.parse_args(rawArgs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
testArgs = None |
|
|
|
|
|
testMode = False |
|
|
inputArgs = copy.copy(sys.argv) |
|
|
inputArgs = copy.copy(sys.argv) |
|
|
if len(inputArgs) >= 0: # remove first arg (normally file name) |
|
|
if len(inputArgs) >= 0: # remove first arg (normally file name) |
|
|
inputArgs.pop(0) |
|
|
inputArgs.pop(0) |
|
@ -40,9 +43,8 @@ if len(inputArgs) != 0 and inputArgs[0].lower() == 'test': # test mode |
|
|
if len(inputArgs) == 0 or inputArgs[0].startswith('-'): # no protocol is specified |
|
|
if len(inputArgs) == 0 or inputArgs[0].startswith('-'): # no protocol is specified |
|
|
inputArgs = ['all'] + inputArgs |
|
|
inputArgs = ['all'] + inputArgs |
|
|
testArgs = testArgParse(inputArgs) |
|
|
testArgs = testArgParse(inputArgs) |
|
|
print(testArgs) |
|
|
Constant.LogLevel = 'debug' if testArgs.debug else 'warning' |
|
|
sys.exit(1) |
|
|
testMode = True |
|
|
# TODO: start test process |
|
|
|
|
|
else: |
|
|
else: |
|
|
mainArgs = mainArgParse(inputArgs) |
|
|
mainArgs = mainArgParse(inputArgs) |
|
|
if mainArgs.version: # output version and exit |
|
|
if mainArgs.version: # output version and exit |
|
@ -53,10 +55,12 @@ else: |
|
|
Constant.ApiToken = mainArgs.token |
|
|
Constant.ApiToken = mainArgs.token |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from Tester import testEntry |
|
|
from Basis.Check import Check |
|
|
from Basis.Check import Check |
|
|
from Basis import Api, DnsProxy |
|
|
from Basis import Api, DnsProxy |
|
|
from Basis.Logger import logging |
|
|
from Basis.Logger import logging |
|
|
from Basis.Manager import Manager |
|
|
from Basis.Manager import Manager |
|
|
|
|
|
from Basis.Test import Test, loadBind, loadCert |
|
|
from concurrent.futures import ThreadPoolExecutor |
|
|
from concurrent.futures import ThreadPoolExecutor |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -84,6 +88,28 @@ def loop(threadNum: int = 16) -> None: |
|
|
threadPool.submit(runCheck, taskId, taskInfo) # submit into thread pool |
|
|
threadPool.submit(runCheck, taskId, taskInfo) # submit into thread pool |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if testMode: # test mode |
|
|
|
|
|
loadBind(serverV6 = testArgs.ipv6, clientV6 = testArgs.ipv6) # ipv4 / ipv6 (127.0.0.1 / ::1) |
|
|
|
|
|
loadCert(certId = testArgs.cert) # cert config |
|
|
|
|
|
logging.critical('TEST ITEM: %s' % testArgs.PROTOCOL) |
|
|
|
|
|
logging.critical('SELECT: ' + str(testArgs.select)) |
|
|
|
|
|
logging.critical('URL: %s' % testArgs.url) |
|
|
|
|
|
logging.critical('THREAD NUMBER: %i' % testArgs.thread) |
|
|
|
|
|
logging.critical('-' * 32 + ' TEST START ' + '-' * 32) |
|
|
|
|
|
if testArgs.PROTOCOL == 'all': # run all test items |
|
|
|
|
|
for item in testEntry: |
|
|
|
|
|
if item == ('ss' if testArgs.all else 'ss-all'): # skip ss / ss-all |
|
|
|
|
|
continue |
|
|
|
|
|
logging.critical('TEST ITEM -> ' + item) |
|
|
|
|
|
Test(testEntry[item], testArgs.thread, testArgs.url, testArgs.select) |
|
|
|
|
|
else: # run single item |
|
|
|
|
|
if testArgs.PROTOCOL == 'ss' and testArgs.all: # test shadowsocks extra items |
|
|
|
|
|
testItem = 'ss-all' |
|
|
|
|
|
Test(testEntry[testArgs.PROTOCOL], testArgs.thread, testArgs.url, testArgs.select) |
|
|
|
|
|
logging.critical('-' * 32 + ' TEST COMPLETE ' + '-' * 32) |
|
|
|
|
|
sys.exit(0) # test complete |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logging.warning('ProxyC starts running (%s)' % Constant.Version) |
|
|
logging.warning('ProxyC starts running (%s)' % Constant.Version) |
|
|
_thread.start_new_thread(pythonCompile, ('/usr',)) # python compile (generate .pyc file) |
|
|
_thread.start_new_thread(pythonCompile, ('/usr',)) # python compile (generate .pyc file) |
|
|
_thread.start_new_thread(DnsProxy.start, (Constant.DnsServer, 53)) # start dns server |
|
|
_thread.start_new_thread(DnsProxy.start, (Constant.DnsServer, 53)) # start dns server |
|
|