Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2013-07-25 01:26:35 +0000
committerJan Bartel2013-07-25 01:26:35 +0000
commit72b077921dbdd27d0f8cd0833bbc2818265e74f2 (patch)
treebd368fe811511dd74058c757543c05b8f32075a3
parent606c042691babeded00e1274cb6951c3ca611a20 (diff)
parent2f08ba29487aff6624dbf947b1fbd845cdd33464 (diff)
downloadorg.eclipse.jetty.project-72b077921dbdd27d0f8cd0833bbc2818265e74f2.tar.gz
org.eclipse.jetty.project-72b077921dbdd27d0f8cd0833bbc2818265e74f2.tar.xz
org.eclipse.jetty.project-72b077921dbdd27d0f8cd0833bbc2818265e74f2.zip
Merge remote-tracking branch 'origin/jetty-7' into jetty-8
-rw-r--r--jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java2
-rw-r--r--jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java67
-rw-r--r--jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java7
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java8
-rw-r--r--tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithAliasesTest.java1
-rw-r--r--tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithoutAliasesTest.java1
6 files changed, 79 insertions, 7 deletions
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java
index 6fe61048eb..0877dd803e 100644
--- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java
+++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java
@@ -125,10 +125,10 @@ public class HttpExchange
protected void expire(HttpDestination destination)
{
+ AbstractHttpConnection connection = _connection;
if (getStatus() < HttpExchange.STATUS_COMPLETED)
setStatus(HttpExchange.STATUS_EXPIRED);
destination.exchangeExpired(this);
- AbstractHttpConnection connection = _connection;
if (connection != null)
connection.exchangeExpired(this);
}
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java
index 930a378d28..ed2b29425c 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java
@@ -18,13 +18,28 @@
package org.eclipse.jetty.client;
+import java.io.IOException;
+import java.net.URI;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
/**
* IdleTimeoutTest
*
@@ -77,4 +92,56 @@ public class IdleTimeoutTest
Assert.fail("Test did not complete in time");
}
+
+ @Test
+ public void testConnectionsAreReleasedWhenExpired() throws Exception
+ {
+ // we need a server that times out and a client with shorter timeout settings, so we need to create new ones
+ Server server = new Server();
+ Connector connector = new SelectChannelConnector();
+ server.addConnector(connector);
+ server.setHandler(new AbstractHandler()
+ {
+ public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ if (request.getParameter("timeout") != null)
+ {
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ baseRequest.setHandled(true);
+ response.getWriter().write("Hello world");
+ }
+ });
+ server.start();
+
+ HttpClient httpClient = new HttpClient();
+ httpClient.setMaxConnectionsPerAddress(1);
+ httpClient.setConnectTimeout(200);
+ httpClient.setTimeout(200);
+ httpClient.setIdleTimeout(200);
+ httpClient.start();
+
+ String uriString = "http://localhost:" + connector.getLocalPort() + "/";
+
+ HttpExchange httpExchange = new HttpExchange();
+ httpExchange.setURI(URI.create(uriString).resolve("?timeout=true"));
+ httpExchange.setMethod(HttpMethods.GET);
+ httpClient.send(httpExchange);
+ int status = httpExchange.waitForDone();
+ assertThat("First request expired", status, is(8));
+
+ httpExchange = new HttpExchange();
+ httpExchange.setURI(URI.create(uriString));
+ httpExchange.setMethod(HttpMethods.GET);
+ httpClient.send(httpExchange);
+ status = httpExchange.waitForDone();
+ assertThat("Second request was successful as timeout is not set", status, is(7));
+ }
}
diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
index cd3edea4cb..85d70df09a 100644
--- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
+++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
@@ -1015,14 +1015,17 @@ public class HttpGenerator extends AbstractGenerator
// If we need EOC and everything written
if (_needEOC && (_content == null || _content.length() == 0))
{
+ if (_header == null && _buffer == null)
+ _header = _buffers.getHeader();
+
if (_needCRLF)
{
- if (_buffer == null && _header != null && _header.space() >= 2)
+ if (_buffer == null && _header != null && _header.space() >= HttpTokens.CRLF.length)
{
_header.put(HttpTokens.CRLF);
_needCRLF = false;
}
- else if (_buffer!=null && _buffer.space() >= 2)
+ else if (_buffer!=null && _buffer.space() >= HttpTokens.CRLF.length)
{
_buffer.put(HttpTokens.CRLF);
_needCRLF = false;
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
index fd9e152c01..8a84167fe9 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
@@ -2506,7 +2506,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server.
if (dot<0)
return false;
String suffix=path.substring(dot);
- return resource.getAlias().toString().endsWith(suffix);
+ return resource.toString().endsWith(suffix);
}
}
@@ -2521,10 +2521,10 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server.
public boolean check(String path, Resource resource)
{
int slash = path.lastIndexOf('/');
- if (slash<0)
+ if (slash<0 || slash==path.length()-1)
return false;
String suffix=path.substring(slash);
- return resource.getAlias().toString().endsWith(suffix);
+ return resource.toString().endsWith(suffix);
}
}
/* ------------------------------------------------------------ */
@@ -2537,7 +2537,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server.
public boolean check(String path, Resource resource)
{
int slash = path.lastIndexOf('/');
- if (slash<0)
+ if (slash<0 || resource.exists())
return false;
String suffix=path.substring(slash);
return resource.getAlias().toString().endsWith(suffix);
diff --git a/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithAliasesTest.java b/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithAliasesTest.java
index 82ffc33181..3ba4f2c5e1 100644
--- a/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithAliasesTest.java
+++ b/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithAliasesTest.java
@@ -67,6 +67,7 @@ public class JspAndDefaultWithAliasesTest
// @formatter:off
data.add(new String[] { "false","/dump.jsp" });
+ data.add(new String[] { "false","/dump.jsp/" });
data.add(new String[] { "true", "/dump.jsp%00" });
data.add(new String[] { "false","/dump.jsp%00/" });
data.add(new String[] { "false","/dump.jsp%00x/dump.jsp" });
diff --git a/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithoutAliasesTest.java b/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithoutAliasesTest.java
index ab9f48473f..5d119f86a0 100644
--- a/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithoutAliasesTest.java
+++ b/tests/test-integration/src/test/java/org/eclipse/jetty/test/jsp/JspAndDefaultWithoutAliasesTest.java
@@ -68,6 +68,7 @@ public class JspAndDefaultWithoutAliasesTest
// @formatter:off
data.add(new Object[] { "/dump.jsp" });
+ data.add(new Object[] { "/dump.jsp/" });
data.add(new Object[] { "/dump.jsp%00" });
data.add(new Object[] { "/dump.jsp%00x" });
data.add(new Object[] { "/dump.jsp%00x/dump.jsp" });

Back to the top