From 1d5618e264ab848d6bef2273dd82926c48284e19 Mon Sep 17 00:00:00 2001 From: dnomd343 Date: Sun, 7 Aug 2022 21:12:15 +0800 Subject: [PATCH] update: finish test sub command --- Basis/Constant.py | 3 ++- Basis/Test.py | 6 +++--- main.py | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Basis/Constant.py b/Basis/Constant.py index 971509a..4175aa0 100644 --- a/Basis/Constant.py +++ b/Basis/Constant.py @@ -15,7 +15,8 @@ LogFile = 'runtime.log' DnsServer = [] WorkDir = '/tmp/ProxyC' -ObfsSite = 'www.bing.com' +TestHost = 'proxyc.net' +TestSite = 'www.bing.com' PathEnv = '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin' # Shadowsocks Info diff --git a/Basis/Test.py b/Basis/Test.py index 83f4523..2cb96cb 100644 --- a/Basis/Test.py +++ b/Basis/Test.py @@ -6,12 +6,12 @@ import time import requests from threading import Thread from Basis.Logger import logging -from Basis.Constant import WorkDir, ObfsSite +from Basis.Constant import WorkDir, TestHost, TestSite from Basis.Functions import md5Sum, genFlag, hostFormat, checkPortStatus Settings = { 'workDir': WorkDir, - 'site': ObfsSite, + 'site': TestSite, 'serverBind': '', 'clientBind': '', 'host': '', @@ -56,7 +56,7 @@ def genCert(host: str, certInfo: dict, remark: str = 'ProxyC') -> None: # gener os.system('cat %s >> /etc/ssl/certs/ca-certificates.crt' % certInfo['caCert']) # add into system's trust list -def loadCert(host: str = 'proxyc.net', certId: str = '') -> None: # load certificate +def loadCert(host: str = TestHost, certId: str = '') -> None: # load certificate newCert = (certId == '') certId = genFlag(length = 8) if certId == '' else certId certInfo = { diff --git a/main.py b/main.py index b652388..2729378 100755 --- a/main.py +++ b/main.py @@ -25,13 +25,16 @@ def testArgParse(rawArgs: list) -> argparse.Namespace: 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('-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('--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('--select', type = str, nargs = '+', help = 'select id list for test') return testParser.parse_args(rawArgs) +testArgs = None +testMode = False inputArgs = copy.copy(sys.argv) if len(inputArgs) >= 0: # remove first arg (normally file name) 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 inputArgs = ['all'] + inputArgs testArgs = testArgParse(inputArgs) - print(testArgs) - sys.exit(1) - # TODO: start test process + Constant.LogLevel = 'debug' if testArgs.debug else 'warning' + testMode = True else: mainArgs = mainArgParse(inputArgs) if mainArgs.version: # output version and exit @@ -53,10 +55,12 @@ else: Constant.ApiToken = mainArgs.token +from Tester import testEntry from Basis.Check import Check from Basis import Api, DnsProxy from Basis.Logger import logging from Basis.Manager import Manager +from Basis.Test import Test, loadBind, loadCert from concurrent.futures import ThreadPoolExecutor @@ -84,6 +88,28 @@ def loop(threadNum: int = 16) -> None: 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) _thread.start_new_thread(pythonCompile, ('/usr',)) # python compile (generate .pyc file) _thread.start_new_thread(DnsProxy.start, (Constant.DnsServer, 53)) # start dns server