ruby/test/xmlrpc/webrick_testing.rb

56 строки
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