* 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
This commit is contained in:
akr 2014-11-08 15:38:33 +00:00
Родитель 8222432c9d
Коммит 742bbbb01b
6 изменённых файлов: 65 добавлений и 28 удалений

Просмотреть файл

@ -1,3 +1,7 @@
Sun Nov 9 00:37:44 2014 Tanaka Akira <akr@fsij.org>
* test/webrick: Examine log and use assert_join_threads.
Fri Nov 7 00:00:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* template/unicode_norm_gen.tmpl: expand kompatible_table so that

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -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 },
}

Просмотреть файл

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

Просмотреть файл

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