* [PATCH] test_ccc: use a pipe to synchronize test
@ 2017-03-23 0:05 Eric Wong
0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2017-03-23 0:05 UTC (permalink / raw)
To: unicorn-public; +Cc: Simon Eskildsen
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.
---
Btw, ccc-tcp-v3 is merged to master, and I guess
5.3.0rc1 is coming soon.
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 @@ def test_ccc_tcpi
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 @@ def test_ccc_tcpi
$$
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 @@ def test_ccc_tcpi
"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
--
EW
^ permalink raw reply [flat|nested] only message in thread
only message in thread, back to index
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-23 0:05 [PATCH] test_ccc: use a pipe to synchronize test Eric Wong
unicorn Ruby/Rack server user+dev discussion/patches/pulls/bugs/help
Archives are clonable:
git clone --mirror https://bogomips.org/unicorn-public
git clone --mirror http://ou63pmih66umazou.onion/unicorn-public
Example config snippet for mirrors
Newsgroups are available over NNTP:
nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
nntp://ou63pmih66umazou.onion/inbox.comp.lang.ruby.unicorn
note: .onion URLs require Tor: https://www.torproject.org/
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git