From c178815ef6496d3d2dfe83b77a0332138a4ae1ee Mon Sep 17 00:00:00 2001 From: Ian Ownbey Date: Mon, 1 Dec 2008 00:50:24 -0500 Subject: Got tests working with rack --- lib/mongrel/http_response.rb | 2 +- test/unit/test_handlers.rb | 136 ------------------------------------- test/unit/test_redirect_handler.rb | 45 ------------ test/unit/test_response.rb | 74 ++------------------ 4 files changed, 5 insertions(+), 252 deletions(-) delete mode 100644 test/unit/test_handlers.rb delete mode 100644 test/unit/test_redirect_handler.rb diff --git a/lib/mongrel/http_response.rb b/lib/mongrel/http_response.rb index bda2ed3..811570b 100644 --- a/lib/mongrel/http_response.rb +++ b/lib/mongrel/http_response.rb @@ -87,7 +87,7 @@ module Mongrel def send_status(content_length=@body.length) if not @status_sent @header['Content-Length'] = content_length if content_length and @status != 304 - write(Const::STATUS_FORMAT % [@status, @reason || HTTP_STATUS_CODES[@status]]) + write(Const::STATUS_FORMAT % [@status, HTTP_STATUS_CODES[@status]]) @status_sent = true end end diff --git a/test/unit/test_handlers.rb b/test/unit/test_handlers.rb deleted file mode 100644 index 66bf010..0000000 --- a/test/unit/test_handlers.rb +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (c) 2005 Zed A. Shaw -# You can redistribute it and/or modify it under the same terms as Ruby. -# -# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html -# for more information. - -require 'test/test_helper' - -class SimpleHandler < Mongrel::HttpHandler - def process(request, response) - response.start do |head,out| - head["Content-Type"] = "text/html" - results = "Your request:
#{request.params.to_yaml}
View the files." - out << results - end - end -end - -class DumbHandler < Mongrel::HttpHandler - def process(request, response) - response.start do |head,out| - head["Content-Type"] = "text/html" - out.write("test") - end - end -end - -def check_status(results, expecting) - results.each do |res| - assert(res.kind_of?(expecting), "Didn't get #{expecting}, got: #{res.class}") - end -end - -class HandlersTest < Test::Unit::TestCase - - def setup - @port = process_based_port - stats = Mongrel::StatisticsFilter.new(:sample_rate => 1) - - @config = Mongrel::Configurator.new :host => '127.0.0.1' do - listener :port => process_based_port do - uri "/", :handler => SimpleHandler.new - uri "/", :handler => stats - uri "/404", :handler => Mongrel::Error404Handler.new("Not found") - uri "/dumb", :handler => Mongrel::DeflateFilter.new - uri "/dumb", :handler => DumbHandler.new, :in_front => true - uri "/files", :handler => Mongrel::DirHandler.new("doc") - uri "/files_nodir", :handler => Mongrel::DirHandler.new("doc", listing_allowed=false, index_html="none") - uri "/status", :handler => Mongrel::StatusHandler.new(:stats_filter => stats) - uri "/relative", :handler => Mongrel::DirHandler.new(nil, listing_allowed=false, index_html="none") - end - end - - unless windows? - File.open('/tmp/testfile', 'w') do - # Do nothing - end - end - - @config.run - end - - def teardown - @config.stop(false, true) - File.delete '/tmp/testfile' unless windows? - end - - def test_registration_exception_is_not_lost - assert_raises(Mongrel::URIClassifier::RegistrationError) do - @config = Mongrel::Configurator.new do - listener do - uri "bogus", :handler => SimpleHandler.new - end - end - end - end - - def test_more_web_server - res = hit([ "http://localhost:#{@port}/test", - "http://localhost:#{@port}/dumb", - "http://localhost:#{@port}/404", - "http://localhost:#{@port}/files/rdoc/index.html", - "http://localhost:#{@port}/files/rdoc/nothere.html", - "http://localhost:#{@port}/files/rdoc/", - "http://localhost:#{@port}/files_nodir/rdoc/", - "http://localhost:#{@port}/status", - ]) - check_status res, String - end - - def test_nil_dirhandler - return if windows? - # Camping uses this internally - handler = Mongrel::DirHandler.new(nil, false) - assert handler.can_serve("/tmp/testfile") - # Not a bug! A nil @file parameter is the only circumstance under which - # we are allowed to serve any existing file - assert handler.can_serve("../../../../../../../../../../tmp/testfile") - end - - def test_non_nil_dirhandler_is_not_vulnerable_to_path_traversal - # The famous security bug of Mongrel 1.1.2 - handler = Mongrel::DirHandler.new("/doc", false) - assert_nil handler.can_serve("/tmp/testfile") - assert_nil handler.can_serve("../../../../../../../../../../tmp/testfile") - end - - def test_deflate - Net::HTTP.start("localhost", @port) do |h| - # Test that no accept-encoding returns a non-deflated response - req = h.get("/dumb") - assert( - !req['Content-Encoding'] || - !req['Content-Encoding'].include?('deflate')) - assert_equal "test", req.body - - req = h.get("/dumb", {"Accept-Encoding" => "deflate"}) - # -MAX_WBITS stops zlib from looking for a zlib header - inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS) - assert req['Content-Encoding'].include?('deflate') - assert_equal "test", inflater.inflate(req.body) - end - end - - # TODO: find out why this fails on win32 but nowhere else - #def test_posting_fails_dirhandler - # req = Net::HTTP::Post.new("http://localhost:#{@port}/files/rdoc/") - # req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';') - # res = hit [["http://localhost:#{@port}/files/rdoc/",req]] - # check_status res, Net::HTTPNotFound - #end - - def test_unregister - @config.listeners["127.0.0.1:#{@port}"].unregister("/") - end -end diff --git a/test/unit/test_redirect_handler.rb b/test/unit/test_redirect_handler.rb deleted file mode 100644 index e990427..0000000 --- a/test/unit/test_redirect_handler.rb +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2005 Zed A. Shaw -# You can redistribute it and/or modify it under the same terms as Ruby. -# -# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html -# for more information. - -require 'test/test_helper' - -class RedirectHandlerTest < Test::Unit::TestCase - - def setup - @port = process_based_port - redirect_test_io do - @server = Mongrel::HttpServer.new('127.0.0.1', @port) - end - @server.run - @client = Net::HTTP.new('127.0.0.1', @port) - end - - def teardown - @server.stop(true) - end - - def test_simple_redirect - tester = Mongrel::RedirectHandler.new('/yo') - @server.register("/test", tester) - - sleep(1) - res = @client.request_get('/test') - assert res != nil, "Didn't get a response" - assert_equal ['/yo'], res.get_fields('Location') - end - - def test_rewrite - tester = Mongrel::RedirectHandler.new(/(\w+)/, '+\1+') - @server.register("/test", tester) - - sleep(1) - res = @client.request_get('/test/something') - assert_equal ['/+test+/+something+'], res.get_fields('Location') - end - -end - - diff --git a/test/unit/test_response.rb b/test/unit/test_response.rb index b49c9df..769b0d6 100644 --- a/test/unit/test_response.rb +++ b/test/unit/test_response.rb @@ -12,11 +12,7 @@ class ResponseTest < Test::Unit::TestCase def test_response_headers out = StringIO.new - resp = HttpResponse.new(out) - resp.status = 200 - resp.header["Accept"] = "text/plain" - resp.header["X-Whatever"] = "stuff" - resp.body.write("test") + resp = HttpResponse.new(out,[200, {"X-Whatever" => "stuff"}, ["cool"]]) resp.finished assert out.length > 0, "output didn't have data" @@ -24,56 +20,7 @@ class ResponseTest < Test::Unit::TestCase def test_response_200 io = StringIO.new - resp = HttpResponse.new(io) - resp.start do |head,out| - head["Accept"] = "text/plain" - out.write("tested") - out.write("hello!") - end - - resp.finished - assert io.length > 0, "output didn't have data" - end - - def test_response_duplicate_header_squash - io = StringIO.new - resp = HttpResponse.new(io) - resp.start do |head,out| - head["Content-Length"] = 30 - head["Content-Length"] = 0 - end - - resp.finished - - assert_equal io.length, 95, "too much output" - end - - - def test_response_some_duplicates_allowed - allowed_duplicates = ["Set-Cookie", "Set-Cookie2", "Warning", "WWW-Authenticate"] - io = StringIO.new - resp = HttpResponse.new(io) - resp.start do |head,out| - allowed_duplicates.each do |dup| - 10.times do |i| - head[dup] = i - end - end - end - - resp.finished - - assert_equal io.length, 734, "wrong amount of output" - end - - def test_response_404 - io = StringIO.new - - resp = HttpResponse.new(io) - resp.start(404) do |head,out| - head['Accept'] = "text/plain" - out.write("NOT FOUND") - end + resp = HttpResponse.new(io, [200, {}, []]) resp.finished assert io.length > 0, "output didn't have data" @@ -101,24 +48,11 @@ class ResponseTest < Test::Unit::TestCase assert io.read[-contents.length..-1] == contents, "output doesn't end with file payload" end - def test_response_with_custom_reason - reason = "You made a bad request" - io = StringIO.new - resp = HttpResponse.new(io) - resp.start(400, false, reason) { |head,out| } - resp.finished - - io.rewind - assert_match(/.* #{reason}$/, io.readline.chomp, "wrong custom reason phrase") - end - def test_response_with_default_reason code = 400 io = StringIO.new - resp = HttpResponse.new(io) - resp.start(code) { |head,out| } - resp.finished - + resp = HttpResponse.new(io, [code, {}, []]) + resp.start io.rewind assert_match(/.* #{HTTP_STATUS_CODES[code]}$/, io.readline.chomp, "wrong default reason phrase") end -- cgit v1.2.3-24-ge0c7