diff options
Diffstat (limited to 'Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py')
-rwxr-xr-x | Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py b/Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py new file mode 100755 index 0000000..f42df09 --- /dev/null +++ b/Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +import sys, os, socket, select, struct, time + +listener = socket.socket() +listener.bind(('127.0.0.1', 0)) +listener.listen(500) + +servers = [] +clients = [] +remain = {} + +NUMCLIENTS = 50 +count = 0 + + +while 1: + if len(clients) < NUMCLIENTS: + c = socket.socket() + c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + c.bind(('0.0.0.0', 0)) + c.connect(listener.getsockname()) + count += 1 + if count >= 16384: + count = 1 + print 'cli CREATING %d' % count + b = struct.pack('I', count) + 'x'*count + remain[c] = count + print 'cli >> %r' % len(b) + c.send(b) + c.shutdown(socket.SHUT_WR) + clients.append(c) + r = [listener] + time.sleep(0.1) + else: + r = [listener]+servers+clients + print 'select(%d)' % len(r) + r,w,x = select.select(r, [], [], 5) + assert(r) + for i in r: + if i == listener: + s,addr = listener.accept() + servers.append(s) + elif i in servers: + b = i.recv(4096) + print 'srv << %r' % len(b) + if not i in remain: + assert(len(b) >= 4) + want = struct.unpack('I', b[:4])[0] + b = b[4:] + #i.send('y'*want) + else: + want = remain[i] + if want < len(b): + print 'weird wanted %d bytes, got %d: %r' % (want, len(b), b) + assert(want >= len(b)) + want -= len(b) + remain[i] = want + if not b: # EOF + if want: + print 'weird: eof but wanted %d more' % want + assert(want == 0) + i.close() + servers.remove(i) + del remain[i] + else: + print 'srv >> %r' % len(b) + i.send('y'*len(b)) + if not want: + i.shutdown(socket.SHUT_WR) + elif i in clients: + b = i.recv(4096) + print 'cli << %r' % len(b) + want = remain[i] + if want < len(b): + print 'weird wanted %d bytes, got %d: %r' % (want, len(b), b) + assert(want >= len(b)) + want -= len(b) + remain[i] = want + if not b: # EOF + if want: + print 'weird: eof but wanted %d more' % want + assert(want == 0) + i.close() + clients.remove(i) + del remain[i] +listener.accept() |