diff options
author | Eric Wong <e@80x24.org> | 2016-05-15 08:41:40 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-05-15 08:42:19 +0000 |
commit | 818d6be281bf8f3e1b98f26b666e7b5a5416db8f (patch) | |
tree | ad0c661ef394fdc49c1b604806aca67a219bd356 | |
parent | 6ba65a74eba96a769fad7a41a658a8c2418a8e29 (diff) | |
download | yahns-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.rb | 13 |
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 |