about summary refs log tree commit homepage
path: root/test
diff options
context:
space:
mode:
authorevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2008-02-20 06:26:33 +0000
committerevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2008-02-20 06:26:33 +0000
commit41220d846bbe57c6b50c0a86c4f86030f6d14b05 (patch)
tree10051204cbed495b2e469079850c3b427bf5ae91 /test
parent5a10ba13b2c2f56b8ffb0978ebb36ff26a7715e5 (diff)
downloadunicorn-41220d846bbe57c6b50c0a86c4f86030f6d14b05.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/branches/stable_1-1@974 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'test')
-rw-r--r--test/tools/trickletest.rb45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/tools/trickletest.rb b/test/tools/trickletest.rb
new file mode 100644
index 0000000..e19ed71
--- /dev/null
+++ b/test/tools/trickletest.rb
@@ -0,0 +1,45 @@
+require 'socket'
+require 'stringio'
+
+def do_test(st, chunk)
+  s = TCPSocket.new('127.0.0.1',ARGV[0].to_i);
+  req = StringIO.new(st)
+  nout = 0
+  randstop = rand(st.length / 10)
+  STDERR.puts "stopping after: #{randstop}"
+
+  begin
+    while data = req.read(chunk)
+      nout += s.write(data)
+      s.flush
+      sleep 0.1
+      if nout > randstop
+        STDERR.puts "BANG! after #{nout} bytes."
+        break
+      end
+    end
+  rescue Object => e
+    STDERR.puts "ERROR: #{e}"
+  ensure
+    s.close
+  end
+end
+
+content = "-" * (1024 * 240)
+st = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\nContent-Length: #{content.length}\r\n\r\n#{content}"
+
+puts "length: #{content.length}"
+
+threads = []
+ARGV[1].to_i.times do
+  t = Thread.new do
+    size = 100
+    puts ">>>> #{size} sized chunks"
+    do_test(st, size)
+  end
+
+  t.abort_on_exception = true
+  threads << t
+end
+
+threads.each {|t|  t.join}