about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-03-22 22:59:34 +0000
committerEric Wong <e@80x24.org>2017-03-22 23:55:25 +0000
commit19f969d961c0ff6f6f45b4231d859605530d71ab (patch)
tree1691e1590a958ec1988df15042b376e76c946995
parent73769bc0bc309382689707595f57388ea5e5c737 (diff)
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.
-rw-r--r--test/unit/test_ccc.rb11
1 files changed, 10 insertions, 1 deletions
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