1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/xmlrpc/webrick_testing.rb
akr 5ab3fe5fb5 * test/xmlrpc: Refine log test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-09 09:36:33 +00:00

55 lines
1.2 KiB
Ruby

require 'timeout'
module TestXMLRPC
module WEBrick_Testing
def start_server(logger, config={})
raise "already started" if defined?(@__server) && @__server
@__started = false
@__server = WEBrick::HTTPServer.new(
{
:BindAddress => "localhost",
:Logger => logger,
:AccessLog => [],
}.update(config))
yield @__server
@__started = true
addr = @__server.listeners.first.connect_address
@__server_thread = Thread.new {
begin
@__server.start
rescue IOError => e
assert_match(/closed/, e.message)
ensure
@__started = false
end
}
addr
end
def with_server(config, servlet)
log = []
logger = WEBrick::Log.new(log, WEBrick::BasicLog::WARN)
addr = start_server(logger, config) {|w|
servlet = servlet.call(w) if servlet.respond_to? :call
w.mount('/RPC2', servlet)
}
client_thread = Thread.new {
begin
yield addr
ensure
@__server.shutdown
end
}
server_thread = Thread.new {
@__server_thread.join
@__server = nil
assert_equal([], log)
}
assert_join_threads([client_thread, server_thread])
end
end
end