Merge remote-tracking branch 'origin/master' into jetty-9.1

Conflicts:
	jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java
	jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java
	jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
This commit is contained in:
Greg Wilkins 2013-09-05 13:19:12 +10:00
commit a3f6633385
3 changed files with 110 additions and 28 deletions

View File

@ -71,11 +71,14 @@ public class DumpHandler extends AbstractHandler
if (!isStarted())
return;
StringBuilder read = null;
if (request.getParameter("read")!=null)
{
read=new StringBuilder();
int len=Integer.parseInt(request.getParameter("read"));
Reader in = request.getReader();
for (int i=Integer.parseInt(request.getParameter("read"));i-->0;)
in.read();
for (int i=len;i-->0;)
read.append((char)in.read());
}
if (request.getParameter("ISE")!=null)
@ -190,16 +193,23 @@ public class DumpHandler extends AbstractHandler
writer.write("</pre>\n<h3>Content:</h3>\n<pre>");
char[] content= new char[4096];
int len;
try{
Reader in=request.getReader();
while((len=in.read(content))>=0)
writer.write(new String(content,0,len));
}
catch(IOException e)
if (read!=null)
{
writer.write(e.toString());
writer.write(read.toString());
}
else
{
char[] content= new char[4096];
int len;
try{
Reader in=request.getReader();
while((len=in.read(content))>=0)
writer.write(new String(content,0,len));
}
catch(IOException e)
{
writer.write(e.toString());
}
}
writer.write("</pre>\n");

View File

@ -68,6 +68,7 @@ public class HttpConnectionTest
http.getHttpConfiguration().setResponseHeaderSize(1024);
connector = new LocalConnector(server,http,null);
connector.setIdleTimeout(500);
server.addConnector(connector);
server.setHandler(new DumpHandler());
server.start();
@ -384,6 +385,73 @@ public class HttpConnectionTest
}
}
@Test
public void testUnconsumed() throws Exception
{
String response=null;
String requests=null;
int offset=0;
offset=0;
requests=
"GET /R1?read=4 HTTP/1.1\n"+
"Host: localhost\n"+
"Transfer-Encoding: chunked\n"+
"Content-Type: text/plain; charset=utf-8\n"+
"\015\012"+
"5;\015\012"+
"12345\015\012"+
"5;\015\012"+
"67890\015\012"+
"0;\015\012\015\012"+
"GET /R2 HTTP/1.1\n"+
"Host: localhost\n"+
"Content-Type: text/plain; charset=utf-8\n"+
"Content-Length: 10\n"+
"Connection: close\n"+
"\n"+
"abcdefghij\n";
response=connector.getResponses(requests);
offset = checkContains(response,offset,"HTTP/1.1 200");
offset = checkContains(response,offset,"pathInfo=/R1");
offset = checkContains(response,offset,"1234");
checkNotContained(response,offset,"56789");
offset = checkContains(response,offset,"HTTP/1.1 200");
offset = checkContains(response,offset,"pathInfo=/R2");
offset = checkContains(response,offset,"encoding=UTF-8");
offset = checkContains(response,offset,"abcdefghij");
}
@Test
public void testUnconsumedTimeout() throws Exception
{
String response=null;
String requests=null;
int offset=0;
offset=0;
requests=
"GET /R1?read=4 HTTP/1.1\n"+
"Host: localhost\n"+
"Transfer-Encoding: chunked\n"+
"Content-Type: text/plain; charset=utf-8\n"+
"\015\012"+
"5;\015\012"+
"12345\015\012";
long start=System.currentTimeMillis();
response=connector.getResponses(requests,2000,TimeUnit.MILLISECONDS);
if ((System.currentTimeMillis()-start)>=2000)
Assert.fail();
offset = checkContains(response,offset,"HTTP/1.1 200");
offset = checkContains(response,offset,"pathInfo=/R1");
offset = checkContains(response,offset,"1234");
checkNotContained(response,offset,"56789");
}
@Test
public void testUnconsumedErrorRead() throws Exception
{

View File

@ -197,7 +197,14 @@ public class ServletHandler extends ScopedHandler
{
for (int i=_filters.length; i-->0;)
{
try { _filters[i].stop(); }catch(Exception e){LOG.warn(Log.EXCEPTION,e);}
try
{
_filters[i].stop();
}
catch(Exception e)
{
LOG.warn(Log.EXCEPTION,e);
}
if (_filters[i].getSource() != Source.EMBEDDED)
{
//remove all of the mappings that were for non-embedded filters
@ -234,7 +241,14 @@ public class ServletHandler extends ScopedHandler
{
for (int i=_servlets.length; i-->0;)
{
try { _servlets[i].stop(); }catch(Exception e){LOG.warn(Log.EXCEPTION,e);}
try
{
_servlets[i].stop();
}
catch(Exception e)
{
LOG.warn(Log.EXCEPTION,e);
}
if (_servlets[i].getSource() != Source.EMBEDDED)
{
@ -525,35 +539,25 @@ public class ServletHandler extends ScopedHandler
// unwrap cause
Throwable th=e;
if (th instanceof UnavailableException)
{
LOG.debug(th);
}
else if (th instanceof ServletException)
if (th instanceof ServletException)
{
if (th instanceof QuietServletException)
{
LOG.debug(th);
LOG.warn(th.toString());
LOG.debug(th);
}
else
LOG.warn(th);
}
// handle or log exception
else if (th instanceof EofException)
{
throw (EofException)th;
else if (LOG.isDebugEnabled())
{
LOG.warn(request.getRequestURI(), th);
LOG.debug(request.toString());
}
else if (th instanceof IOException || th instanceof UnavailableException)
{
LOG.debug(request.getRequestURI(),th);
}
else
{
LOG.warn(request.getRequestURI(),th);
if (LOG.isDebugEnabled())
LOG.debug(request.toString());
}
if (!response.isCommitted())