diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-10-18 10:28:18 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-10-18 10:28:18 +0000 |
commit | ab067831e707b191d6dfdcd01de1f1d85fc90d05 (patch) | |
tree | b02861eb1521fb325ee4e1d91e1a194ca73e7a9e /test/server_helper.rb | |
download | yahns-ab067831e707b191d6dfdcd01de1f1d85fc90d05.tar.gz |
Diffstat (limited to 'test/server_helper.rb')
-rw-r--r-- | test/server_helper.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/server_helper.rb b/test/server_helper.rb new file mode 100644 index 0000000..78d2f94 --- /dev/null +++ b/test/server_helper.rb @@ -0,0 +1,64 @@ +# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +require_relative 'helper' +require 'timeout' +require 'socket' +require 'net/http' + +module ServerHelper + def check_err(err = @err) + err = File.open(err.path, "r") if err.respond_to?(:path) + err.rewind + lines = err.readlines.delete_if { |l| l =~ /INFO/ } + assert lines.empty?, lines.join("\n") + err.close + end + + def poke_until_dead(pid) + Timeout.timeout(10) do + begin + Process.kill(0, pid) + sleep(0.01) + rescue Errno::ESRCH + break + end while true + end + assert_raises(Errno::ESRCH) { Process.kill(0, pid) } + end + + def quit_wait(pid) + pid or return + Process.kill(:QUIT, pid) + _, status = Timeout.timeout(10) { Process.waitpid2(pid) } + assert status.success?, status.inspect + rescue Timeout::Error + if RUBY_PLATFORM =~ /linux/ + system("lsof -p #{pid}") + warn "#{pid} failed to die, waiting for user to inspect" + sleep + end + raise + end + + def get_tcp_client(host, port, tries = 500) + begin + c = TCPSocket.new(host, port) + return c + rescue Errno::ECONNREFUSED + raise if tries < 0 + tries -= 1 + end while sleep(0.01) + end + + def server_helper_teardown + @srv.close unless @srv.closed? + @ru.close! if @ru + check_err + end + + def server_helper_setup + @srv = TCPServer.new(ENV["TEST_HOST"] || "127.0.0.1", 0) + @err = tmpfile(%w(srv .err)) + @ru = nil + end +end |