You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/05/03 14:03:33 UTC
svn commit: r1478743 - in /tomcat/trunk:
java/org/apache/catalina/connector/OutputBuffer.java
test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java
Author: markt
Date: Fri May 3 12:03:33 2013
New Revision: 1478743
URL: http://svn.apache.org/r1478743
Log:
Update non-blocking test so it passes with current code.
Modified:
tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
tomcat/trunk/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=1478743&r1=1478742&r2=1478743&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java Fri May 3 12:03:33 2013
@@ -650,7 +650,8 @@ public class OutputBuffer extends Writer
if (coyoteResponse.getWriteListener() == null) {
throw new IllegalStateException("not in non blocking mode.");
}
- AtomicBoolean isReady = new AtomicBoolean(true);
+ // Assume write is not possible
+ AtomicBoolean isReady = new AtomicBoolean(false);
coyoteResponse.action(ActionCode.NB_WRITE_INTEREST, isReady);
return isReady.get();
}
Modified: tomcat/trunk/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java?rev=1478743&r1=1478742&r2=1478743&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java (original)
+++ tomcat/trunk/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java Fri May 3 12:03:33 2013
@@ -45,7 +45,6 @@ import org.apache.catalina.startup.Bytes
import org.apache.catalina.startup.TesterServlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.buf.ByteChunk.ByteOutputChannel;
@@ -53,20 +52,23 @@ public class TestNonBlockingAPI extends
public static final long bytesToDownload = 1024 * 1024 * 5;
- @Override
- protected String getProtocol() {
- return Http11NioProtocol.class.getName();
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- }
@Test
public void testNonBlockingRead() throws Exception {
- // Configure a context with digest auth and a single protected resource
Tomcat tomcat = getTomcatInstance();
+
+ // TODO Faking non-blocking reads is not yet implemented for BIO.
+ if (tomcat.getConnector().getProtocolHandlerClassName().equals(
+ "org.apache.coyote.http11.Http11Protocol")) {
+ return;
+ }
+
+ // TODO Non-blocking reads are not yet implemented for APR.
+ if (tomcat.getConnector().getProtocolHandlerClassName().equals(
+ "org.apache.coyote.http11.Http11AprProtocol")) {
+ return;
+ }
+
// Must have a real docBase - just use temp
StandardContext ctx = (StandardContext) tomcat.addContext("", System.getProperty("java.io.tmpdir"));
@@ -83,10 +85,9 @@ public class TestNonBlockingAPI extends
Assert.assertEquals(HttpServletResponse.SC_OK, rc);
}
+
@Test
public void testNonBlockingWrite() throws Exception {
- String bind = "localhost";
- // Configure a context with digest auth and a single protected resource
Tomcat tomcat = getTomcatInstance();
// Must have a real docBase - just use temp
StandardContext ctx = (StandardContext) tomcat.addContext("", System.getProperty("java.io.tmpdir"));
@@ -96,8 +97,6 @@ public class TestNonBlockingAPI extends
Tomcat.addServlet(ctx, servletName, servlet);
ctx.addServletMapping("/", servletName);
tomcat.getConnector().setProperty("socket.txBufSize", "1024");
- tomcat.getConnector().setProperty("address", bind);
- System.out.println(tomcat.getConnector().getProperty("address"));
tomcat.start();
Map<String, List<String>> resHeaders = new HashMap<>();
@@ -130,7 +129,7 @@ public class TestNonBlockingAPI extends
}
}
});
- int rc = postUrl(true, new DataWriter(0), "http://" + bind + ":" + getPort() + "/", slowReader, resHeaders,
+ int rc = postUrl(true, new DataWriter(0), "http://localhost:" + getPort() + "/", slowReader, resHeaders,
null);
slowReader.flushBuffer();
Assert.assertEquals(HttpServletResponse.SC_OK, rc);
@@ -139,9 +138,23 @@ public class TestNonBlockingAPI extends
@Test
public void testNonBlockingWriteError() throws Exception {
- String bind = "localhost";
- // Configure a context with digest auth and a single protected resource
Tomcat tomcat = getTomcatInstance();
+
+ // Not applicable to BIO. This test does not start a new thread for the
+ // write so with BIO all the writes happen in the service() mehtod just
+ // like blocking IO.
+ if (tomcat.getConnector().getProtocolHandlerClassName().equals(
+ "org.apache.coyote.http11.Http11Protocol")) {
+ return;
+ }
+
+ // TODO Non-blocking reads are not yet implemented for APR so this test
+ // will not pass.
+ if (tomcat.getConnector().getProtocolHandlerClassName().equals(
+ "org.apache.coyote.http11.Http11AprProtocol")) {
+ return;
+ }
+
// Must have a real docBase - just use temp
StandardContext ctx = (StandardContext) tomcat.addContext("", System.getProperty("java.io.tmpdir"));
@@ -150,8 +163,6 @@ public class TestNonBlockingAPI extends
Tomcat.addServlet(ctx, servletName, servlet);
ctx.addServletMapping("/", servletName);
tomcat.getConnector().setProperty("socket.txBufSize", "1024");
- tomcat.getConnector().setProperty("address", bind);
- System.out.println(tomcat.getConnector().getProperty("address"));
tomcat.start();
Map<String, List<String>> resHeaders = new HashMap<>();
@@ -184,7 +195,7 @@ public class TestNonBlockingAPI extends
}
}
});
- int rc = postUrlWithDisconnect(true, new DataWriter(0), "http://" + bind + ":" + getPort() + "/", resHeaders,
+ int rc = postUrlWithDisconnect(true, new DataWriter(0), "http://localhost:" + getPort() + "/", resHeaders,
null);
slowReader.flushBuffer();
Assert.assertEquals(HttpServletResponse.SC_OK, rc);
@@ -194,11 +205,9 @@ public class TestNonBlockingAPI extends
} catch (Exception e) {
}
Assert.assertTrue("Error listener should have been invoked.", servlet.wlistener.onErrorInvoked);
-
}
-
public static class DataWriter implements BytesStreamer {
final int max = 5;
int count = 0;
@@ -288,10 +297,6 @@ public class TestNonBlockingAPI extends
while (in.isReady()) {
listener.onDataAvailable();
}
- // step 3 - notify that we wish to read
- // ServletOutputStream out = resp.getOutputStream();
- // out.setWriteListener(new TestWriteListener(actx));
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org