From 0a6f03cde0a336597358668041fa8eb6f463bac5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 6 Apr 2017 05:15:29 +0000 Subject: allow omitting specifying socket name when inheriting listen socket Since the common case is still to run a single app inside yahns, we can simplify setup a bit for systemd (and like) users by allowing them to omit the "listen" directive when they are running a single app in yahns. --- test/test_bin.rb | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) (limited to 'test') diff --git a/test/test_bin.rb b/test/test_bin.rb index 579e39c..e59c9b4 100644 --- a/test/test_bin.rb +++ b/test/test_bin.rb @@ -14,35 +14,36 @@ class TestBin < Testcase def test_listen_fd3 return unless RUBY_VERSION.to_f > 2.3 # Fixed in ruby/trunk r51209, actually - @srv.setsockopt(:SOL_SOCKET, :SO_KEEPALIVE, 0) host, port = @srv.addr[3], @srv.addr[1] ru = tmpfile(%w(test_bin_daemon .ru)) ru.write("require 'rack/lobster'; run Rack::Lobster.new\n") - cmd = %W(#{RbConfig.ruby} -I lib bin/yahns-rackup - -E none -p #{port} -o #{host} #{ru.path}) - pid = fork do # emulate a systemd environment - env = { - 'LISTEN_PID' => $$.to_s, - 'LISTEN_FDS' => '1', - } - exec env, *cmd, 3 => @srv, err: @err.path - end - Net::HTTP.start(host, port) do |http| - req = Net::HTTP::Get.new("/") - res = http.request(req) - assert_equal 200, res.code.to_i - assert_equal "keep-alive", res["Connection"] + cmd = %W(#{RbConfig.ruby} -I lib bin/yahns-rackup -E none #{ru.path}) + [ %w(-O listen=inherit), %W(-p #{port} -o #{host}) ].each do |opt| + @srv.setsockopt(:SOL_SOCKET, :SO_KEEPALIVE, 0) + begin + pid = fork do # emulate a systemd environment + env = { 'LISTEN_PID' => $$.to_s, 'LISTEN_FDS' => '1' } + cmd.concat(opt) + exec env, *cmd, 3 => @srv, err: @err.path + end + Net::HTTP.start(host, port) do |http| + req = Net::HTTP::Get.new("/") + res = http.request(req) + assert_equal 200, res.code.to_i + assert_equal "keep-alive", res["Connection"] + end + assert @srv.getsockopt(:SOL_SOCKET, :SO_KEEPALIVE).bool, + 'ensure the inheriting process applies TCP socket options' + ensure + if pid + Process.kill(:QUIT, pid) + _, status = Process.waitpid2(pid) + assert status.success?, status.inspect + end + end end - - assert @srv.getsockopt(:SOL_SOCKET, :SO_KEEPALIVE).bool, - 'ensure the inheriting process applies TCP socket options' ensure - if pid - Process.kill(:QUIT, pid) - _, status = Process.waitpid2(pid) - assert status.success?, status.inspect - end ru.close! if ru end -- cgit v1.2.3-24-ge0c7