diff --git a/examples/async-rest/async-rest-jar/pom.xml b/examples/async-rest/async-rest-jar/pom.xml
index 22e29368442..008dfc8067a 100644
--- a/examples/async-rest/async-rest-jar/pom.xml
+++ b/examples/async-rest/async-rest-jar/pom.xml
@@ -23,6 +23,7 @@
javax.servlet
javax.servlet-api
+ 3.1-b01
provided
diff --git a/examples/async-rest/async-rest-webapp/pom.xml b/examples/async-rest/async-rest-webapp/pom.xml
index 3f100f29449..318bf7ce01e 100644
--- a/examples/async-rest/async-rest-webapp/pom.xml
+++ b/examples/async-rest/async-rest-webapp/pom.xml
@@ -27,6 +27,7 @@
javax.servlet
javax.servlet-api
+ 3.1-b01
provided
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java
index 397d9859a23..6a1ef0b8f44 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java
@@ -179,5 +179,19 @@ public class NoSqlSession extends AbstractSession
{
return _version;
}
+
+ @Override
+ public void setClusterId(String clusterId)
+ {
+ super.setClusterId(clusterId);
+ }
+
+ @Override
+ public void setNodeId(String nodeId)
+ {
+ super.setNodeId(nodeId);
+ }
+
+
}
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
index 51fed8921c9..dfa77efd63b 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
@@ -307,6 +307,34 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
_saveAllAttributes = saveAllAttributes;
}
+ /* ------------------------------------------------------------ */
+ @Override
+ public void renewSessionId(String oldClusterId, String oldNodeId, String newClusterId, String newNodeId)
+ {
+
+ // Take the old session out of the list of sessions
+ // Change to the new id
+ // Put it back into the list of sessions
+ // Update permanent storage
+
+ synchronized (this)
+ {
+ try
+ {
+ NoSqlSession session = _sessions.remove(oldClusterId);
+ update (session, newClusterId, newNodeId);
+ session.setClusterId(newClusterId);
+ session.setNodeId(newNodeId);
+ _sessions.put(newClusterId, session);
+ }
+ catch (Exception e)
+ {
+ __log.warn(e);
+ }
+ }
+ }
+
+
/* ------------------------------------------------------------ */
abstract protected NoSqlSession loadSession(String clusterId);
@@ -318,5 +346,8 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
/* ------------------------------------------------------------ */
abstract protected boolean remove(NoSqlSession session);
+
+ /* ------------------------------------------------------------ */
+ abstract protected void update(NoSqlSession session, String newClusterId, String newNodeId) throws Exception;
}
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
index 74621901cff..1c10c450c8c 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
@@ -25,6 +25,7 @@ import java.util.Random;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@@ -69,6 +70,9 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
final static DBObject __valid_false = new BasicDBObject(MongoSessionManager.__VALID,false);
final static DBObject __valid_true = new BasicDBObject(MongoSessionManager.__VALID,true);
+ final static long __defaultScavengeDelay = 10 * 6 * 1000; // wait at least 10 minutes
+ final static long __defaultScavengePeriod = 30 * 60 * 1000; // every 30 minutes
+
final DBCollection _sessions;
protected Server _server;
@@ -79,8 +83,8 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
- private long _scavengeDelay = 30 * 60 * 1000; // every 30 minutes
- private long _scavengePeriod = 10 * 6 * 1000; // wait at least 10 minutes
+ private long _scavengeDelay = __defaultScavengeDelay;
+ private long _scavengePeriod = __defaultScavengePeriod;
/**
@@ -145,8 +149,8 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
*/
protected void scavenge()
{
- __log.debug("SessionIdManager:scavenge:called with delay" + _scavengeDelay);
-
+ long now = System.currentTimeMillis();
+ __log.debug("SessionIdManager:scavenge:at " + now);
synchronized (_sessionsIds)
{
/*
@@ -158,7 +162,8 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
*/
BasicDBObject query = new BasicDBObject();
query.put(MongoSessionManager.__ID,new BasicDBObject("$in", _sessionsIds ));
- query.put(MongoSessionManager.__ACCESSED, new BasicDBObject("$lt",System.currentTimeMillis() - _scavengeDelay));
+
+ query.put(MongoSessionManager.__ACCESSED, new BasicDBObject("$lt",now - _scavengePeriod));
DBCursor checkSessions = _sessions.find(query, new BasicDBObject(MongoSessionManager.__ID, 1));
@@ -301,16 +306,22 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
*/
public void setScavengeDelay(long scavengeDelay)
{
- this._scavengeDelay = scavengeDelay;
+ if (scavengeDelay <= 0)
+ this._scavengeDelay = __defaultScavengeDelay;
+ else
+ this._scavengeDelay = TimeUnit.SECONDS.toMillis(scavengeDelay);
}
/* ------------------------------------------------------------ */
public void setScavengePeriod(long scavengePeriod)
{
- this._scavengePeriod = scavengePeriod;
+ if (scavengePeriod <= 0)
+ _scavengePeriod = __defaultScavengePeriod;
+ else
+ _scavengePeriod = TimeUnit.SECONDS.toMillis(scavengePeriod);
}
-
+
/* ------------------------------------------------------------ */
public void setPurgeDelay(long purgeDelay)
{
@@ -539,5 +550,36 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
return clusterId;
}
+
+
+ /* ------------------------------------------------------------ */
+ @Override
+ public void renewSessionId(String oldClusterId, String oldNodeId, HttpServletRequest request)
+ {
+ //generate a new id
+ String newClusterId = newSessionId(request.hashCode());
+
+ synchronized (_sessionsIds)
+ {
+ _sessionsIds.remove(oldClusterId);//remove the old one from the list
+ _sessionsIds.add(newClusterId); //add in the new session id to the list
+
+ //tell all contexts to update the id
+ Handler[] contexts = _server.getChildHandlersByClass(ContextHandler.class);
+ for (int i=0; contexts!=null && i{}",httpSession.getId(),newSession.getId());
- httpSession=newSession;
+ if (httpSession instanceof AbstractSession)
+ {
+ AbstractSession abstractSession = (AbstractSession)httpSession;
+ String oldId = abstractSession.getId();
+ abstractSession.renewId(request);
+ abstractSession.setAttribute(AbstractSession.SESSION_KNOWN_ONLY_TO_AUTHENTICATED, Boolean.TRUE);
+ if (abstractSession.isIdChanged() && response != null && (response instanceof Response))
+ ((Response)response).addCookie(abstractSession.getSessionManager().getSessionCookie(abstractSession, request.getContextPath(), request.isSecure()));
+ LOG.debug("renew {}->{}",oldId,abstractSession.getId());
+ }
+ else
+ LOG.warn("Unable to renew session "+httpSession);
+
+ return httpSession;
}
}
}
diff --git a/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/SessionAuthentication.java b/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/SessionAuthentication.java
index b7406e75563..3105d4baa61 100644
--- a/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/SessionAuthentication.java
+++ b/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/SessionAuthentication.java
@@ -33,6 +33,7 @@ import org.eclipse.jetty.security.SecurityHandler;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.UserIdentity;
import org.eclipse.jetty.server.UserIdentity.Scope;
+import org.eclipse.jetty.server.session.AbstractSession;
import org.eclipse.jetty.server.session.AbstractSessionManager;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
@@ -107,7 +108,7 @@ public class SessionAuthentication implements Authentication.User, Serializable,
if (security!=null)
security.logout(this);
if (_session!=null)
- _session.removeAttribute(AbstractSessionManager.SESSION_KNOWN_ONLY_TO_AUTHENTICATED);
+ _session.removeAttribute(AbstractSession.SESSION_KNOWN_ONLY_TO_AUTHENTICATED);
}
@Override
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java
index df82e9f9c59..e5ce0f2fe92 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java
@@ -69,6 +69,7 @@ import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandler.Context;
+import org.eclipse.jetty.server.session.AbstractSession;
import org.eclipse.jetty.server.session.AbstractSessionManager;
import org.eclipse.jetty.util.Attributes;
import org.eclipse.jetty.util.AttributesMap;
@@ -1218,7 +1219,15 @@ public class Request implements HttpServletRequest
if (session == null)
throw new IllegalStateException("No session");
- AbstractSessionManager.renewSession(this, session, getRemoteUser()!=null);
+ if (session instanceof AbstractSession)
+ {
+ AbstractSession abstractSession = ((AbstractSession)session);
+ abstractSession.renewId(this);
+ if (getRemoteUser() != null)
+ abstractSession.setAttribute(AbstractSession.SESSION_KNOWN_ONLY_TO_AUTHENTICATED, Boolean.TRUE);
+ if (abstractSession.isIdChanged())
+ _channel.getResponse().addCookie(_sessionManager.getSessionCookie(abstractSession, getContextPath(), isSecure()));
+ }
return session.getId();
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java
index 71412fdef7b..328cf536e63 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java
@@ -59,6 +59,8 @@ public interface SessionIdManager extends LifeCycle
*/
public String newSessionId(HttpServletRequest request,long created);
+
+
public String getWorkerName();
@@ -78,4 +80,15 @@ public interface SessionIdManager extends LifeCycle
*/
public String getNodeId(String clusterId,HttpServletRequest request);
+
+ /* ------------------------------------------------------------ */
+ /** Change the existing session id.
+ *
+ * @param oldClusterId
+ * @param oldNodeId
+ * @param request
+ */
+ public void renewSessionId(String oldClusterId, String oldNodeId, HttpServletRequest request);
+
+
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionManager.java
index 76a2eaacdd4..0107c108306 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionManager.java
@@ -304,4 +304,14 @@ public interface SessionManager extends LifeCycle
* @param remote True if absolute URLs are check for remoteness before being session encoded.
*/
public void setCheckingRemoteSessionIdEncoding(boolean remote);
+
+ /* ------------------------------------------------------------ */
+ /** Change the existing session id.
+ *
+ * @param oldClusterId
+ * @param oldNodeId
+ * @param newClusterId
+ * @param newNodeId
+ */
+ public void renewSessionId(String oldClusterId, String oldNodeId, String newClusterId, String newNodeId);
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSession.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSession.java
index 89b9612cda3..4e61a54a57d 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSession.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSession.java
@@ -36,6 +36,7 @@ import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionContext;
import javax.servlet.http.HttpSessionEvent;
+import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.util.log.Logger;
/**
@@ -49,10 +50,10 @@ import org.eclipse.jetty.util.log.Logger;
public abstract class AbstractSession implements AbstractSessionManager.SessionIf
{
final static Logger LOG = SessionHandler.LOG;
-
+ public final static String SESSION_KNOWN_ONLY_TO_AUTHENTICATED="org.eclipse.jetty.security.sessionKnownOnlytoAuthenticated";
+ private String _clusterId; // ID unique within cluster
+ private String _nodeId; // ID unique within node
private final AbstractSessionManager _manager;
- private final String _clusterId; // ID unique within cluster
- private final String _nodeId; // ID unique within node
private final Map _attributes=new HashMap();
private boolean _idChanged;
private final long _created;
@@ -271,7 +272,34 @@ public abstract class AbstractSession implements AbstractSessionManager.SessionI
return (String[])_attributes.keySet().toArray(a);
}
}
+
+
+ /* ------------------------------------------------------------ */
+ public void renewId(HttpServletRequest request)
+ {
+ _manager._sessionIdManager.renewSessionId(getClusterId(), getNodeId(), request);
+ setIdChanged(true);
+ }
+
+ /* ------------------------------------------------------------- */
+ public SessionManager getSessionManager()
+ {
+ return _manager;
+ }
+
+ /* ------------------------------------------------------------ */
+ protected void setClusterId (String clusterId)
+ {
+ _clusterId = clusterId;
+ }
+ /* ------------------------------------------------------------ */
+ protected void setNodeId (String nodeId)
+ {
+ _nodeId = nodeId;
+ }
+
+
/* ------------------------------------------------------------ */
protected boolean access(long time)
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
index e26ae62ed5c..2e8fde43797 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
@@ -117,32 +117,46 @@ public abstract class AbstractSessionIdManager extends AbstractLifeCycle impleme
}
// pick a new unique ID!
- String id=null;
- while (id==null||id.length()==0||idInUse(id))
- {
- long r0=_weakRandom
- ?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^(((long)request.hashCode())<<32))
- :_random.nextLong();
- if (r0<0)
- r0=-r0;
- long r1=_weakRandom
- ?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^(((long)request.hashCode())<<32))
- :_random.nextLong();
- if (r1<0)
- r1=-r1;
- id=Long.toString(r0,36)+Long.toString(r1,36);
-
- //add in the id of the node to ensure unique id across cluster
- //NOTE this is different to the node suffix which denotes which node the request was received on
- if (_workerName!=null)
- id=_workerName + id;
- }
+ String id = newSessionId(request.hashCode());
request.setAttribute(__NEW_SESSION_ID,id);
return id;
}
}
+ /* ------------------------------------------------------------ */
+ public String newSessionId(long seedTerm)
+ {
+ // pick a new unique ID!
+ String id=null;
+ while (id==null||id.length()==0||idInUse(id))
+ {
+ long r0=_weakRandom
+ ?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
+ :_random.nextLong();
+ if (r0<0)
+ r0=-r0;
+ long r1=_weakRandom
+ ?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
+ :_random.nextLong();
+ if (r1<0)
+ r1=-r1;
+ id=Long.toString(r0,36)+Long.toString(r1,36);
+
+ //add in the id of the node to ensure unique id across cluster
+ //NOTE this is different to the node suffix which denotes which node the request was received on
+ if (_workerName!=null)
+ id=_workerName + id;
+ }
+ return id;
+ }
+
+
+ /* ------------------------------------------------------------ */
+ public abstract void renewSessionId(String oldClusterId, String oldNodeId, HttpServletRequest request);
+
+
+
/* ------------------------------------------------------------ */
@Override
protected void doStart() throws Exception
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionManager.java
index cca7aaf9109..605f1ca5ddd 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionManager.java
@@ -75,7 +75,7 @@ public abstract class AbstractSessionManager extends AbstractLifeCycle implement
new HashSet(
Arrays.asList(new SessionTrackingMode[]{SessionTrackingMode.COOKIE,SessionTrackingMode.URL})));
- public final static String SESSION_KNOWN_ONLY_TO_AUTHENTICATED="org.eclipse.jetty.security.sessionKnownOnlytoAuthenticated";
+
/* ------------------------------------------------------------ */
public final static int __distantFuture=60*60*24*7*52*20;
@@ -130,27 +130,6 @@ public abstract class AbstractSessionManager extends AbstractLifeCycle implement
protected final SampleStatistic _sessionTimeStats = new SampleStatistic();
- /* ------------------------------------------------------------ */
- public static HttpSession renewSession (HttpServletRequest request, HttpSession httpSession, boolean authenticated)
- {
- Map attributes = new HashMap();
-
- for (Enumeration e=httpSession.getAttributeNames();e.hasMoreElements();)
- {
- String name=e.nextElement();
- attributes.put(name,httpSession.getAttribute(name));
- httpSession.removeAttribute(name);
- }
-
- httpSession.invalidate();
- httpSession = request.getSession(true);
- if (authenticated)
- httpSession.setAttribute(SESSION_KNOWN_ONLY_TO_AUTHENTICATED, Boolean.TRUE);
- for (Map.Entry entry: attributes.entrySet())
- httpSession.setAttribute(entry.getKey(),entry.getValue());
- return httpSession;
- }
-
/* ------------------------------------------------------------ */
public AbstractSessionManager()
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java
index b4e7850c570..5966bfd88cb 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java
@@ -218,5 +218,40 @@ public class HashSessionIdManager extends AbstractSessionIdManager
sessions.clear();
}
}
+
+
+ /* ------------------------------------------------------------ */
+ public void renewSessionId (String oldClusterId, String oldNodeId, HttpServletRequest request)
+ {
+ //generate a new id
+ String newClusterId = newSessionId(request.hashCode());
+
+
+ synchronized (this)
+ {
+ Set> sessions = _sessions.remove(oldClusterId); //get the list of sessions with same id from other contexts
+ if (sessions!=null)
+ {
+ for (Iterator> iter = sessions.iterator(); iter.hasNext();)
+ {
+ WeakReference ref = iter.next();
+ HttpSession s = ref.get();
+ if (s == null)
+ {
+ continue;
+ }
+ else
+ {
+ if (s instanceof AbstractSession)
+ {
+ AbstractSession abstractSession = (AbstractSession)s;
+ abstractSession.getSessionManager().renewSessionId(oldClusterId, oldNodeId, newClusterId, getNodeId(newClusterId, request));
+ }
+ }
+ }
+ _sessions.put(newClusterId, sessions);
+ }
+ }
+ }
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
index 878365e0517..bb477fe7ac4 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
@@ -51,7 +51,7 @@ import org.eclipse.jetty.util.log.Logger;
*/
public class HashSessionManager extends AbstractSessionManager
{
- final static Logger __log = SessionHandler.LOG;
+ final static Logger LOG = SessionHandler.LOG;
protected final ConcurrentMap _sessions=new ConcurrentHashMap();
private static int __id;
@@ -152,10 +152,10 @@ public class HashSessionManager extends AbstractSessionManager
public int getSessions()
{
int sessions=super.getSessions();
- if (__log.isDebugEnabled())
+ if (LOG.isDebugEnabled())
{
if (_sessions.size()!=sessions)
- __log.warn("sessions: "+_sessions.size()+"!="+sessions);
+ LOG.warn("sessions: "+_sessions.size()+"!="+sessions);
}
return sessions;
}
@@ -225,7 +225,7 @@ public class HashSessionManager extends AbstractSessionManager
}
catch (Exception e)
{
- __log.warn(e);
+ LOG.warn(e);
}
}
};
@@ -320,7 +320,7 @@ public class HashSessionManager extends AbstractSessionManager
}
catch (Throwable t)
{
- __log.warn("Problem scavenging sessions", t);
+ LOG.warn("Problem scavenging sessions", t);
}
finally
{
@@ -348,7 +348,7 @@ public class HashSessionManager extends AbstractSessionManager
}
catch(Exception e)
{
- __log.warn(e);
+ LOG.warn(e);
}
}
@@ -398,6 +398,37 @@ public class HashSessionManager extends AbstractSessionManager
sessions=new ArrayList(_sessions.values());
}
}
+
+
+
+ /* ------------------------------------------------------------ */
+ /**
+ * @see org.eclipse.jetty.server.SessionManager#renewSessionId(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void renewSessionId(String oldClusterId, String oldNodeId, String newClusterId, String newNodeId)
+ {
+ try
+ {
+ Map sessions=_sessions;
+ if (sessions == null)
+ return;
+
+ HashedSession session = sessions.remove(oldClusterId);
+ if (session == null)
+ return;
+
+ session.remove(); //delete any previously saved session
+ session.setClusterId(newClusterId); //update ids
+ session.setNodeId(newNodeId);
+ session.save(); //save updated session: TODO consider only saving file if idled
+ sessions.put(newClusterId, session);
+ }
+ catch (Exception e)
+ {
+ LOG.warn(e);
+ }
+ }
/* ------------------------------------------------------------ */
@Override
@@ -467,7 +498,7 @@ public class HashSessionManager extends AbstractSessionManager
if (!_storeDir.canRead())
{
- __log.warn ("Unable to restore Sessions: Cannot read from Session storage directory "+_storeDir.getAbsolutePath());
+ LOG.warn ("Unable to restore Sessions: Cannot read from Session storage directory "+_storeDir.getAbsolutePath());
return;
}
@@ -503,11 +534,11 @@ public class HashSessionManager extends AbstractSessionManager
if (file.exists())
{
file.delete();
- __log.warn("Deleting file for unrestorable session "+idInCuster, e);
+ LOG.warn("Deleting file for unrestorable session "+idInCuster, e);
}
}
else
- __log.warn("Problem restoring session "+idInCuster, e);
+ LOG.warn("Problem restoring session "+idInCuster, e);
}
return null;
@@ -523,12 +554,12 @@ public class HashSessionManager extends AbstractSessionManager
if (!_storeDir.canWrite())
{
- __log.warn ("Unable to save Sessions: Session persistence storage directory "+_storeDir.getAbsolutePath()+ " is not writeable");
+ LOG.warn ("Unable to save Sessions: Session persistence storage directory "+_storeDir.getAbsolutePath()+ " is not writeable");
return;
}
for (HashedSession session : _sessions.values())
- session.save(true);
+ session.save(reactivate);
}
/* ------------------------------------------------------------ */
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
index 550d0520404..32314109b5e 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
@@ -88,8 +88,16 @@ public class HashedSession extends AbstractSession
throws IllegalStateException
{
super.doInvalidate();
-
- // Remove from the disk
+ remove();
+ }
+
+
+ /* ------------------------------------------------------------ */
+ /**
+ * Remove from the disk
+ */
+ synchronized void remove ()
+ {
if (_hashSessionManager._storeDir!=null && getId()!=null)
{
String id=getId();
@@ -107,41 +115,57 @@ public class HashedSession extends AbstractSession
if (LOG.isDebugEnabled())
LOG.debug("Saving {} {}",super.getId(),reactivate);
- File file = null;
- FileOutputStream fos = null;
-
try
{
- file = new File(_hashSessionManager._storeDir, super.getId());
-
- if (file.exists())
- file.delete();
- file.createNewFile();
- fos = new FileOutputStream(file);
willPassivate();
- save(fos);
+ save();
if (reactivate)
didActivate();
else
clearAttributes();
}
catch (Exception e)
- {
- saveFailed(); // We won't try again for this session
-
+ {
LOG.warn("Problem saving session " + super.getId(), e);
-
+ _idled=false; // assume problem was before _values.clear();
+ }
+ }
+ }
+
+
+
+ synchronized void save ()
+ throws Exception
+ {
+ File file = null;
+ FileOutputStream fos = null;
+ if (!_saveFailed && _hashSessionManager._storeDir != null)
+ {
+ try
+ {
+ file = new File(_hashSessionManager._storeDir, super.getId());
+ if (file.exists())
+ file.delete();
+ file.createNewFile();
+ fos = new FileOutputStream(file);
+ save(fos);
+ }
+ catch (Exception e)
+ {
+ saveFailed();
if (fos != null)
{
// Must not leave the file open if the saving failed
IO.close(fos);
// No point keeping the file if we didn't save the whole session
file.delete();
- _idled=false; // assume problem was before _values.clear();
+ throw e;
}
}
}
}
+
+
/* ------------------------------------------------------------ */
public synchronized void save(OutputStream os) throws IOException
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
index 58868d8f08b..61b7b983bf5 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
@@ -386,6 +386,28 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
}
}
}
+
+
+ public void addSession(String id)
+ {
+ if (id == null)
+ return;
+
+ synchronized (_sessionIds)
+ {
+ try
+ {
+ insert(id);
+ _sessionIds.add(id);
+ }
+ catch (Exception e)
+ {
+ LOG.warn("Problem storing session id="+id, e);
+ }
+ }
+ }
+
+
public void removeSession(HttpSession session)
{
@@ -507,6 +529,35 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
}
+ public void renewSessionId (String oldClusterId, String oldNodeId, HttpServletRequest request)
+ {
+ //generate a new id
+ String newClusterId = newSessionId(request.hashCode());
+
+ synchronized (_sessionIds)
+ {
+ removeSession(oldClusterId);//remove the old one from the list (and database)
+ addSession(newClusterId); //add in the new session id to the list (and database)
+
+ //tell all contexts to update the id
+ Handler[] contexts = _server.getChildHandlersByClass(ContextHandler.class);
+ for (int i=0; contexts!=null && iexamples/embedded
examples/async-rest
jetty-rewrite
+ jetty-nosql
+ tests/test-sessions
diff --git a/tests/test-sessions/pom.xml b/tests/test-sessions/pom.xml
index 546298273a6..aca168278bf 100644
--- a/tests/test-sessions/pom.xml
+++ b/tests/test-sessions/pom.xml
@@ -32,6 +32,7 @@
test-sessions-common
test-hash-sessions
test-jdbc-sessions
- test-mongodb-sessions
+
+
diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java
new file mode 100644
index 00000000000..f2e7f69bd56
--- /dev/null
+++ b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java
@@ -0,0 +1,39 @@
+package org.eclipse.jetty.server.session;
+
+import java.io.File;
+
+import org.eclipse.jetty.server.SessionManager;
+import org.junit.Test;
+
+public class SessionRenewTest extends AbstractSessionRenewTest
+{
+
+ @Override
+ public AbstractTestServer createServer(int port, int max, int scavenge)
+ {
+ return new HashTestServer(port, max, scavenge)
+ {
+
+ @Override
+ public SessionManager newSessionManager()
+ {
+ HashSessionManager sessionManager = (HashSessionManager)super.newSessionManager();
+ sessionManager.setSavePeriod(2);
+ File tmpDir = new File(System.getProperty("java.io.tmpdir"), "hash-session-renew-test");
+ tmpDir.deleteOnExit();
+ tmpDir.mkdirs();
+ sessionManager.setStoreDirectory(tmpDir);
+ return sessionManager;
+ }
+
+ };
+ }
+
+ @Test
+ public void testSessionRenewal() throws Exception
+ {
+ super.testSessionRenewal();
+ }
+
+
+}
diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java
index 1267890e07a..7f7149e018d 100644
--- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java
+++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java
@@ -18,7 +18,6 @@
package org.eclipse.jetty.server.session;
-import org.eclipse.jetty.util.log.Log;
import org.junit.Test;
/**
diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/MaxInactiveMigrationTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/MaxInactiveMigrationTest.java
index 4941f4a7cc0..40546ebc83a 100644
--- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/MaxInactiveMigrationTest.java
+++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/MaxInactiveMigrationTest.java
@@ -25,17 +25,17 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.util.concurrent.Future;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.util.log.Log;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -73,7 +73,6 @@ public class MaxInactiveMigrationTest
testServer1.start();
testServer2.start();
client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
}
@@ -99,22 +98,19 @@ public class MaxInactiveMigrationTest
int port=server.getPort();
//Log.getLog().setDebugEnabled(true);
-
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port + "" + "/test");
+ Request request = client.newRequest("http://localhost:" + port + "" + "/test");
if (sessionCookie != null)
- exchange1.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
+ request.header("Cookie", sessionCookie);
+ Future future = request.send();
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK, response.status());
- sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
- return exchange1.getResponseContent();
+ return response.contentAsString();
}
diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java
new file mode 100644
index 00000000000..62a43e33e85
--- /dev/null
+++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java
@@ -0,0 +1,22 @@
+package org.eclipse.jetty.server.session;
+
+import org.junit.Test;
+
+public class SessionRenewTest extends AbstractSessionRenewTest
+{
+
+ @Override
+ public AbstractTestServer createServer(int port, int max, int scavenge)
+ {
+ return new JdbcTestServer(port, max, scavenge);
+ }
+
+ @Test
+ public void testSessionRenewal() throws Exception
+ {
+ super.testSessionRenewal();
+ }
+
+
+
+}
diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSavingTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSavingTest.java
index 56c93e90380..1427763bb96 100644
--- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSavingTest.java
+++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSavingTest.java
@@ -18,7 +18,6 @@
package org.eclipse.jetty.server.session;
-import org.eclipse.jetty.util.log.Log;
import org.junit.Test;
/**
@@ -31,7 +30,7 @@ public class SessionValueSavingTest extends AbstractSessionValueSavingTest
return new JdbcTestServer(port,max,scavenge);
}
- @Override
+ @Test
public void testSessionValueSaving() throws Exception
{
super.testSessionValueSaving();
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
index 2b673bb016d..a82f01b6ed0 100644
--- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
@@ -20,7 +20,6 @@ package org.eclipse.jetty.nosql.mongodb;
import org.eclipse.jetty.server.session.AbstractLastAccessTimeTest;
import org.eclipse.jetty.server.session.AbstractTestServer;
-import org.junit.Ignore;
import org.junit.Test;
public class LastAccessTimeTest extends AbstractLastAccessTimeTest
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
index 40781c62c63..ba96ec6b5f9 100644
--- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
@@ -58,10 +58,10 @@ public class MongoTestServer extends AbstractTestServer
{
try
{
- System.err.println("MongoTestServer:SessionIdManager:" + _maxInactivePeriod + "/" + _scavengePeriod);
+ System.err.println("MongoTestServer:SessionIdManager scavenge: delay:"+ _scavengePeriod + " period:"+_maxInactivePeriod);
MongoSessionIdManager idManager = new MongoSessionIdManager(_server);
idManager.setWorkerName("w"+(__workers++));
- idManager.setScavengeDelay((int)TimeUnit.SECONDS.toMillis(_scavengePeriod));
+ idManager.setScavengeDelay((_scavengePeriod));
idManager.setScavengePeriod(_maxInactivePeriod);
return idManager;
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionRenewTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionRenewTest.java
new file mode 100644
index 00000000000..6831281a9b2
--- /dev/null
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionRenewTest.java
@@ -0,0 +1,39 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2012 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.nosql.mongodb;
+
+import org.eclipse.jetty.server.session.AbstractSessionRenewTest;
+import org.eclipse.jetty.server.session.AbstractTestServer;
+import org.junit.Test;
+
+public class SessionRenewTest extends AbstractSessionRenewTest
+{
+
+ @Override
+ public AbstractTestServer createServer(int port, int max, int scavenge)
+ {
+ return new MongoTestServer(port, max, scavenge);
+ }
+
+ @Test
+ public void testSessionRenewal() throws Exception
+ {
+ super.testSessionRenewal();
+ }
+}
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
index 81ab3a09c57..57306b68e71 100644
--- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
@@ -26,6 +26,7 @@ import java.io.PrintWriter;
import java.io.Serializable;
import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
+import java.util.concurrent.Future;
import javax.management.remote.JMXServiceURL;
import javax.servlet.ServletException;
@@ -33,9 +34,9 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.jmx.ConnectorServer;
import org.eclipse.jetty.jmx.MBeanContainer;
import org.eclipse.jetty.nosql.NoSqlSession;
@@ -51,31 +52,31 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
public AbstractTestServer createServer(int port, int max, int scavenge)
{
-// ConnectorServer srv = null;
+ ConnectorServer srv = null;
try
{
-// srv = new ConnectorServer(
-// new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:0/jettytest"),
-// "org.eclipse.jetty:name=rmiconnectorserver");
-// srv.start();
+ srv = new ConnectorServer(
+ new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:0/jettytest"),
+ "org.eclipse.jetty:name=rmiconnectorserver");
+ srv.start();
MongoTestServer server = new MongoTestServer(port,max,scavenge,true);
-// MBeanContainer mbean = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
-//
-// server.getServer().getContainer().addEventListener(mbean);
-// server.getServer().addBean(mbean);
-//
-// mbean.start();
+ MBeanContainer mbean = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
+
+ //server.getServer().getContainer().addEventListener(mbean);
+ server.getServer().addBean(mbean);
+
+ //mbean.start();
return server;
}
-// catch (MalformedURLException e)
-// {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
+ catch (MalformedURLException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
catch (Exception e)
{
// TODO Auto-generated catch block
@@ -86,7 +87,7 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
}
@Test
- @Ignore ("requires mongodb server")
+ //@Ignore ("requires mongodb server")
public void testSessionValueSaving() throws Exception
{
String contextPath = "";
@@ -101,7 +102,6 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
@@ -109,19 +109,17 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
{ "0", "null" };
// Perform one request to server1 to create a session
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
+ Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
+ Future future = request.send();
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
- String[] sessionTestResponse = exchange1.getResponseContent().split("/");
+ String[] sessionTestResponse = response.contentAsString().split("/");
assertTrue(Long.parseLong(sessionTestValue[0]) < Long.parseLong(sessionTestResponse[0]));
sessionTestValue = sessionTestResponse;
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=","$1\\$Path=");
@@ -135,22 +133,21 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
for (int i = 0; i < 10; ++i)
{
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port1 + contextPath + servletMapping);
- exchange2.getRequestFields().add("Cookie",sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ Request request2 = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping);
+ request2.header("Cookie",sessionCookie);
+ Future future2 = request2.send();
+ ContentResponse response2 = future2.get();
+
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
- sessionTestResponse = exchange2.getResponseContent().split("/");
+ sessionTestResponse = response2.contentAsString().split("/");
assertTrue(Long.parseLong(sessionTestValue[0]) < Long.parseLong(sessionTestResponse[0]));
assertTrue(Long.parseLong(sessionTestValue[1]) < Long.parseLong(sessionTestResponse[1]));
sessionTestValue = sessionTestResponse;
- String setCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ String setCookie = response2.headers().getStringField("Set-Cookie");
if (setCookie != null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=","$1\\$Path=");
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
index f7ff5476d25..b68a8fa883a 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
@@ -18,9 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Collections;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -28,14 +30,14 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
@@ -67,31 +69,25 @@ public abstract class AbstractClientCrossContextSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Perform a request to contextA
- ContentExchange exchangeA = new ContentExchange(true);
- exchangeA.setMethod(HttpMethods.GET);
- exchangeA.setURL("http://localhost:" + port + contextA + servletMapping);
- client.send(exchangeA);
- exchangeA.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchangeA.getResponseStatus());
- String sessionCookie = exchangeA.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET("http://localhost:" + port + contextA + servletMapping);
+ ContentResponse response = future.get();
+
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Perform a request to contextB with the same session cookie
- ContentExchange exchangeB = new ContentExchange(true);
- exchangeB.setMethod(HttpMethods.GET);
- exchangeB.setURL("http://localhost:" + port + contextB + servletMapping);
- System.err.println("Cookie = "+sessionCookie);
- exchangeB.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchangeB);
- exchangeB.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchangeB.getResponseStatus());
+ Request request = client.newRequest("http://localhost:" + port + contextB + servletMapping);
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse responseB = future.get();
+ assertEquals(HttpServletResponse.SC_OK,responseB.status());
assertEquals(servletA.sessionId, servletB.sessionId);
}
finally
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
index c5f1543bf85..8944431fa28 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
@@ -18,9 +18,12 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -28,12 +31,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
@@ -58,38 +61,32 @@ public abstract class AbstractImmortalSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- int value = 42;
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=set&value=" + value);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
- String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
+ int value = 42;
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=set&value=" + value);
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
- String response = exchange.getResponseContent();
- assertEquals(response.trim(),String.valueOf(value));
+ String resp = response.contentAsString();
+ assertEquals(resp.trim(),String.valueOf(value));
// Let's wait for the scavenger to run, waiting 2.5 times the scavenger period
Thread.sleep(scavengePeriod * 2500L);
- // Be sure the session is still there
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=get");
- exchange.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
- response = exchange.getResponseContent();
- assertEquals(String.valueOf(value),response.trim());
+ // Be sure the session is still there
+ Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=get");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+ resp = response.contentAsString();
+ assertEquals(String.valueOf(value),resp.trim());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractInvalidationSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractInvalidationSessionTest.java
index ce157d9406d..ff27fd3a0b0 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractInvalidationSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractInvalidationSessionTest.java
@@ -18,8 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -27,12 +30,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
+import org.eclipse.jetty.server.NetworkConnector;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractInvalidationSessionTest
@@ -53,16 +56,19 @@ public abstract class AbstractInvalidationSessionTest
server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
server1.start();
int port1 = server1.getPort();
+ System.err.println("Port1="+port1);
try
{
AbstractTestServer server2 = createServer(0);
server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
server2.start();
int port2=server2.getPort();
+ System.err.println("port2="+port2);
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
+ QueuedThreadPool executor = new QueuedThreadPool();
+ client.setExecutor(executor);
client.start();
try
{
@@ -71,45 +77,37 @@ public abstract class AbstractInvalidationSessionTest
urls[1] = "http://localhost:" + port2 + contextPath + servletMapping;
// Create the session on node1
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL(urls[0] + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET(urls[0] + "?action=init");
+ ContentResponse response1 = future.get();
+
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Be sure the session is also present in node2
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL(urls[1] + "?action=increment");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+
+ Request request2 = client.newRequest(urls[1] + "?action=increment");
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
// Invalidate on node1
- exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL(urls[0] + "?action=invalidate");
- exchange1.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
+ Request request1 = client.newRequest(urls[0] + "?action=invalidate");
+ request1.header("Cookie", sessionCookie);
+ future = request1.send();
+ assertEquals(HttpServletResponse.SC_OK, response1.status());
pause();
// Be sure on node2 we don't see the session anymore
- exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL(urls[1] + "?action=test");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ request2 = client.newRequest(urls[1] + "?action=test");
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
index bd5b0d6536d..c878ba60009 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
@@ -18,26 +18,36 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractLastAccessTimeTest
+ *
+ * This test checks that a session can migrate from node A to node B, kept in use in node B
+ * past the time at which it would have expired due to inactivity on node A but is NOT
+ * scavenged by node A. In other words, it tests that a session that migrates from one node
+ * to another is not timed out on the original node.
*/
public abstract class AbstractLastAccessTimeTest
{
@@ -48,10 +58,15 @@ public abstract class AbstractLastAccessTimeTest
{
String contextPath = "";
String servletMapping = "/server";
- int maxInactivePeriod = 8;
- int scavengePeriod = 2;
+ int maxInactivePeriod = 8; //session will timeout after 8 seconds
+ int scavengePeriod = 2; //scavenging occurs every 2 seconds
AbstractTestServer server1 = createServer(0, maxInactivePeriod, scavengePeriod);
- server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
+ TestServlet servlet1 = new TestServlet();
+ ServletHolder holder1 = new ServletHolder(servlet1);
+ ServletContextHandler context = server1.addContext(contextPath);
+ TestSessionListener listener1 = new TestSessionListener();
+ context.addEventListener(listener1);
+ context.addServlet(holder1, servletMapping);
server1.start();
int port1=server1.getPort();
try
@@ -63,19 +78,15 @@ public abstract class AbstractLastAccessTimeTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Perform one request to server1 to create a session
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
- assertEquals("test", exchange1.getResponseContent());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK, response1.status());
+ assertEquals("test", response1.contentAsString());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -88,16 +99,14 @@ public abstract class AbstractLastAccessTimeTest
int requestInterval = 500;
for (int i = 0; i < maxInactivePeriod * (1000 / requestInterval); ++i)
{
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping);
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK , exchange2.getResponseStatus());
- assertEquals("test", exchange2.getResponseContent());
+ Request request = client.newRequest("http://localhost:" + port2 + contextPath + servletMapping);
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK , response2.status());
+ assertEquals("test", response2.contentAsString());
- String setCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ String setCookie = response2.headers().getStringField("Set-Cookie");
if (setCookie!=null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -108,17 +117,8 @@ public abstract class AbstractLastAccessTimeTest
// Let's wait for the scavenger to run, waiting 2.5 times the scavenger period
Thread.sleep(scavengePeriod * 2500L);
- // Access again server1, and ensure that we can still access the session
- exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping);
- exchange1.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
- //test that the session was kept alive by server 2 and still contains what server1 put in it
- assertEquals("test", exchange1.getResponseContent());
-
+ //check that the session was not scavenged over on server1 by ensuring that the SessionListener destroy method wasn't called
+ assertTrue (listener1.destroyed == false);
}
finally
{
@@ -136,8 +136,30 @@ public abstract class AbstractLastAccessTimeTest
}
}
+ public static class TestSessionListener implements HttpSessionListener
+ {
+ public boolean destroyed = false;
+ public boolean created = false;
+
+ @Override
+ public void sessionDestroyed(HttpSessionEvent se)
+ {
+ destroyed = true;
+ }
+
+ @Override
+ public void sessionCreated(HttpSessionEvent se)
+ {
+ created = true;
+ }
+ }
+
+
+
public static class TestServlet extends HttpServlet
{
+
+
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
@@ -146,7 +168,6 @@ public abstract class AbstractLastAccessTimeTest
{
HttpSession session = request.getSession(true);
session.setAttribute("test", "test");
-
sendResult(session, httpServletResponse.getWriter());
}
@@ -161,8 +182,6 @@ public abstract class AbstractLastAccessTimeTest
{
session.setAttribute("test", "test");
}
-
-
}
}
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLightLoadTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLightLoadTest.java
index 850cbd9d05b..e709dbe02a9 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLightLoadTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLightLoadTest.java
@@ -18,12 +18,16 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
@@ -32,12 +36,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
@@ -70,7 +74,6 @@ public abstract class AbstractLightLoadTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType( HttpClient.CONNECTOR_SOCKET );
client.start();
try
{
@@ -78,13 +81,10 @@ public abstract class AbstractLightLoadTest
urls[0] = "http://localhost:" + port1 + contextPath + servletMapping;
urls[1] = "http://localhost:" + port2 + contextPath + servletMapping;
- ContentExchange exchange1 = new ContentExchange( true );
- exchange1.setMethod( HttpMethods.GET );
- exchange1.setURL( urls[0] + "?action=init" );
- client.send( exchange1 );
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField( "Set-Cookie" );
+ Future future = client.GET( urls[0] + "?action=init" );
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField( "Set-Cookie" );
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -115,14 +115,12 @@ public abstract class AbstractLightLoadTest
executor.shutdownNow();
// Perform one request to get the result
- ContentExchange exchange2 = new ContentExchange( true );
- exchange2.setMethod( HttpMethods.GET );
- exchange2.setURL( urls[0] + "?action=result" );
- exchange2.getRequestFields().add( "Cookie", sessionCookie );
- client.send( exchange2 );
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
- String response = exchange2.getResponseContent();
+ Request request = client.newRequest( urls[0] + "?action=result" );
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
+ String response = response2.contentAsString();
System.out.println( "get = " + response );
assertEquals(response.trim(), String.valueOf( clientsCount * requestsCount ) );
}
@@ -155,11 +153,11 @@ public abstract class AbstractLightLoadTest
private final String sessionCookie;
private final String[] urls;
+
public Worker( CyclicBarrier barrier, int requestsCount, String sessionCookie, String[] urls )
{
this.client = new HttpClient();
- this.client.setConnectorType( HttpClient.CONNECTOR_SOCKET );
this.barrier = barrier;
this.requestsCount = requestsCount;
this.sessionCookie = sessionCookie;
@@ -186,18 +184,15 @@ public abstract class AbstractLightLoadTest
barrier.await();
Random random = new Random( System.nanoTime() );
-
+
for ( int i = 0; i < requestsCount; ++i )
{
int urlIndex = random.nextInt( urls.length );
-
- ContentExchange exchange = new ContentExchange( true );
- exchange.setMethod( HttpMethods.GET );
- exchange.setURL( urls[urlIndex] + "?action=increment" );
- exchange.getRequestFields().add( "Cookie", sessionCookie );
- client.send( exchange );
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ Request request = client.newRequest(urls[urlIndex] + "?action=increment");
+ request.header("Cookie", sessionCookie);
+ Future future = request.send();
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
// Wait for all workers to be done
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java
index 8965fa026d8..4eb77dc5799 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java
@@ -18,8 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -27,14 +30,13 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.SessionManager;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractLocalSessionScavengingTest
@@ -75,7 +77,6 @@ public abstract class AbstractLocalSessionScavengingTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
@@ -84,50 +85,43 @@ public abstract class AbstractLocalSessionScavengingTest
urls[1] = "http://localhost:" + port2 + contextPath + servletMapping;
// Create the session on node1
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL(urls[0] + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET(urls[0] + "?action=init");
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
- // Be sure the session is also present in node2
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL(urls[1] + "?action=test");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ // Be sure the session is also present in node2
+ org.eclipse.jetty.client.api.Request request = client.newRequest(urls[1] + "?action=test");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
// Wait for the scavenger to run on node1, waiting 2.5 times the scavenger period
pause(scavengePeriod);
// Check that node1 does not have any local session cached
- exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL(urls[0] + "?action=check");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
+ request = client.newRequest(urls[0] + "?action=check");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
// Wait for the scavenger to run on node2, waiting 2 times the scavenger period
// This ensures that the scavenger on node2 runs at least once.
pause(scavengePeriod);
- // Check that node2 does not have any local session cached
- exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL(urls[1] + "?action=check");
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ // Check that node2 does not have any local session cached
+ request = client.newRequest(urls[1] + "?action=check");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
index 880ee79b42e..a73d0bec3d4 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
@@ -18,8 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -27,13 +30,13 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractNewSessionTest
@@ -68,17 +71,13 @@ public abstract class AbstractNewSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=create");
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
- String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -88,13 +87,11 @@ public abstract class AbstractNewSessionTest
// The session is not there anymore, but we present an old cookie
// The server creates a new session, we must ensure we released all locks
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=old-create");
- exchange.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=old-create");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
index 60450d7fd16..997d848058d 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
@@ -18,8 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Random;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
@@ -28,12 +31,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractOrphanedSessionTest
@@ -68,18 +71,14 @@ public abstract class AbstractOrphanedSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Connect to server1 to create a session and get its session cookie
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -90,13 +89,11 @@ public abstract class AbstractOrphanedSessionTest
Thread.sleep(TimeUnit.SECONDS.toMillis(inactivePeriod + 2L * scavengePeriod));
// Perform one request to server2 to be sure that the session has been expired
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=check");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ Request request = client.newRequest("http://localhost:" + port2 + contextPath + servletMapping + "?action=check");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
index 347f8966b27..afa78dba51e 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
@@ -18,8 +18,11 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -27,12 +30,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
@@ -54,16 +54,12 @@ public abstract class AbstractReentrantRequestSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=reenter&port=" + port + "&path=" + contextPath + servletMapping);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=reenter&port=" + port + "&path=" + contextPath + servletMapping);
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
finally
{
@@ -103,16 +99,12 @@ public abstract class AbstractReentrantRequestSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + path + ";jsessionid="+session.getId()+"?action=none");
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ Future future = client.GET("http://localhost:" + port + path + ";jsessionid="+session.getId()+"?action=none");
+ ContentResponse resp = future.get();
+ assertEquals(HttpServletResponse.SC_OK,resp.status());
assertEquals("true",session.getAttribute("reentrant"));
}
finally
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractRemoveSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractRemoveSessionTest.java
index 613a8645ec2..0e5f3f04e85 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractRemoveSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractRemoveSessionTest.java
@@ -18,23 +18,27 @@
package org.eclipse.jetty.server.session;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
-import java.util.EventListener;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.junit.Test;
@@ -59,44 +63,36 @@ public abstract class AbstractRemoveSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=create");
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
- String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
//ensure sessionCreated listener is called
assertTrue (testListener.isCreated());
- //now delete the session
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=delete");
- exchange.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ //now delete the session
+ Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=delete");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
//ensure sessionDestroyed listener is called
assertTrue(testListener.isDestroyed());
// The session is not there anymore, but we present an old cookie
// The server creates a new session, we must ensure we released all locks
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=check");
- exchange.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=check");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractServerCrossContextSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractServerCrossContextSessionTest.java
index 0f37a5c42e3..79d604dbd72 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractServerCrossContextSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractServerCrossContextSessionTest.java
@@ -18,9 +18,12 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.util.Collections;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
@@ -30,13 +33,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractServerCrossContextSessionTest
@@ -62,17 +62,13 @@ public abstract class AbstractServerCrossContextSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Perform a request, on server side a cross context dispatch will be done
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextA + servletMapping);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ Future future = client.GET("http://localhost:" + port + contextA + servletMapping);
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionCookieTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionCookieTest.java
index 5246186f5a0..affd3fd4db9 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionCookieTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionCookieTest.java
@@ -20,6 +20,7 @@ package org.eclipse.jetty.server.session;
import java.io.IOException;
import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -29,14 +30,13 @@ import javax.servlet.http.HttpSession;
import junit.framework.Assert;
-import org.eclipse.jetty.client.Address;
-import org.eclipse.jetty.client.ContentExchange;
+
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.HttpDestination;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.http.HttpCookie;
-import org.eclipse.jetty.http.HttpMethods;
import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.util.log.Log;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -76,43 +76,33 @@ public abstract class AbstractSessionCookieTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
- ContentExchange exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=create");
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
- String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
+
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
//sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Let's wait for the scavenger to run, waiting 2.5 times the scavenger period
- //pause(scavengePeriod);
-
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=check-cookie");
- exchange.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ //pause(scavengePeriod);
+ Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=check-cookie");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
- exchange = new ContentExchange(true);
- exchange.setMethod(HttpMethods.GET);
- exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=null-cookie");
- //exchange.getRequestFields().add("Cookie", "null");
- HttpDestination dest = client.getDestination(new Address("localhost",port),false);
+ assertEquals(HttpServletResponse.SC_OK,response.status());
- dest.addCookie(new HttpCookie("Cookie",null));
-
- client.send(exchange);
- exchange.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
+ request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=null-cookie");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
}
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateAndCreateTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateAndCreateTest.java
index be718e7e76c..4d593ba9d01 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateAndCreateTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateAndCreateTest.java
@@ -18,10 +18,13 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -33,16 +36,14 @@ import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.SessionManager;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
* AbstractSessionInvalidateAndCreateTest
@@ -107,7 +108,6 @@ public abstract class AbstractSessionInvalidateAndCreateTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
@@ -115,26 +115,21 @@ public abstract class AbstractSessionInvalidateAndCreateTest
// Create the session
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL(url + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Future future = client.GET(url + "?action=init");
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Make a request which will invalidate the existing session and create a new one
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL(url + "?action=test");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ Request request2 = client.newRequest(url + "?action=test");
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
// Wait for the scavenger to run, waiting 2.5 times the scavenger period
pause(scavengePeriod);
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionMigrationTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionMigrationTest.java
index 940044e6501..a909133e57c 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionMigrationTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionMigrationTest.java
@@ -20,7 +20,8 @@ package org.eclipse.jetty.server.session;
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Random;
+import java.util.concurrent.Future;
+
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -28,9 +29,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
+
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -60,33 +64,28 @@ public abstract class AbstractSessionMigrationTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Perform one request to server1 to create a session
int value = 1;
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.POST);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=set&value=" + value);
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Request request1 = client.POST("http://localhost:" + port1 + contextPath + servletMapping + "?action=set&value=" + value);
+ Future future = request1.send();
+ ContentResponse response1 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response1.status());
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Perform a request to server2 using the session cookie from the previous request
// This should migrate the session from server1 to server2.
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
- String response = exchange2.getResponseContent();
+ Request request2 = client.newRequest("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ ContentResponse response2 = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
+ String response = response2.contentAsString();
assertEquals(response.trim(),String.valueOf(value)); }
finally
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionRenewTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionRenewTest.java
new file mode 100644
index 00000000000..3faba2334bf
--- /dev/null
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionRenewTest.java
@@ -0,0 +1,134 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2012 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.server.session;
+
+import java.io.IOException;
+import java.util.concurrent.Future;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+
+public abstract class AbstractSessionRenewTest
+{
+ public abstract AbstractTestServer createServer(int port, int max, int scavenge);
+
+ public void testSessionRenewal() throws Exception
+ {
+ String contextPath = "";
+ String servletMapping = "/server";
+ int scavengePeriod = 3;
+ AbstractTestServer server = createServer(0, 1, scavengePeriod);
+ ServletContextHandler context = server.addContext(contextPath);
+ context.addServlet(TestServlet.class, servletMapping);
+ server.start();
+ int port=server.getPort();
+
+ HttpClient client = new HttpClient();
+ try
+ {
+ client.start();
+
+ //make a request to create a session
+ Future future = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
+ ContentResponse response = future.get();
+ assertEquals(HttpServletResponse.SC_OK,response.status());
+
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
+ assertTrue(sessionCookie != null);
+
+ //make a request to change the sessionid
+ Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=renew");
+ request.header("Cookie", sessionCookie);
+ future = request.send();
+ ContentResponse renewResponse = future.get();
+ assertEquals(HttpServletResponse.SC_OK,renewResponse.status());
+ String renewSessionCookie = renewResponse.headers().getStringField("Set-Cookie");
+ assertNotNull(renewSessionCookie);
+ assertNotSame(sessionCookie, renewSessionCookie);
+ }
+ finally
+ {
+ client.stop();
+ }
+ }
+
+
+ public static class TestServlet extends HttpServlet
+ {
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+ {
+ String action = request.getParameter("action");
+ if ("create".equals(action))
+ {
+ HttpSession session = request.getSession(true);
+ assertTrue(session.isNew());
+ }
+ else if ("renew".equals(action))
+ {
+ HttpSession beforeSession = request.getSession(false);
+ String beforeSessionId = beforeSession.getId();
+
+ assertTrue(beforeSession != null);
+
+ ((AbstractSession)beforeSession).renewId(request);
+
+ HttpSession afterSession = request.getSession(false);
+ String afterSessionId = afterSession.getId();
+
+ assertTrue(afterSession != null);
+ assertTrue(beforeSession==afterSession);
+ assertTrue(beforeSessionId != afterSessionId);
+
+ AbstractSessionManager sessionManager = (AbstractSessionManager)((AbstractSession)afterSession).getSessionManager();
+ AbstractSessionIdManager sessionIdManager = (AbstractSessionIdManager)sessionManager.getSessionIdManager();
+
+ assertTrue(sessionIdManager.idInUse(afterSessionId));
+ assertFalse(sessionIdManager.idInUse(beforeSessionId));
+
+ HttpSession session = sessionManager.getSession(afterSessionId);
+ assertNotNull(session);
+ session = sessionManager.getSession(beforeSessionId);
+ assertNull(session);
+
+ if (((AbstractSession)afterSession).isIdChanged())
+ {
+ ((org.eclipse.jetty.server.Response)response).addCookie(sessionManager.getSessionCookie(afterSession, request.getContextPath(), request.isSecure()));
+ }
+ }
+ }
+ }
+
+}
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionValueSavingTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionValueSavingTest.java
index 4384a5600e2..5849b42e813 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionValueSavingTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionValueSavingTest.java
@@ -18,9 +18,12 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Random;
+import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -28,12 +31,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
/**
@@ -58,26 +61,21 @@ public abstract class AbstractSessionValueSavingTest
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
long sessionTestValue = 0;
// Perform one request to server1 to create a session
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
+ Future future = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
+ ContentResponse response1 = future.get();
- System.out.println("Checking: " + sessionTestValue + " vs " + exchange1.getResponseContent());
- assertTrue(sessionTestValue < Long.parseLong(exchange1.getResponseContent()));
+ assertEquals(HttpServletResponse.SC_OK, response1.status());
+ assertTrue(sessionTestValue < Long.parseLong(response1.contentAsString()));
- sessionTestValue = Long.parseLong(exchange1.getResponseContent());
+ sessionTestValue = Long.parseLong(response1.contentAsString());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ String sessionCookie = response1.headers().getStringField("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@@ -92,20 +90,16 @@ public abstract class AbstractSessionValueSavingTest
for (int i = 0; i < 10; ++i)
{
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port1 + contextPath + servletMapping);
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
- assertEquals(HttpServletResponse.SC_OK , exchange2.getResponseStatus());
+ Request request2 = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping);
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ ContentResponse response2 = future.get();
- System.out.println("Checking: " + sessionTestValue + " vs " + exchange2.getResponseContent());
- assertTrue(sessionTestValue < Long.parseLong(exchange2.getResponseContent()));
+ assertEquals(HttpServletResponse.SC_OK , response2.status());
+ assertTrue(sessionTestValue < Long.parseLong(response2.contentAsString()));
+ sessionTestValue = Long.parseLong(response2.contentAsString());
- sessionTestValue = Long.parseLong(exchange2.getResponseContent());
-
- String setCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ String setCookie = response1.headers().getStringField("Set-Cookie");
if (setCookie!=null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestServer.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestServer.java
index aa88937fd49..13e66c960e6 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestServer.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestServer.java
@@ -19,6 +19,7 @@
package org.eclipse.jetty.server.session;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.NetworkConnector;
import org.eclipse.jetty.server.SessionIdManager;
import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
@@ -77,7 +78,7 @@ public abstract class AbstractTestServer
public int getPort()
{
- return _server.getConnectors()[0].getLocalPort();
+ return ((NetworkConnector)getServer().getConnectors()[0]).getLocalPort();
}
public ServletContextHandler addContext(String contextPath)
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractWebAppObjectInSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractWebAppObjectInSessionTest.java
index 98cb7c58391..28e27855cd5 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractWebAppObjectInSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractWebAppObjectInSessionTest.java
@@ -18,22 +18,26 @@
package org.eclipse.jetty.server.session;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
-import java.util.Random;
+import java.util.concurrent.Future;
+
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.client.api.Destination;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.http.HttpCookie;
+import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.resource.Resource;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
/**
* AbstractWebAppObjectInSessionTest
*
@@ -106,31 +110,29 @@ public abstract class AbstractWebAppObjectInSessionTest
try
{
HttpClient client = new HttpClient();
- client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
client.start();
try
{
// Perform one request to server1 to create a session
- ContentExchange exchange1 = new ContentExchange(true);
- exchange1.setMethod(HttpMethods.GET);
- exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=set");
- client.send(exchange1);
- exchange1.waitForDone();
- assertEquals( HttpServletResponse.SC_OK, exchange1.getResponseStatus());
- String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
+ Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=set");
+ request.method(HttpMethod.GET);
+
+ Future future = request.send();
+ ContentResponse response = future.get();
+ assertEquals( HttpServletResponse.SC_OK, response.status());
+ String sessionCookie = response.headers().getStringField("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
// Perform a request to server2 using the session cookie from the previous request
- ContentExchange exchange2 = new ContentExchange(true);
- exchange2.setMethod(HttpMethods.GET);
- exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
- exchange2.getRequestFields().add("Cookie", sessionCookie);
- client.send(exchange2);
- exchange2.waitForDone();
+ Request request2 = client.newRequest("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
+ request2.method(HttpMethod.GET);
+ request2.header("Cookie", sessionCookie);
+ future = request2.send();
+ ContentResponse response2 = future.get();
- assertEquals(HttpServletResponse.SC_OK,exchange2.getResponseStatus());
+ assertEquals(HttpServletResponse.SC_OK,response2.status());
}
finally
{