Skip to content

Commit 61fcbb1

Browse files
committed
Add benchmark dir with ruby script
1 parent e30e441 commit 61fcbb1

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
File renamed without changes.

benchmark/http_simple.rb

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
DIR = File.dirname(__FILE__)
2+
3+
def fib(n)
4+
return 1 if n <= 1
5+
fib(n-1) + fib(n-2)
6+
end
7+
8+
def wait(seconds)
9+
n = (seconds / 0.01).to_i
10+
n.times do
11+
sleep(0.01)
12+
#File.read(DIR + '/yahoo.html')
13+
end
14+
end
15+
16+
class SimpleApp
17+
@@responses = {}
18+
19+
def initialize
20+
@count = 0
21+
end
22+
23+
def deferred?(env)
24+
false
25+
end
26+
27+
def call(env)
28+
path = env['PATH_INFO'] || env['REQUEST_URI']
29+
commands = path.split('/')
30+
31+
@count += 1
32+
if commands.include?('periodical_activity') and @count % 10 != 1
33+
return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"]
34+
end
35+
36+
if commands.include?('fibonacci')
37+
n = commands.last.to_i
38+
raise "fibonacci called with n <= 0" if n <= 0
39+
body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ')
40+
status = 200
41+
42+
elsif commands.include?('wait')
43+
n = commands.last.to_f
44+
raise "wait called with n <= 0" if n <= 0
45+
wait(n)
46+
body = "waited about #{n} seconds"
47+
status = 200
48+
49+
elsif commands.include?('bytes')
50+
n = commands.last.to_i
51+
raise "bytes called with n <= 0" if n <= 0
52+
body = @@responses[n] || "C"*n
53+
status = 200
54+
55+
elsif commands.include?('fixed')
56+
n = 20 * 1024;
57+
body = @@responses[n] || "C"*n
58+
status = 200
59+
60+
elsif commands.include?('test_post_length')
61+
input_body = ""
62+
while chunk = env['rack.input'].read(512)
63+
input_body << chunk
64+
end
65+
if env['CONTENT_LENGTH'].to_i == input_body.length
66+
body = "Content-Length matches input length"
67+
status = 200
68+
else
69+
body = "Content-Length doesn't matches input length!
70+
content_length = #{env['CONTENT_LENGTH'].to_i}
71+
input_body.length = #{input_body.length}"
72+
status = 500
73+
end
74+
else
75+
status = 404
76+
body = "Undefined url"
77+
end
78+
79+
body += "\r\n"
80+
headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }
81+
[status, headers, [body]]
82+
end
83+
end
84+
85+
86+
if $0 == __FILE__
87+
#require DIR + '/../lib/ebb'
88+
require 'rubygems'
89+
require 'rack'
90+
require 'thin'
91+
require 'ebb'
92+
# Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000)
93+
Thin::Server.start("0.0.0.0", 8000, SimpleApp.new)
94+
# Ebb::start_server(SimpleApp.new, :port => 8000)
95+
end

0 commit comments

Comments
 (0)