diff options
Diffstat (limited to 'jetty-server/src/test/java/org/eclipse')
3 files changed, 68 insertions, 9 deletions
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java index 9d51233ffa..e902ec014c 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java @@ -30,15 +30,16 @@ import java.net.SocketException; import java.net.URL; import java.util.Arrays; import java.util.Random; -import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.Exchanger; +import java.util.concurrent.atomic.AtomicBoolean; import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.io.EofException; import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.StringUtil; @@ -50,10 +51,11 @@ import org.junit.Test; import org.junit.matchers.JUnitMatchers; import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; /** * @@ -148,8 +150,55 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture client.close(); } } - + @Test + public void testInterruptedRequest() throws Exception + { + final AtomicBoolean fourBytesRead = new AtomicBoolean(false); + final AtomicBoolean earlyEOFException = new AtomicBoolean(false); + configureServer(new AbstractHandler() + { + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + int contentLength = request.getContentLength(); + ServletInputStream inputStream = request.getInputStream(); + for (int i = 0; i < contentLength; i++) + { + try + { + inputStream.read(); + } + catch (EofException e) + { + earlyEOFException.set(true); + throw e; + } + if (i == 3) + fourBytesRead.set(true); + } + } + }); + + StringBuffer request = new StringBuffer("GET / HTTP/1.0\n"); + request.append("Host: localhost\n"); + request.append("Content-length: 6\n\n"); + request.append("foo"); + + Socket client = newSocket(HOST, _connector.getLocalPort()); + OutputStream os = client.getOutputStream(); + + os.write(request.toString().getBytes()); + os.flush(); + client.shutdownOutput(); + String response = readResponse(client); + client.close(); + +// assertThat("response contains 200 OK", response.contains(" 500 "), is(true)); //TODO: check with gregw, +// currently returns 200 + assertThat("The 4th byte (-1) has not been passed to the handler", fourBytesRead.get(), is(false)); + assertThat("EofException has been caught", earlyEOFException.get(), is(true)); + } /* * Feed the server the entire request at once. diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SelectChannelServerSslTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SelectChannelServerSslTest.java index 840219f66e..096ecca071 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SelectChannelServerSslTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SelectChannelServerSslTest.java @@ -17,8 +17,6 @@ // package org.eclipse.jetty.server.ssl; -import static org.junit.Assert.assertEquals; - import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; @@ -26,13 +24,11 @@ import java.net.Socket; import java.security.KeyStore; import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; - import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; import javax.net.ssl.TrustManagerFactory; - import org.eclipse.jetty.io.AsyncEndPoint; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.nio.SslConnection; @@ -41,8 +37,10 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import static org.junit.Assert.assertThat; + import static org.hamcrest.Matchers.lessThan; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; /** * HttpServer Tester. @@ -167,6 +165,12 @@ public class SelectChannelServerSslTest extends HttpServerTestBase } @Override + @Test + @Ignore("Override and ignore this test as SSLSocket.shutdownOutput() is not supported, " + + "but shutdownOutput() is needed by the test.") + public void testInterruptedRequest(){} + + @Override @Ignore public void testAvailable() throws Exception { diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslSocketServerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslSocketServerTest.java index 4da4106b24..0c53417929 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslSocketServerTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslSocketServerTest.java @@ -77,6 +77,12 @@ public class SslSocketServerTest extends HttpServerTestBase @Override @Test + @Ignore("Override and ignore this test as SSLSocket.shutdownOutput() is not supported, " + + "but shutdownOutput() is needed by the test.") + public void testInterruptedRequest(){} + + @Override + @Test public void testFlush() throws Exception { // TODO this test uses URL, so noop for now |