diff options
Diffstat (limited to 'jni/ruby/test/xmlrpc/webrick_testing.rb')
-rw-r--r-- | jni/ruby/test/xmlrpc/webrick_testing.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/jni/ruby/test/xmlrpc/webrick_testing.rb b/jni/ruby/test/xmlrpc/webrick_testing.rb new file mode 100644 index 0000000..37c0b69 --- /dev/null +++ b/jni/ruby/test/xmlrpc/webrick_testing.rb @@ -0,0 +1,55 @@ +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 |