summaryrefslogtreecommitdiffstats
path: root/Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py
diff options
context:
space:
mode:
Diffstat (limited to 'Sshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py')
-rwxr-xr-xSshuttle VPN.app/Contents/Resources/sshuttle/stresstest.py86
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()