| 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 |