about summary refs log tree commit homepage
path: root/test/server_helper.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-10-18 10:28:18 +0000
committerEric Wong <normalperson@yhbt.net>2013-10-18 10:28:18 +0000
commitab067831e707b191d6dfdcd01de1f1d85fc90d05 (patch)
treeb02861eb1521fb325ee4e1d91e1a194ca73e7a9e /test/server_helper.rb
downloadyahns-ab067831e707b191d6dfdcd01de1f1d85fc90d05.tar.gz
Diffstat (limited to 'test/server_helper.rb')
-rw-r--r--test/server_helper.rb64
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