about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-05-15 08:41:40 +0000
committerEric Wong <e@80x24.org>2016-05-15 08:42:19 +0000
commit818d6be281bf8f3e1b98f26b666e7b5a5416db8f (patch)
treead0c661ef394fdc49c1b604806aca67a219bd356
parent6ba65a74eba96a769fad7a41a658a8c2418a8e29 (diff)
downloadyahns-818d6be281bf8f3e1b98f26b666e7b5a5416db8f.tar.gz
The ab(1) command we use for testing is limited to 20000 open
connections under Debian jessie; a perfectly reasonable limit
to avoid port exhaustion.  I never noticed this limit before,
but systemd under Jessie seems to have upped the default
RLIMIT_NOFILE to 65536(!), causing ab to error out.

We don't even need 10K connections for testing,
we just need to hit *some* limit before we start expiring.
So lower the RLIMIT_NOFILE back to 1024 in the forked server
process so we can test more quickly without running out of
ports or memory, since exhausting the 65536 RLIMIT_NOFILE
limit is not going to happen with a single TCP address.
-rw-r--r--test/test_client_expire.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/test/test_client_expire.rb b/test/test_client_expire.rb
index b2f932b..b6dec1a 100644
--- a/test/test_client_expire.rb
+++ b/test/test_client_expire.rb
@@ -99,6 +99,14 @@ class TestClientExpire < Testcase
       end
       stderr_path err.path
     end
+
+    # 1024 is common on old systems, but nowadays Jessie seems to be 65536
+    nr = Process.getrlimit(:NOFILE)[0]
+    if nr >= 1024
+      nr = 1024
+      do_rlimit = true
+    end
+
     pid = mkserver(cfg) do
       keep = { $stderr => true, $stdout => true, $stdin => true, @srv => true }
       ObjectSpace.each_object(IO) do |obj|
@@ -108,7 +116,9 @@ class TestClientExpire < Testcase
         rescue IOError # could be uninitialized
         end
       end
+      Process.setrlimit(:NOFILE, nr) if do_rlimit
     end
+
     f = get_tcp_client(host, port)
     f.write "G"
     s = get_tcp_client(host, port)
@@ -119,10 +129,9 @@ class TestClientExpire < Testcase
     assert_match(%r{keep-alive}, str)
     sleep 1
 
-    # ignore errors, just beat the crap out of the process
-    nr = Process.getrlimit(:NOFILE)[0] # 1024 is common
     assert_operator nr, :>, 666, "increase RLIM_NOFILE (ulimit -n)"
     nr -= 50
+    # ignore errors, just beat the crap out of the process
     opts = { out: "/dev/null", err: "/dev/null", close_others: true }
     begin
       pids = 2.times.map do