Author: markt
Date: Thu Sep 5 22:40:50 2013
New Revision: 1520447
URL: http://svn.apache.org/r1520447
Log:
Add a simple non-blocking write test that currently fails. This won't impact
the CI systems since the class is excluded from the unit tests.
Modified:
tomcat/trunk/test/org/apache/catalina/nonblocking/TesterAjpNonBlockingClient.java
Modified:
tomcat/trunk/test/org/apache/catalina/nonblocking/TesterAjpNonBlockingClient.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/nonblocking/TesterAjpNonBlockingClient.java?rev=1520447&r1=1520446&r2=1520447&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/nonblocking/TesterAjpNonBlockingClient.java
(original)
+++
tomcat/trunk/test/org/apache/catalina/nonblocking/TesterAjpNonBlockingClient.java
Thu Sep 5 22:40:50 2013
@@ -16,10 +16,15 @@
*/
package org.apache.catalina.nonblocking;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.net.SocketFactory;
import javax.servlet.http.HttpServletResponse;
import org.junit.Assert;
@@ -29,14 +34,14 @@ import org.apache.catalina.nonblocking.T
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.tomcat.util.buf.ByteChunk;
+/**
+ * This is not a standard set of unit tests. This is a set of test clients for
+ * AJP support of Servlet 3.1 non-blocking IO. It assumes that there is an
httpd
+ * instance listening on localhost:80 that is redirecting all traffic to a
+ * default Tomcat 8 instance that includes the examples web application.
+ */
public class TesterAjpNonBlockingClient extends TomcatBaseTest {
- /**
- * This is not a standard unit test. This is a test client for AJP
- * non-blocking reads. It assumes that there is an httpd instance listening
- * on localhost:80 that is redirecting all traffic to a default Tomcat 8
- * instance that includes the examples web application.
- */
@Test
public void doTestAJPNonBlockingRead() throws Exception {
@@ -50,4 +55,47 @@ public class TesterAjpNonBlockingClient
Assert.assertEquals(HttpServletResponse.SC_OK, rc);
}
+
+
+ @Test
+ public void testNonBlockingWrite() throws Exception {
+
+ SocketFactory factory = SocketFactory.getDefault();
+ Socket s = factory.createSocket("localhost", 80);
+
+ ByteChunk result = new ByteChunk();
+ OutputStream os = s.getOutputStream();
+ os.write(("GET /examples/servlets/nonblocking/numberwriter
HTTP/1.1\r\n" +
+ "Host: localhost\r\n" +
+ "Connection: close\r\n" +
+ "\r\n").getBytes(StandardCharsets.ISO_8859_1));
+ os.flush();
+
+ InputStream is = s.getInputStream();
+ byte[] buffer = new byte[8192];
+
+ int read = 0;
+ int readSinceLastPause = 0;
+ while (read != -1) {
+ read = is.read(buffer);
+ if (read > 0) {
+ result.append(buffer, 0, read);
+ }
+ readSinceLastPause += read;
+ if (readSinceLastPause > 40000) {
+ readSinceLastPause = 0;
+ Thread.sleep(500);
+ }
+ }
+
+ os.close();
+ is.close();
+ s.close();
+
+ // Validate the result
+ String resultString = result.toString();
+ log.info("Client read " + resultString.length() + " bytes");
+
+ Assert.assertTrue(resultString.contains("00000000000000010000"));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]