#!/usr/bin/env python3 # -*- coding: utf-8 -*- import time import requests from threading import Thread from Tester import Shadowsocks from Basis.Logger import logging testDelay = 1 # wait 1s before request test threadNum = 128 # thread number def test(testObj: dict) -> None: logging.warning(testObj['title']) testObj['client'].start() testObj['server'].start() time.sleep(testDelay) errFlag = False try: request = requests.get( 'http://iserv.scutbot.cn', proxies = { 'http': 'socks5://127.0.0.1:%i' % testObj['socks']['port'], 'https': 'socks5://127.0.0.1:%i' % testObj['socks']['port'], }, timeout = 10 ) request.raise_for_status() logging.info('socks5 127.0.0.1:%i -> ok' % testObj['socks']['port']) except Exception as exp: logging.error('socks5 127.0.0.1:%i -> error' % testObj['socks']['port']) logging.error('requests exception\n' + str(exp)) errFlag = True testObj['client'].quit() testObj['server'].quit() if errFlag: logging.warning('client info') logging.error('command -> %s' % testObj['client'].cmd) logging.error('envVar -> %s' % testObj['client'].env) logging.error('file -> %s' % testObj['client'].file) logging.warning('client capture output') logging.error('\n' + str(testObj['client'].output)) logging.warning('server info') logging.error('command -> %s' % testObj['server'].cmd) logging.error('envVar -> %s' % testObj['server'].env) logging.error('file -> %s' % testObj['server'].file) logging.warning('server capture output') logging.error('\n' + str(testObj['server'].output)) threads = [] ss = Shadowsocks.load(isExtra = True) while True: try: for i in range(threadNum): thread = Thread(target = test, args = (next(ss),)) thread.start() threads.append(thread) for thread in threads: thread.join() threads.clear() except StopIteration: break for thread in threads: thread.join() logging.critical('test complete')