improved continuation tests
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@266 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
8f04010f67
commit
2b6057b3ea
|
@ -13,8 +13,6 @@
|
|||
|
||||
package org.eclipse.jetty.continuation;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.Servlet;
|
||||
|
|
|
@ -40,13 +40,15 @@ public class ContinuationFilter implements Filter
|
|||
_debug=param!=null&&Boolean.parseBoolean(param);
|
||||
|
||||
param=filterConfig.getInitParameter("partial");
|
||||
_partial=param!=null&&Boolean.parseBoolean(param) || ContinuationSupport.__jetty6;
|
||||
_partial=param!=null&&Boolean.parseBoolean(param) || (ContinuationSupport.__jetty6&&!jetty);
|
||||
|
||||
param=filterConfig.getInitParameter("faux");
|
||||
_faux=(param!=null&&Boolean.parseBoolean(param)) || !(jetty || _partial || ContinuationSupport.__servlet3);
|
||||
|
||||
if (_debug)
|
||||
_context.log("ContinuationFilter partial="+_partial+
|
||||
_context.log("ContinuationFilter "+
|
||||
" jetty="+jetty+
|
||||
" partial="+_partial+
|
||||
" jetty6="+ContinuationSupport.__jetty6+
|
||||
" faux="+_faux+
|
||||
" servlet3="+ContinuationSupport.__servlet3);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package org.eclipse.jetty.continuation;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.EventListener;
|
||||
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@ import javax.servlet.AsyncEvent;
|
|||
import javax.servlet.AsyncListener;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletRequestEvent;
|
||||
import javax.servlet.ServletRequestListener;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-continuation</artifactId>
|
||||
<artifactId>jetty-servlet</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
@ -29,6 +29,12 @@
|
|||
<version>6.1.18</version>
|
||||
<type>jar</type>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>servlet-api-2.5</artifactId>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -1,5 +1,17 @@
|
|||
package org.eclipse.jetty.servlet;
|
||||
// ========================================================================
|
||||
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
|
||||
package org.eclipse.jetty.continuation;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
@ -12,63 +24,16 @@ import javax.servlet.http.HttpServlet;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.eclipse.jetty.continuation.Continuation;
|
||||
import org.eclipse.jetty.continuation.ContinuationFilter;
|
||||
import org.eclipse.jetty.continuation.ContinuationListener;
|
||||
import org.eclipse.jetty.continuation.ContinuationSupport;
|
||||
import org.eclipse.jetty.server.Connector;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.nio.SelectChannelConnector;
|
||||
import org.eclipse.jetty.util.IO;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
||||
public class ContinuationTest extends TestCase
|
||||
|
||||
public abstract class ContinuationBase extends TestCase
|
||||
{
|
||||
protected Server _server = new Server();
|
||||
protected ServletHandler _servletHandler;
|
||||
protected SuspendServlet _servlet;
|
||||
protected SelectChannelConnector _connector;
|
||||
FilterHolder _filter;
|
||||
|
||||
protected void setUp() throws Exception
|
||||
{
|
||||
_connector = new SelectChannelConnector();
|
||||
_server.setConnectors(new Connector[]{ _connector });
|
||||
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.NO_SECURITY|ServletContextHandler.NO_SESSIONS);
|
||||
_server.setHandler(servletContext);
|
||||
_servletHandler=servletContext.getServletHandler();
|
||||
_servlet=new SuspendServlet();
|
||||
ServletHolder holder=new ServletHolder(_servlet);
|
||||
_servletHandler.addServletWithMapping(holder,"/");
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception
|
||||
{
|
||||
_server.stop();
|
||||
}
|
||||
|
||||
public void testNotFaux() throws Exception
|
||||
{
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","true");
|
||||
_server.start();
|
||||
|
||||
doit("AsyncRequest");
|
||||
}
|
||||
|
||||
public void testNotJetty6() throws Exception
|
||||
{
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","false");
|
||||
_server.start();
|
||||
|
||||
doit("AsyncRequest");
|
||||
}
|
||||
protected SuspendServlet _servlet=new SuspendServlet();
|
||||
protected int _port;
|
||||
|
||||
private void doit(String type) throws Exception
|
||||
protected void doit(String type) throws Exception
|
||||
{
|
||||
String response;
|
||||
|
||||
|
@ -142,13 +107,17 @@ public class ContinuationTest extends TestCase
|
|||
request+="Content-Length: "+content.length()+"\r\n";
|
||||
request+="\r\n" + content;
|
||||
|
||||
Socket socket = new Socket("localhost",_connector.getLocalPort());
|
||||
Socket socket = new Socket("localhost",_port);
|
||||
socket.getOutputStream().write(request.getBytes("UTF-8"));
|
||||
|
||||
String response = IO.toString(socket.getInputStream());
|
||||
String response = toString(socket.getInputStream());
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
protected abstract String toString(InputStream in) throws IOException;
|
||||
|
||||
|
||||
private static class SuspendServlet extends HttpServlet
|
||||
{
|
||||
private Timer _timer=new Timer();
|
||||
|
@ -169,8 +138,6 @@ public class ContinuationTest extends TestCase
|
|||
long resume_after=-1;
|
||||
long complete_after=-1;
|
||||
|
||||
final String uri=request.getRequestURI();
|
||||
|
||||
if (request.getParameter("read")!=null)
|
||||
read_before=Integer.parseInt(request.getParameter("read"));
|
||||
if (request.getParameter("sleep")!=null)
|
||||
|
@ -289,7 +256,9 @@ public class ContinuationTest extends TestCase
|
|||
}
|
||||
}
|
||||
|
||||
private static ContinuationListener __listener = new ContinuationListener()
|
||||
|
||||
private static ContinuationListener __listener =
|
||||
new ContinuationListener()
|
||||
{
|
||||
public void onComplete(Continuation continuation)
|
||||
{
|
||||
|
@ -301,5 +270,6 @@ public class ContinuationTest extends TestCase
|
|||
((HttpServletResponse)continuation.getServletResponse()).addHeader("history","onTimeout");
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
|
@ -15,32 +15,22 @@ package org.eclipse.jetty.continuation;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.mortbay.jetty.Connector;
|
||||
import org.mortbay.jetty.Server;
|
||||
import org.mortbay.jetty.nio.SelectChannelConnector;
|
||||
import org.mortbay.jetty.servlet.Context;
|
||||
import org.mortbay.jetty.servlet.FilterHolder;
|
||||
import org.mortbay.jetty.servlet.ServletHandler;
|
||||
import org.mortbay.jetty.servlet.ServletHolder;
|
||||
import org.mortbay.util.IO;
|
||||
import org.eclipse.jetty.server.Connector;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.nio.SelectChannelConnector;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.util.IO;
|
||||
|
||||
|
||||
public class ContinuationTest extends TestCase
|
||||
|
||||
public class ContinuationTest extends ContinuationBase
|
||||
{
|
||||
protected Server _server = new Server();
|
||||
protected ServletHandler _servletHandler;
|
||||
protected SuspendServlet _servlet;
|
||||
protected SelectChannelConnector _connector;
|
||||
FilterHolder _filter;
|
||||
|
||||
|
@ -48,273 +38,52 @@ public class ContinuationTest extends TestCase
|
|||
{
|
||||
_connector = new SelectChannelConnector();
|
||||
_server.setConnectors(new Connector[]{ _connector });
|
||||
Context servletContext = new Context(Context.NO_SECURITY|Context.NO_SESSIONS);
|
||||
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.NO_SECURITY|ServletContextHandler.NO_SESSIONS);
|
||||
_server.setHandler(servletContext);
|
||||
_servletHandler=servletContext.getServletHandler();
|
||||
_servlet=new SuspendServlet();
|
||||
ServletHolder holder=new ServletHolder(_servlet);
|
||||
_servletHandler.addServletWithMapping(holder,"/");
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
}
|
||||
|
||||
|
||||
protected void tearDown() throws Exception
|
||||
{
|
||||
_server.stop();
|
||||
}
|
||||
|
||||
public void testFaux() throws Exception
|
||||
public void testNotFaux() throws Exception
|
||||
{
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","true");
|
||||
_server.start();
|
||||
_port=_connector.getLocalPort();
|
||||
|
||||
doit("FauxContinuation");
|
||||
doit("AsyncRequest");
|
||||
}
|
||||
|
||||
public void testJetty6() throws Exception
|
||||
public void testNotJetty6() throws Exception
|
||||
{
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","false");
|
||||
_server.start();
|
||||
_port=_connector.getLocalPort();
|
||||
|
||||
doit("Jetty6Continuation");
|
||||
}
|
||||
|
||||
private void doit(String type) throws Exception
|
||||
{
|
||||
String response;
|
||||
|
||||
response=process(null,null);
|
||||
assertContains(type,response);
|
||||
assertContains("NORMAL",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertNotContains("history: onComplete",response);
|
||||
|
||||
response=process("sleep=200",null);
|
||||
assertContains("SLEPT",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertNotContains("history: onComplete",response);
|
||||
|
||||
response=process("suspend=200",null);
|
||||
assertContains("TIMEOUT",response);
|
||||
assertContains("history: onTimeout",response);
|
||||
assertContains("history: onComplete",response);
|
||||
|
||||
response=process("suspend=200&resume=100",null);
|
||||
assertContains("RESUMED",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertContains("history: onComplete",response);
|
||||
|
||||
response=process("suspend=200&resume=0",null);
|
||||
assertContains("RESUMED",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertContains("history: onComplete",response);
|
||||
|
||||
response=process("suspend=200&complete=100",null);
|
||||
assertContains("COMPLETED",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertContains("history: onComplete",response);
|
||||
|
||||
response=process("suspend=200&complete=0",null);
|
||||
assertContains("COMPLETED",response);
|
||||
assertNotContains("history: onTimeout",response);
|
||||
assertContains("history: onComplete",response);
|
||||
doit("AsyncRequest");
|
||||
}
|
||||
|
||||
protected void assertContains(String content,String response)
|
||||
public void testNoFilter() throws Exception
|
||||
{
|
||||
assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
|
||||
if (response.indexOf(content,15)<0)
|
||||
{
|
||||
System.err.println(content+" NOT IN '"+response+"'");
|
||||
assertTrue(false);
|
||||
}
|
||||
_server.start();
|
||||
_port=_connector.getLocalPort();
|
||||
|
||||
doit("AsyncRequest");
|
||||
}
|
||||
|
||||
protected void assertNotContains(String content,String response)
|
||||
protected String toString(InputStream in) throws IOException
|
||||
{
|
||||
assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
|
||||
if (response.indexOf(content,15)>=0)
|
||||
{
|
||||
System.err.println(content+" IS IN '"+response+"'");
|
||||
assertTrue(false);
|
||||
}
|
||||
return IO.toString(in);
|
||||
}
|
||||
|
||||
public synchronized String process(String query,String content) throws Exception
|
||||
{
|
||||
String request = "GET /";
|
||||
|
||||
if (query!=null)
|
||||
request+="?"+query;
|
||||
request+=" HTTP/1.1\r\n"+
|
||||
"Host: localhost\r\n"+
|
||||
"Connection: close\r\n";
|
||||
if (content!=null)
|
||||
request+="Content-Length: "+content.length()+"\r\n";
|
||||
request+="\r\n" + content;
|
||||
|
||||
Socket socket = new Socket("localhost",_connector.getLocalPort());
|
||||
socket.getOutputStream().write(request.getBytes("UTF-8"));
|
||||
|
||||
String response = IO.toString(socket.getInputStream());
|
||||
return response;
|
||||
}
|
||||
|
||||
private static class SuspendServlet extends HttpServlet
|
||||
{
|
||||
private Timer _timer=new Timer();
|
||||
|
||||
public SuspendServlet()
|
||||
{}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
final Continuation continuation = ContinuationSupport.getContinuation(request,response);
|
||||
|
||||
response.addHeader("history",continuation.getClass().toString());
|
||||
|
||||
int read_before=0;
|
||||
long sleep_for=-1;
|
||||
long suspend_for=-1;
|
||||
long resume_after=-1;
|
||||
long complete_after=-1;
|
||||
|
||||
final String uri=request.getRequestURI();
|
||||
|
||||
if (request.getParameter("read")!=null)
|
||||
read_before=Integer.parseInt(request.getParameter("read"));
|
||||
if (request.getParameter("sleep")!=null)
|
||||
sleep_for=Integer.parseInt(request.getParameter("sleep"));
|
||||
if (request.getParameter("suspend")!=null)
|
||||
suspend_for=Integer.parseInt(request.getParameter("suspend"));
|
||||
if (request.getParameter("resume")!=null)
|
||||
resume_after=Integer.parseInt(request.getParameter("resume"));
|
||||
if (request.getParameter("complete")!=null)
|
||||
complete_after=Integer.parseInt(request.getParameter("complete"));
|
||||
|
||||
if (continuation.isInitial())
|
||||
{
|
||||
if (read_before>0)
|
||||
{
|
||||
byte[] buf=new byte[read_before];
|
||||
request.getInputStream().read(buf);
|
||||
}
|
||||
else if (read_before<0)
|
||||
{
|
||||
InputStream in = request.getInputStream();
|
||||
int b=in.read();
|
||||
while(b!=-1)
|
||||
b=in.read();
|
||||
}
|
||||
|
||||
if (suspend_for>=0)
|
||||
{
|
||||
if (suspend_for>0)
|
||||
continuation.setTimeout(suspend_for);
|
||||
continuation.addContinuationListener(__listener);
|
||||
continuation.suspend();
|
||||
|
||||
if (complete_after>0)
|
||||
{
|
||||
TimerTask complete = new TimerTask()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("COMPLETED\n");
|
||||
continuation.complete();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
synchronized (_timer)
|
||||
{
|
||||
_timer.schedule(complete,complete_after);
|
||||
}
|
||||
}
|
||||
else if (complete_after==0)
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("COMPLETED\n");
|
||||
continuation.complete();
|
||||
}
|
||||
else if (resume_after>0)
|
||||
{
|
||||
TimerTask resume = new TimerTask()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
continuation.resume();
|
||||
}
|
||||
};
|
||||
synchronized (_timer)
|
||||
{
|
||||
_timer.schedule(resume,resume_after);
|
||||
}
|
||||
}
|
||||
else if (resume_after==0)
|
||||
{
|
||||
continuation.resume();
|
||||
}
|
||||
}
|
||||
else if (sleep_for>=0)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep(sleep_for);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("SLEPT\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("NORMAL\n");
|
||||
}
|
||||
}
|
||||
else if (continuation.isExpired())
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("TIMEOUT\n");
|
||||
}
|
||||
else if (continuation.isResumed())
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("RESUMED\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
response.setStatus(200);
|
||||
response.getOutputStream().println("unknown???\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static ContinuationListener __listener =
|
||||
new ContinuationListener()
|
||||
{
|
||||
public void onComplete(Continuation continuation)
|
||||
{
|
||||
((HttpServletResponse)continuation.getServletResponse()).addHeader("history","onComplete");
|
||||
}
|
||||
|
||||
public void onTimeout(Continuation continuation)
|
||||
{
|
||||
((HttpServletResponse)continuation.getServletResponse()).addHeader("history","onTimeout");
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
// ========================================================================
|
||||
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
|
||||
package org.eclipse.jetty.continuation;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.mortbay.jetty.Connector;
|
||||
import org.mortbay.jetty.Server;
|
||||
import org.mortbay.jetty.nio.SelectChannelConnector;
|
||||
import org.mortbay.jetty.servlet.Context;
|
||||
import org.mortbay.jetty.servlet.FilterHolder;
|
||||
import org.mortbay.jetty.servlet.ServletHandler;
|
||||
import org.mortbay.jetty.servlet.ServletHolder;
|
||||
import org.mortbay.util.IO;
|
||||
|
||||
|
||||
public class FauxContinuationTest extends ContinuationBase
|
||||
{
|
||||
protected Server _server = new Server();
|
||||
protected ServletHandler _servletHandler;
|
||||
protected SelectChannelConnector _connector;
|
||||
FilterHolder _filter;
|
||||
|
||||
protected void setUp() throws Exception
|
||||
{
|
||||
_connector = new SelectChannelConnector();
|
||||
_server.setConnectors(new Connector[]{ _connector });
|
||||
Context servletContext = new Context(Context.NO_SECURITY|Context.NO_SESSIONS);
|
||||
_server.setHandler(servletContext);
|
||||
_servletHandler=servletContext.getServletHandler();
|
||||
ServletHolder holder=new ServletHolder(_servlet);
|
||||
_servletHandler.addServletWithMapping(holder,"/");
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception
|
||||
{
|
||||
_server.stop();
|
||||
}
|
||||
|
||||
public void testFaux() throws Exception
|
||||
{
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","true");
|
||||
_server.start();
|
||||
_port=_connector.getLocalPort();
|
||||
|
||||
doit("FauxContinuation");
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected String toString(InputStream in) throws IOException
|
||||
{
|
||||
return IO.toString(in);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
// ========================================================================
|
||||
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
|
||||
package org.eclipse.jetty.continuation;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.mortbay.jetty.Connector;
|
||||
import org.mortbay.jetty.Server;
|
||||
import org.mortbay.jetty.nio.SelectChannelConnector;
|
||||
import org.mortbay.jetty.servlet.Context;
|
||||
import org.mortbay.jetty.servlet.FilterHolder;
|
||||
import org.mortbay.jetty.servlet.ServletHandler;
|
||||
import org.mortbay.jetty.servlet.ServletHolder;
|
||||
import org.mortbay.util.IO;
|
||||
|
||||
|
||||
public class Jetty6ContinuationTest extends ContinuationBase
|
||||
{
|
||||
protected Server _server = new Server();
|
||||
protected ServletHandler _servletHandler;
|
||||
protected SelectChannelConnector _connector;
|
||||
FilterHolder _filter;
|
||||
|
||||
protected void setUp() throws Exception
|
||||
{
|
||||
_connector = new SelectChannelConnector();
|
||||
_server.setConnectors(new Connector[]{ _connector });
|
||||
Context servletContext = new Context(Context.NO_SECURITY|Context.NO_SESSIONS);
|
||||
_server.setHandler(servletContext);
|
||||
_servletHandler=servletContext.getServletHandler();
|
||||
ServletHolder holder=new ServletHolder(_servlet);
|
||||
_servletHandler.addServletWithMapping(holder,"/");
|
||||
_filter=_servletHandler.addFilterWithMapping(ContinuationFilter.class,"/*",0);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception
|
||||
{
|
||||
_server.stop();
|
||||
}
|
||||
|
||||
public void testJetty6() throws Exception
|
||||
{
|
||||
_filter.setInitParameter("debug","true");
|
||||
_filter.setInitParameter("faux","false");
|
||||
_server.start();
|
||||
_port=_connector.getLocalPort();
|
||||
|
||||
doit("Jetty6Continuation");
|
||||
}
|
||||
|
||||
|
||||
protected String toString(InputStream in) throws IOException
|
||||
{
|
||||
return IO.toString(in);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue