From 19f969d961c0ff6f6f45b4231d859605530d71ab Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 22 Mar 2017 22:59:34 +0000 Subject: test_ccc: use a pipe to synchronize test Sleeping 1 second to test 100 requests is too long for some systems; and not long enough for others. We need to also finish reading the sleeper response to ensure the server actually got the second request in, before sending SIGQUIT to terminate it; as it's possible for the test client to connect and abort 100 clients before the server even increments the request counter for the 2nd request. --- test/unit/test_ccc.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/unit/test_ccc.rb b/test/unit/test_ccc.rb index 22b1a9c..0db0c38 100644 --- a/test/unit/test_ccc.rb +++ b/test/unit/test_ccc.rb @@ -12,7 +12,9 @@ class TestCccTCPI < Test::Unit::TestCase port = srv.addr[1] err = Tempfile.new('unicorn_ccc') rd, wr = IO.pipe + sleep_pipe = IO.pipe pid = fork do + sleep_pipe[1].close reqs = 0 rd.close worker_pid = nil @@ -22,7 +24,10 @@ class TestCccTCPI < Test::Unit::TestCase $$ end reqs += 1 - sleep(1) if env['PATH_INFO'] == '/sleep' + + # will wake up when writer closes + sleep_pipe[0].read if env['PATH_INFO'] == '/sleep' + [ 200, [ %w(Content-Length 0), %w(Content-Type text/plain) ], [] ] end ENV['UNICORN_FD'] = srv.fileno.to_s @@ -57,6 +62,10 @@ class TestCccTCPI < Test::Unit::TestCase "Host: example.com\r\n\r\n") client.close end + sleep_pipe[1].close # wake up the reader in the worker + res = sleeper.read + assert_match %r{\AHTTP/1\.1 200}, res, 'got part of first sleeper response' + assert_match %r{\r\n\r\n\z}, res, 'got end of sleeper response' sleeper.close kpid = pid pid = nil -- cgit v1.2.3-24-ge0c7