From ab067831e707b191d6dfdcd01de1f1d85fc90d05 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 18 Oct 2013 10:28:18 +0000 Subject: initial commit --- test/server_helper.rb | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/server_helper.rb (limited to 'test/server_helper.rb') 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 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 -- cgit v1.2.3-24-ge0c7