summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/java/threads/app.java32
-rw-r--r--test/test_java_application.py41
2 files changed, 73 insertions, 0 deletions
diff --git a/test/java/threads/app.java b/test/java/threads/app.java
new file mode 100644
index 00000000..d0dd3fcc
--- /dev/null
+++ b/test/java/threads/app.java
@@ -0,0 +1,32 @@
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet("/")
+public class app extends HttpServlet
+{
+ @Override
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ int delay = 0;
+
+ String x_delay = request.getHeader("X-Delay");
+ if (x_delay != null) {
+ delay = Integer.parseInt(x_delay);
+ }
+
+ try {
+ Thread.sleep(delay * 1000);
+ } catch (InterruptedException ex) {
+ ex.printStackTrace();
+ }
+
+ response.addHeader("X-Thread", "" + Thread.currentThread().getId());
+ }
+}
diff --git a/test/test_java_application.py b/test/test_java_application.py
index efafa6a1..41345e87 100644
--- a/test/test_java_application.py
+++ b/test/test_java_application.py
@@ -1012,3 +1012,44 @@ class TestJavaApplication(TestApplicationJava):
)
is not None
), 'file created'
+
+ def test_java_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)
+
+ time.sleep(0.25) # required to avoid greedy request reading
+
+ 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'])
+
+ sock.close()
+
+ assert len(socks) == len(threads), 'threads differs'