From 61fcbb1cd6947a21d92c109991451bfb4a3f5e20 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 18 Jun 2009 14:36:30 +0200 Subject: [PATCH] Add benchmark dir with ruby script --- http_simple.js => benchmark/http_simple.js | 0 benchmark/http_simple.rb | 95 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) rename http_simple.js => benchmark/http_simple.js (100%) create mode 100644 benchmark/http_simple.rb diff --git a/http_simple.js b/benchmark/http_simple.js similarity index 100% rename from http_simple.js rename to benchmark/http_simple.js diff --git a/benchmark/http_simple.rb b/benchmark/http_simple.rb new file mode 100644 index 0000000000..ee33f57f1d --- /dev/null +++ b/benchmark/http_simple.rb @@ -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