summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--test/ruby/threads/config.ru13
-rw-r--r--test/test_ruby_application.py41
2 files changed, 54 insertions, 0 deletions
diff --git a/test/ruby/threads/config.ru b/test/ruby/threads/config.ru
new file mode 100644
index 00000000..2a234d0d
--- /dev/null
+++ b/test/ruby/threads/config.ru
@@ -0,0 +1,13 @@
+app = Proc.new do |env|
+ delay = env['HTTP_X_DELAY'].to_f
+
+ sleep(delay)
+
+ ['200', {
+ 'Content-Length' => 0.to_s,
+ 'Rack-Multithread' => env['rack.multithread'].to_s,
+ 'X-Thread' => Thread.current.object_id.to_s
+ }, []]
+end
+
+run app
diff --git a/test/test_ruby_application.py b/test/test_ruby_application.py
index b765f390..e42fb97f 100644
--- a/test/test_ruby_application.py
+++ b/test/test_ruby_application.py
@@ -351,3 +351,44 @@ class TestRubyApplication(TestApplicationRuby):
assert len(headers['X-Release-Date']) > 0, 'RUBY_RELEASE_DATE'
assert len(headers['X-Revision']) > 0, 'RUBY_REVISION'
assert len(headers['X-Version']) > 0, 'RUBY_VERSION'
+
+ def test_ruby_application_threads(self):
+ self.load('threads')
+
+ assert 'success' in self.conf(
+ '4', 'applications/threads/threads'
+ ), 'configure 4 threads'
+
+ socks = []
+
+ for i in range(4):
+ (_, sock) = self.get(
+ headers={
+ 'Host': 'localhost',
+ 'X-Delay': '2',
+ 'Connection': 'close',
+ },
+ no_recv=True,
+ start=True,
+ )
+
+ socks.append(sock)
+
+ threads = set()
+
+ for sock in socks:
+ resp = self.recvall(sock).decode('utf-8')
+
+ self.log_in(resp)
+
+ resp = self._resp_to_dict(resp)
+
+ assert resp['status'] == 200, 'status'
+
+ threads.add(resp['headers']['X-Thread'])
+
+ assert resp['headers']['Rack-Multithread'] == 'true', 'multithread'
+
+ sock.close()
+
+ assert len(socks) == len(threads), 'threads differs'