summaryrefslogtreecommitdiff
path: root/test/webrick
diff options
context:
space:
mode:
Diffstat (limited to 'test/webrick')
-rw-r--r--test/webrick/test_server.rb26
-rw-r--r--test/webrick/utils.rb7
2 files changed, 29 insertions, 4 deletions
diff --git a/test/webrick/test_server.rb b/test/webrick/test_server.rb
index e00449692b..534fe9b077 100644
--- a/test/webrick/test_server.rb
+++ b/test/webrick/test_server.rb
@@ -23,6 +23,32 @@ class TestWEBrickServer < Test::Unit::TestCase
}
end
+ def test_start_exception
+ stopped = 0
+ config = {
+ :StopCallback => Proc.new{ stopped += 1 },
+ }
+
+ e = assert_raises(Exception) do
+ TestWEBrick.start_server(Echo, config) { |server, addr, port, log|
+ listener = server.listeners.first
+
+ def listener.accept
+ raise Exception, 'fatal' # simulate ^C
+ end
+
+ true while server.status != :Running
+
+ TCPSocket.open(addr, port) { |sock| sock << "foo\n" }
+
+ sleep 0.1 until server.status == :Stop
+ }
+ end
+
+ assert_equal('fatal', e.message)
+ assert_equal(stopped, 1)
+ end
+
def test_callbacks
accepted = started = stopped = 0
config = {
diff --git a/test/webrick/utils.rb b/test/webrick/utils.rb
index ef4654cafd..15852ca47d 100644
--- a/test/webrick/utils.rb
+++ b/test/webrick/utils.rb
@@ -36,14 +36,13 @@ module TestWEBrick
:AccessLog => [[logger, ""]]
}.update(config))
begin
- server.start
+ server_thread = server.start
addr = server.listeners[0].addr
block.yield([server, addr[3], addr[1], log])
ensure
server.shutdown
- until server.status == :Stop
- sleep 0.1
- end
+
+ server_thread.join
end
log_string
end