Skip to content

Commit a8ae8ab

Browse files
author
clowwindy
committed
add unit test for manager
1 parent 4f948b2 commit a8ae8ab

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

shadowsocks/manager.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,91 @@ def run(self):
181181

182182
def run(config):
183183
Manager(config).run()
184+
185+
186+
def test():
187+
import time
188+
import threading
189+
import os
190+
import struct
191+
from shadowsocks import encrypt
192+
193+
logging.basicConfig(level=logging.DEBUG,
194+
format='%(asctime)s %(levelname)-8s %(message)s',
195+
datefmt='%Y-%m-%d %H:%M:%S')
196+
enc = []
197+
198+
def run_server():
199+
config = {
200+
'server': '127.0.0.1',
201+
'local_port': 1081,
202+
'port_password': {
203+
'8381': 'foobar1',
204+
'8382': 'foobar2'
205+
},
206+
'method': 'aes-256-cfb',
207+
'manager_address': '127.0.0.1:6001',
208+
'timeout': 60,
209+
'fast_open': False,
210+
'verbose': 2
211+
}
212+
manager = Manager(config)
213+
enc.append(manager)
214+
manager.run()
215+
216+
t = threading.Thread(target=run_server).start()
217+
time.sleep(2)
218+
manager = enc[0]
219+
cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
220+
cli.connect(('127.0.0.1', 6001))
221+
222+
# test add and remove
223+
time.sleep(1)
224+
cli.send(b'add: {"server_port":7001, "password":"1234"}')
225+
time.sleep(1)
226+
assert 7001 in manager._relays
227+
cli.send(b'remove: {"server_port":8381}')
228+
time.sleep(1)
229+
assert 8381 not in manager._relays
230+
logging.info('add and remove test passed')
231+
232+
# test statistics for TCP
233+
header = common.pack_addr(b'google.com') + struct.pack('>H', 80)
234+
data = encrypt.encrypt_all(b'1234', 'aes-256-cfb', 1,
235+
header + b'GET /\r\n\r\n')
236+
tcp_cli = socket.socket()
237+
tcp_cli.connect(('127.0.0.1', 7001))
238+
tcp_cli.send(data)
239+
rdata = tcp_cli.recv(4096)
240+
tcp_cli.close()
241+
rdata = encrypt.encrypt_all(b'1234', 'aes-256-cfb', 0, rdata)
242+
243+
data, addr = cli.recvfrom(1506)
244+
data = common.to_str(data)
245+
assert data.startswith('stat: ')
246+
data = data.split('stat:')[1]
247+
stats = json.loads(data)
248+
assert '7001' in stats
249+
logging.info('TCP statistics test passed')
250+
251+
# test statistics for UDP
252+
header = common.pack_addr(b'127.0.0.1') + struct.pack('>H', 80)
253+
data = encrypt.encrypt_all(b'foobar2', 'aes-256-cfb', 1,
254+
header + b'test')
255+
udp_cli = socket.socket(type=socket.SOCK_DGRAM)
256+
udp_cli.sendto(data, ('127.0.0.1', 8382))
257+
tcp_cli.close()
258+
259+
data, addr = cli.recvfrom(1506)
260+
data = common.to_str(data)
261+
assert data.startswith('stat: ')
262+
data = data.split('stat:')[1]
263+
stats = json.loads(data)
264+
assert '8382' in stats
265+
logging.info('UDP statistics test passed')
266+
267+
os._exit(0)
268+
269+
270+
if __name__ == '__main__':
271+
test()

0 commit comments

Comments
 (0)