From 742bbbb01b310440a7672fabddd016226d20bee7 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 8 Nov 2014 15:38:33 +0000 Subject: [PATCH] * test/webrick: Examine log and use assert_join_threads. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ test/webrick/test_httpauth.rb | 18 ++++++++++++++++-- test/webrick/test_httpresponse.rb | 6 ++++++ test/webrick/test_httpserver.rb | 13 ++++++++++--- test/webrick/test_server.rb | 30 ++++++++++++++++-------------- test/webrick/utils.rb | 22 +++++++++++++--------- 6 files changed, 65 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d946cc9a5..18d64f1ca1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sun Nov 9 00:37:44 2014 Tanaka Akira + + * test/webrick: Examine log and use assert_join_threads. + Fri Nov 7 00:00:12 2014 Nobuyoshi Nakada * template/unicode_norm_gen.tmpl: expand kompatible_table so that diff --git a/test/webrick/test_httpauth.rb b/test/webrick/test_httpauth.rb index 6668e1bacf..b0cb8a05bf 100644 --- a/test/webrick/test_httpauth.rb +++ b/test/webrick/test_httpauth.rb @@ -27,7 +27,7 @@ class TestWEBrickHTTPAuth < Test::Unit::TestCase end def test_basic_auth2 - TestWEBrick.start_httpserver{|server, addr, port, log| + log = TestWEBrick.start_httpserver{|server, addr, port, log| realm = "WEBrick's realm" path = "/basic_auth2" @@ -61,6 +61,11 @@ class TestWEBrickHTTPAuth < Test::Unit::TestCase http.request(g){|res| assert_not_equal("hoge", res.body, log.call)} } } + pat = /ERROR Basic WEBrick's realm: webrick: password unmatch\./ + assert_match(pat, log); log.sub!(pat, '') + pat = /ERROR WEBrick::HTTPStatus::Unauthorized/ + assert_match(pat, log); log.sub!(pat, '') + assert_not_match(/ERROR/, log) end def test_basic_auth3 @@ -92,7 +97,7 @@ class TestWEBrickHTTPAuth < Test::Unit::TestCase )/x def test_digest_auth - TestWEBrick.start_httpserver{|server, addr, port, log| + log = TestWEBrick.start_httpserver{|server, addr, port, log| realm = "WEBrick's realm" path = "/digest_auth" @@ -143,6 +148,15 @@ class TestWEBrickHTTPAuth < Test::Unit::TestCase end } } + pat = /ERROR Digest WEBrick's realm: no credentials in the request\./ + assert_match(pat, log); log.sub!(pat, '') + pat = /ERROR WEBrick::HTTPStatus::Unauthorized/ + assert_match(pat, log); log.sub!(pat, '') + pat = /ERROR Digest WEBrick's realm: webrick: digest unmatch\./ + assert_match(pat, log); log.sub!(pat, '') + pat = /ERROR WEBrick::HTTPStatus::Unauthorized/ + assert_match(pat, log); log.sub!(pat, '') + assert_not_match(/ERROR/, log) end private diff --git a/test/webrick/test_httpresponse.rb b/test/webrick/test_httpresponse.rb index 1f85a920ca..c916ed57c2 100644 --- a/test/webrick/test_httpresponse.rb +++ b/test/webrick/test_httpresponse.rb @@ -63,6 +63,7 @@ module WEBrick assert_equal 'hello', r.read } } + assert_equal 0, logger.messages.length end def test_send_body_string @@ -75,6 +76,7 @@ module WEBrick assert_equal 'hello', r.read } + assert_equal 0, logger.messages.length end def test_send_body_string_io @@ -87,6 +89,7 @@ module WEBrick assert_equal 'hello', r.read } + assert_equal 0, logger.messages.length end def test_send_body_io_chunked @@ -108,6 +111,7 @@ module WEBrick assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read } } + assert_equal 0, logger.messages.length end def test_send_body_string_chunked @@ -123,6 +127,7 @@ module WEBrick r.binmode assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read } + assert_equal 0, logger.messages.length end def test_send_body_string_io_chunked @@ -138,6 +143,7 @@ module WEBrick r.binmode assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read } + assert_equal 0, logger.messages.length end end end diff --git a/test/webrick/test_httpserver.rb b/test/webrick/test_httpserver.rb index 3e19a56d8f..70ad302549 100644 --- a/test/webrick/test_httpserver.rb +++ b/test/webrick/test_httpserver.rb @@ -4,9 +4,16 @@ require "webrick" require_relative "utils" class TestWEBrickHTTPServer < Test::Unit::TestCase + empty_log = Object.new + def empty_log.<<(str) + assert_equal('', str) + self + end + NoLog = WEBrick::Log.new(empty_log, WEBrick::BasicLog::WARN) + def test_mount httpd = WEBrick::HTTPServer.new( - :Logger => WEBrick::Log.new(TestWEBrick::NullWriter), + :Logger => NoLog, :DoNotListen=>true ) httpd.mount("/", :Root) @@ -75,7 +82,7 @@ class TestWEBrickHTTPServer < Test::Unit::TestCase def httpd(addr, port, host, ali) config ={ - :Logger => WEBrick::Log.new(TestWEBrick::NullWriter), + :Logger => NoLog, :DoNotListen => true, :BindAddress => addr, :Port => port, @@ -229,7 +236,7 @@ class TestWEBrickHTTPServer < Test::Unit::TestCase :BindAddress => addr, :Port => port, :DoNotListen => true, - :Logger => WEBrick::Log.new(TestWEBrick::NullWriter), + :Logger => NoLog, :AccessLog => [], :RequestCallback => Proc.new{|req, res| requested1 += 1 }, } diff --git a/test/webrick/test_server.rb b/test/webrick/test_server.rb index 3f849a459c..40afdb050e 100644 --- a/test/webrick/test_server.rb +++ b/test/webrick/test_server.rb @@ -25,27 +25,29 @@ class TestWEBrickServer < Test::Unit::TestCase def test_start_exception stopped = 0 - config = { - :StopCallback => Proc.new{ stopped += 1 }, - } + + log = StringIO.new('') + logger = WEBrick::Log.new(log, WEBrick::BasicLog::WARN) assert_raises(SignalException) do - TestWEBrick.start_server(Echo, config) { |server, addr, port, log| - listener = server.listeners.first + listener = Object.new + def listener.to_io # IO.select invokes #to_io. + raise SignalException, 'SIGTERM' # simulate signal in main thread + end - def listener.accept - raise SignalException, 'SIGTERM' # simulate signal in main thread - end + server = WEBrick::HTTPServer.new({ + :BindAddress => "127.0.0.1", :Port => 0, + :StopCallback => Proc.new{ stopped += 1 }, + :Logger => logger, + }) + server.listeners[0].close + server.listeners[0] = listener - Thread.pass while server.status != :Running - - TCPSocket.open(addr, port) { |sock| sock << "foo\n" } - - Thread.pass until server.status == :Stop - } + server.start end assert_equal(stopped, 1) + assert_match(/FATAL SignalException: SIGTERM/, log.string) end def test_callbacks diff --git a/test/webrick/utils.rb b/test/webrick/utils.rb index f1b24ccdd6..667ae737bb 100644 --- a/test/webrick/utils.rb +++ b/test/webrick/utils.rb @@ -26,6 +26,9 @@ module TestWEBrick RubyBin << " \"-I#{File.dirname(EnvUtil.rubybin)}/.ext/common\"" RubyBin << " \"-I#{File.dirname(EnvUtil.rubybin)}/.ext/#{RUBY_PLATFORM}\"" + include Test::Unit::Assertions + extend Test::Unit::Assertions + module_function def start_server(klass, config={}, &block) @@ -41,15 +44,16 @@ module TestWEBrick :Logger => WEBrick::Log.new(logger), :AccessLog => [[logger, ""]] }.update(config)) - begin - server_thread = server.start - addr = server.listeners[0].addr - block.yield([server, addr[3], addr[1], log]) - ensure - server.shutdown - - server_thread.join - end + server_thread = server.start + addr = server.listeners[0].addr + client_thread = Thread.new { + begin + block.yield([server, addr[3], addr[1], log]) + ensure + server.shutdown + end + } + assert_join_threads([client_thread, server_thread]) log_string end