1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
# frozen_string_literal: false
require 'timeout'
# Backport of WEBrick::Utils::TimeoutHandler.terminate from Ruby 2.4.
unless WEBrick::Utils::TimeoutHandler.respond_to? :terminate
class WEBrick::Utils::TimeoutHandler
def self.terminate
instance.terminate
end
def terminate
TimeoutMutex.synchronize{
@timeout_info.clear
@watcher&.kill&.join
}
end
end
end
module TestXMLRPC
module WEBrick_Testing
def teardown
WEBrick::Utils::TimeoutHandler.terminate
super
end
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)
}
begin
yield addr
ensure
@__server.shutdown
end
@__server_thread.join
@__server = nil
assert_equal([], log)
end
end
end
|