Permalink
Browse files

Add benchmark dir with ruby script

  • Loading branch information...
1 parent e30e441 commit 61fcbb1cd6947a21d92c109991451bfb4a3f5e20 @ry ry committed Jun 18, 2009
Showing with 95 additions and 0 deletions.
  1. 0 { → benchmark}/http_simple.js
  2. +95 −0 benchmark/http_simple.rb
File renamed without changes.
View
@@ -0,0 +1,95 @@
+DIR = File.dirname(__FILE__)
+
+def fib(n)
+ return 1 if n <= 1
+ fib(n-1) + fib(n-2)
+end
+
+def wait(seconds)
+ n = (seconds / 0.01).to_i
+ n.times do
+ sleep(0.01)
+ #File.read(DIR + '/yahoo.html')
+ end
+end
+
+class SimpleApp
+ @@responses = {}
+
+ def initialize
+ @count = 0
+ end
+
+ def deferred?(env)
+ false
+ end
+
+ def call(env)
+ path = env['PATH_INFO'] || env['REQUEST_URI']
+ commands = path.split('/')
+
+ @count += 1
+ if commands.include?('periodical_activity') and @count % 10 != 1
+ return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"]
+ end
+
+ if commands.include?('fibonacci')
+ n = commands.last.to_i
+ raise "fibonacci called with n <= 0" if n <= 0
+ body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ')
+ status = 200
+
+ elsif commands.include?('wait')
+ n = commands.last.to_f
+ raise "wait called with n <= 0" if n <= 0
+ wait(n)
+ body = "waited about #{n} seconds"
+ status = 200
+
+ elsif commands.include?('bytes')
+ n = commands.last.to_i
+ raise "bytes called with n <= 0" if n <= 0
+ body = @@responses[n] || "C"*n
+ status = 200
+
+ elsif commands.include?('fixed')
+ n = 20 * 1024;
+ body = @@responses[n] || "C"*n
+ status = 200
+
+ elsif commands.include?('test_post_length')
+ input_body = ""
+ while chunk = env['rack.input'].read(512)
+ input_body << chunk
+ end
+ if env['CONTENT_LENGTH'].to_i == input_body.length
+ body = "Content-Length matches input length"
+ status = 200
+ else
+ body = "Content-Length doesn't matches input length!
+ content_length = #{env['CONTENT_LENGTH'].to_i}
+ input_body.length = #{input_body.length}"
+ status = 500
+ end
+ else
+ status = 404
+ body = "Undefined url"
+ end
+
+ body += "\r\n"
+ headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }
+ [status, headers, [body]]
+ end
+end
+
+
+if $0 == __FILE__
+ #require DIR + '/../lib/ebb'
+ require 'rubygems'
+ require 'rack'
+ require 'thin'
+ require 'ebb'
+# Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000)
+ Thin::Server.start("0.0.0.0", 8000, SimpleApp.new)
+# Ebb::start_server(SimpleApp.new, :port => 8000)
+end

0 comments on commit 61fcbb1

Please sign in to comment.