diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3858e9bd5cb..90a9c7039dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,3 +52,13 @@ Create a new bug Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome! - [https://github.com/eclipse/jetty.project/issues](https://github.com/eclipse/jetty.project/issues) + +Reporting Security Issues +----------------- +There are a number of avenues for reporting security issues to the Jetty project available. +If the issue is directly related to Jetty itself then reporting to the Jetty developers is encouraged. +The most direct method is to mail [security@webtide.com](mailto:security@webtide.com). +Webtide is comprised of the active committers of the Jetty project is our preferred reporting method. +We are flexible in how we work with reporters of security issues but we reserve the right to act in the interests of the Jetty project in all circumstances. + +If the issue is related to Eclipse or its Jetty integration then we encourage you to reach out to [security@eclipse.org](mailto:security@eclipse.org). diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/GZIPContentDecoder.java b/jetty-client/src/main/java/org/eclipse/jetty/client/GZIPContentDecoder.java index 3ccfde883e1..a3d033a7dfd 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/GZIPContentDecoder.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/GZIPContentDecoder.java @@ -18,6 +18,7 @@ package org.eclipse.jetty.client; +import org.eclipse.jetty.io.ByteBufferPool; /** * {@link ContentDecoder} for the "gzip" encoding. @@ -26,14 +27,21 @@ package org.eclipse.jetty.client; public class GZIPContentDecoder extends org.eclipse.jetty.http.GZIPContentDecoder implements ContentDecoder { + private static final int DEFAULT_BUFFER_SIZE = 2048; + public GZIPContentDecoder() { - this(2048); + this(DEFAULT_BUFFER_SIZE); } public GZIPContentDecoder(int bufferSize) { - super(null,bufferSize); + this(null,bufferSize); + } + + public GZIPContentDecoder(ByteBufferPool byteBufferPool, int bufferSize) + { + super(byteBufferPool, bufferSize); } /** @@ -42,22 +50,34 @@ public class GZIPContentDecoder extends org.eclipse.jetty.http.GZIPContentDecode public static class Factory extends ContentDecoder.Factory { private final int bufferSize; + private final ByteBufferPool byteBufferPool; public Factory() { - this(2048); + this(DEFAULT_BUFFER_SIZE); } public Factory(int bufferSize) + { + this(null, bufferSize); + } + + public Factory(ByteBufferPool byteBufferPool) + { + this(byteBufferPool, DEFAULT_BUFFER_SIZE); + } + + public Factory(ByteBufferPool byteBufferPool, int bufferSize) { super("gzip"); + this.byteBufferPool = byteBufferPool; this.bufferSize = bufferSize; } @Override public ContentDecoder newContentDecoder() { - return new GZIPContentDecoder(bufferSize); + return new GZIPContentDecoder(byteBufferPool, bufferSize); } } } diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java index 4dd571cf871..554b467d720 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java @@ -224,7 +224,7 @@ public class HttpClient extends ContainerLifeCycle handlers.put(new WWWAuthenticationProtocolHandler(this)); handlers.put(new ProxyAuthenticationProtocolHandler(this)); - decoderFactories.add(new GZIPContentDecoder.Factory()); + decoderFactories.add(new GZIPContentDecoder.Factory(byteBufferPool)); cookieManager = newCookieManager(); cookieStore = cookieManager.getCookieStore(); diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index 89699ef8b84..491872bd241 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -23,8 +23,8 @@ This section provides a tutorial that shows how you can quickly develop embedded ==== Downloading the Jars Jetty is decomposed into many jars and dependencies to achieve a minimal footprint by selecting the minimal set of jars. -Typically it is best to use something like Maven to manage jars, however this tutorial uses an aggregate Jar that contains all of the Jetty classes in one Jar. -You can manually download the aggregate link:http://central.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/{VERSION}/jetty-all-{VERSION}-uber.jar[`jetty-all.jar`] using `curl`) or a browser. +Typically it is best to use something like link:#jetty-maven-helloworld[Maven] to manage jars, however this tutorial uses an aggregate Jar that contains all of the required Jetty classes in one Jar. +You can manually download the aggregate link:http://central.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/{VERSION}/jetty-all-{VERSION}-uber.jar[`jetty-all.jar`] using `curl` or a browser. ____ [NOTE] @@ -32,6 +32,12 @@ The central Maven repository has started to aggressively reject/deny access to t The administrators of the central maven repository have stated that the recommended command line download tool is now curl. ____ +____ +[IMPORTANT] +The `jetty-all` jar referenced in this section is for example purposes only and should not be used outside of this context. +Please consider using link:#jetty-maven-helloworld[Maven] to manage your project dependencies. +____ + Use curl as follows: [source, screen, subs="{sub-order}"] diff --git a/jetty-gcloud/jetty-gcloud-session-manager/src/main/java/org/eclipse/jetty/gcloud/session/GCloudSessionDataStore.java b/jetty-gcloud/jetty-gcloud-session-manager/src/main/java/org/eclipse/jetty/gcloud/session/GCloudSessionDataStore.java index c7e5d039959..7e6179b52ea 100644 --- a/jetty-gcloud/jetty-gcloud-session-manager/src/main/java/org/eclipse/jetty/gcloud/session/GCloudSessionDataStore.java +++ b/jetty-gcloud/jetty-gcloud-session-manager/src/main/java/org/eclipse/jetty/gcloud/session/GCloudSessionDataStore.java @@ -422,9 +422,9 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore if (!_dsProvided) { if (!StringUtil.isBlank(getNamespace())) - _datastore = DatastoreOptions.builder().namespace(getNamespace()).build().service(); + _datastore = DatastoreOptions.newBuilder().setNamespace(getNamespace()).build().getService(); else - _datastore = DatastoreOptions.defaultInstance().service(); + _datastore = DatastoreOptions.getDefaultInstance().getService(); } if (_model == null) @@ -433,7 +433,7 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore addBean(_model,true); } - _keyFactory = _datastore.newKeyFactory().kind(_model.getKind()); + _keyFactory = _datastore.newKeyFactory().setKind(_model.getKind()); _indexesPresent = checkIndexes(); if (!_indexesPresent) @@ -566,9 +566,9 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore { try { - Query q = Query.keyQueryBuilder() - .kind(_model.getKind()) - .filter(PropertyFilter.eq(_model.getId(), s)) + Query q = Query.newKeyQueryBuilder() + .setKind(_model.getKind()) + .setFilter(PropertyFilter.eq(_model.getId(), s)) .build(); QueryResults res = _datastore.run(q); if (!res.hasNext()) @@ -604,10 +604,10 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore Set info = new HashSet<>(); //get up to maxResult number of sessions that have expired - Query query = Query.entityQueryBuilder() - .kind(_model.getKind()) - .filter(CompositeFilter.and(PropertyFilter.gt(_model.getExpiry(), 0), PropertyFilter.le(_model.getExpiry(), System.currentTimeMillis()))) - .limit(_maxResults) + Query query = Query.newEntityQueryBuilder() + .setKind(_model.getKind()) + .setFilter(CompositeFilter.and(PropertyFilter.gt(_model.getExpiry(), 0), PropertyFilter.le(_model.getExpiry(), System.currentTimeMillis()))) + .setLimit(_maxResults) .build(); QueryResults results; @@ -637,11 +637,11 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore protected Set queryExpiryByIndex () throws Exception { Set info = new HashSet<>(); - Query query = Query.projectionEntityQueryBuilder() - .kind(_model.getKind()) - .projection(_model.getId(), _model.getLastNode(), _model.getExpiry()) - .filter(CompositeFilter.and(PropertyFilter.gt(_model.getExpiry(), 0), PropertyFilter.le(_model.getExpiry(), System.currentTimeMillis()))) - .limit(_maxResults) + Query query = Query.newProjectionEntityQueryBuilder() + .setKind(_model.getKind()) + .setProjection(_model.getId(), _model.getLastNode(), _model.getExpiry()) + .setFilter(CompositeFilter.and(PropertyFilter.gt(_model.getExpiry(), 0), PropertyFilter.le(_model.getExpiry(), System.currentTimeMillis()))) + .setLimit(_maxResults) .build(); QueryResults presults; @@ -674,10 +674,10 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore { if (_indexesPresent) { - Query query = Query.projectionEntityQueryBuilder() - .kind(_model.getKind()) - .projection(_model.getExpiry()) - .filter(PropertyFilter.eq(_model.getId(), id)) + Query query = Query.newProjectionEntityQueryBuilder() + .setKind(_model.getKind()) + .setProjection(_model.getExpiry()) + .setFilter(PropertyFilter.eq(_model.getId(), id)) .build(); QueryResults presults; @@ -700,9 +700,9 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore } else { - Query query = Query.entityQueryBuilder() - .kind(_model.getKind()) - .filter(PropertyFilter.eq(_model.getId(), id)) + Query query = Query.newEntityQueryBuilder() + .setKind(_model.getKind()) + .setFilter(PropertyFilter.eq(_model.getId(), id)) .build(); QueryResults results; @@ -761,7 +761,7 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore } catch (DatastoreException e) { - if (e.retryable()) + if (e.isRetryable()) { if (LOG.isDebugEnabled()) LOG.debug("Datastore put retry {} waiting {}ms", attempts, backoff); @@ -814,12 +814,14 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore */ protected boolean checkIndexes () { + long start =0; + try { - Query query = Query.projectionEntityQueryBuilder() - .kind(_model.getKind()) - .projection(_model.getExpiry()) - .filter(PropertyFilter.eq(_model.getId(), "-")) + Query query = Query.newProjectionEntityQueryBuilder() + .setKind(_model.getKind()) + .setProjection(_model.getExpiry()) + .setFilter(PropertyFilter.eq(_model.getId(), "-")) .build(); _datastore.run(query); return true; @@ -855,7 +857,7 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore oos.flush(); //turn a session into an entity - entity = Entity.builder(key) + entity = Entity.newBuilder(key) .set(_model.getId(), session.getId()) .set(_model.getContextPath(), session.getContextPath()) .set(_model.getVhost(), session.getVhost()) @@ -866,7 +868,7 @@ public class GCloudSessionDataStore extends AbstractSessionDataStore .set(_model.getLastNode(),session.getLastNode()) .set(_model.getExpiry(), session.getExpiry()) .set(_model.getMaxInactive(), session.getMaxInactiveMs()) - .set(_model.getAttributes(), BlobValue.builder(Blob.copyFrom(baos.toByteArray())).excludeFromIndexes(true).build()).build(); + .set(_model.getAttributes(), BlobValue.newBuilder(Blob.copyFrom(baos.toByteArray())).setExcludeFromIndexes(true).build()).build(); return entity; diff --git a/jetty-gcloud/pom.xml b/jetty-gcloud/pom.xml index cb220caa7e6..ffad1645099 100644 --- a/jetty-gcloud/pom.xml +++ b/jetty-gcloud/pom.xml @@ -13,7 +13,7 @@ Jetty :: GCloud - 0.7.0 + 0.9.2-beta diff --git a/jetty-home/src/main/resources/bin/jetty.sh b/jetty-home/src/main/resources/bin/jetty.sh index 20949ba0db7..eec8b767ec2 100755 --- a/jetty-home/src/main/resources/bin/jetty.sh +++ b/jetty-home/src/main/resources/bin/jetty.sh @@ -150,6 +150,24 @@ readConfig() source "$1" } +dumpEnv() +{ + echo "JAVA = $JAVA" + echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}" + echo "JETTY_HOME = $JETTY_HOME" + echo "JETTY_BASE = $JETTY_BASE" + echo "START_D = $START_D" + echo "START_INI = $START_INI" + echo "JETTY_START = $JETTY_START" + echo "JETTY_CONF = $JETTY_CONF" + echo "JETTY_ARGS = ${JETTY_ARGS[*]}" + echo "JETTY_RUN = $JETTY_RUN" + echo "JETTY_PID = $JETTY_PID" + echo "JETTY_START_LOG= $JETTY_START_LOG" + echo "JETTY_STATE = $JETTY_STATE" + echo "RUN_CMD = ${RUN_CMD[*]}" +} + ################################################## @@ -278,6 +296,14 @@ then [ -d "$JETTY_RUN" ] || mkdir $JETTY_RUN fi +##################################################### +# define start log location +##################################################### +if [ -z "$JETTY_START_LOG" ] +then + JETTY_START_LOG="$JETTY_RUN/$NAME-start.log" +fi + ##################################################### # Find a pid and state file ##################################################### @@ -401,17 +427,7 @@ RUN_CMD=("$JAVA" ${RUN_ARGS[@]}) ##################################################### if (( DEBUG )) then - echo "START_INI = $START_INI" - echo "START_D = $START_D" - echo "JETTY_HOME = $JETTY_HOME" - echo "JETTY_BASE = $JETTY_BASE" - echo "JETTY_CONF = $JETTY_CONF" - echo "JETTY_PID = $JETTY_PID" - echo "JETTY_START = $JETTY_START" - echo "JETTY_ARGS = ${JETTY_ARGS[*]}" - echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}" - echo "JAVA = $JAVA" - echo "RUN_CMD = ${RUN_CMD[*]}" + dumpEnv fi ################################################## @@ -434,7 +450,7 @@ case "$ACTION" in CH_USER="-c$JETTY_USER" fi - start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_BASE" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" start-log-file="$JETTY_RUN/start.log" + start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_BASE" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" start-log-file="$JETTY_START_LOG" else @@ -456,7 +472,7 @@ case "$ACTION" in chown "$JETTY_USER" "$JETTY_PID" # FIXME: Broken solution: wordsplitting, pathname expansion, arbitrary command execution, etc. su - "$JETTY_USER" $SU_SHELL -c " - exec ${RUN_CMD[*]} start-log-file="$JETTY_RUN/start.log" > /dev/null & + exec ${RUN_CMD[*]} start-log-file="$JETTY_START_LOG" > /dev/null & disown \$! echo \$! > '$JETTY_PID'" else @@ -569,20 +585,7 @@ case "$ACTION" in echo "Jetty NOT running" fi echo - echo "START_INI = $START_INI" - echo "START_D = $START_D" - echo "JETTY_HOME = $JETTY_HOME" - echo "JETTY_BASE = $JETTY_BASE" - echo "JETTY_CONF = $JETTY_CONF" - echo "JETTY_PID = $JETTY_PID" - echo "JETTY_START = $JETTY_START" - echo "JETTY_LOGS = $JETTY_LOGS" - echo "JETTY_STATE = $JETTY_STATE" - echo "CLASSPATH = $CLASSPATH" - echo "JAVA = $JAVA" - echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}" - echo "JETTY_ARGS = ${JETTY_ARGS[*]}" - echo "RUN_CMD = ${RUN_CMD[*]}" + dumpEnv echo if running "$JETTY_PID" diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java index d6ca0436c9e..63994a335d1 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java @@ -55,8 +55,25 @@ public class HttpGenerator new MetaData.Response(HttpVersion.HTTP_1_1,INTERNAL_SERVER_ERROR_500,null,new HttpFields(){{put(HttpHeader.CONNECTION,HttpHeaderValue.CLOSE);}},0); // states - public enum State { START, COMMITTED, COMPLETING, COMPLETING_1XX, END } - public enum Result { NEED_CHUNK,NEED_INFO,NEED_HEADER,NEED_CHUNK_TRAILER, FLUSH,CONTINUE,SHUTDOWN_OUT,DONE} + public enum State + { + START, + COMMITTED, + COMPLETING, + COMPLETING_1XX, + END + } + public enum Result + { + NEED_CHUNK, // Need a small chunk buffer of CHUNK_SIZE + NEED_INFO, // Need the request/response metadata info + NEED_HEADER, // Need a buffer to build HTTP headers into + NEED_CHUNK_TRAILER, // Need a large chunk buffer for last chunk and trailers + FLUSH, // The buffers previously generated should be flushed + CONTINUE, // Continue generating the message + SHUTDOWN_OUT, // Need EOF to be signaled + DONE // Message generation complete + } // other statics public static final int CHUNK_SIZE = 12; diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/FillInterest.java b/jetty-io/src/main/java/org/eclipse/jetty/io/FillInterest.java index 62594560ce2..ea90b4a8246 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/FillInterest.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/FillInterest.java @@ -88,8 +88,6 @@ public abstract class FillInterest try { - if (LOG.isDebugEnabled()) - LOG.debug("{} register {}",this,callback); needsFillInterest(); } catch (Throwable e) diff --git a/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AsyncProxyServlet.java b/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AsyncProxyServlet.java index 9abd36016c1..f743cd6620f 100644 --- a/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AsyncProxyServlet.java +++ b/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AsyncProxyServlet.java @@ -125,7 +125,7 @@ public class AsyncProxyServlet extends ProxyServlet return delegate.rewriteTarget(clientRequest); } } - + protected class StreamReader extends IteratingCallback implements ReadListener { private final byte[] buffer = new byte[getHttpClient().getRequestBufferSize()]; @@ -133,6 +133,7 @@ public class AsyncProxyServlet extends ProxyServlet private final HttpServletResponse response; private final Request proxyRequest; private final DeferredContentProvider provider; + protected StreamReader(HttpServletRequest request, HttpServletResponse response, Request proxyRequest, DeferredContentProvider provider) { @@ -168,9 +169,7 @@ public class AsyncProxyServlet extends ProxyServlet int requestId = _log.isDebugEnabled() ? getRequestId(request) : 0; ServletInputStream input = request.getInputStream(); - // First check for isReady() because it has - // side effects, and then for isFinished(). - while (input.isReady() && !input.isFinished()) + while (input.isReady()) { int read = input.read(buffer); if (_log.isDebugEnabled()) @@ -182,20 +181,17 @@ public class AsyncProxyServlet extends ProxyServlet onRequestContent(request, proxyRequest, provider, buffer, 0, read, this); return Action.SCHEDULED; } + else if (read < 0) + { + if (_log.isDebugEnabled()) + _log.debug("{} asynchronous read complete on {}", requestId, input); + return Action.SUCCEEDED; + } } - if (input.isFinished()) - { - if (_log.isDebugEnabled()) - _log.debug("{} asynchronous read complete on {}", requestId, input); - return Action.SUCCEEDED; - } - else - { - if (_log.isDebugEnabled()) - _log.debug("{} asynchronous read pending on {}", requestId, input); - return Action.IDLE; - } + if (_log.isDebugEnabled()) + _log.debug("{} asynchronous read pending on {}", requestId, input); + return Action.IDLE; } protected void onRequestContent(HttpServletRequest request, Request proxyRequest, DeferredContentProvider provider, byte[] buffer, int offset, int length, Callback callback) diff --git a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/AsyncProxyServletLoadTest.java b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletLoadTest.java similarity index 94% rename from jetty-proxy/src/test/java/org/eclipse/jetty/proxy/AsyncProxyServletLoadTest.java rename to jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletLoadTest.java index e1f46197ac4..af4a42785a0 100644 --- a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/AsyncProxyServletLoadTest.java +++ b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletLoadTest.java @@ -52,18 +52,19 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) -public class AsyncProxyServletLoadTest +public class ProxyServletLoadTest { @Parameterized.Parameters(name = "{0}") public static Iterable data() { return Arrays.asList(new Object[][]{ + {ProxyServlet.class}, {AsyncProxyServlet.class}, {AsyncMiddleManServlet.class} }); } - private static final Logger LOG = Log.getLogger(AsyncProxyServletLoadTest.class); + private static final Logger LOG = Log.getLogger(ProxyServletLoadTest.class); private static final String PROXIED_HEADER = "X-Proxied"; private HttpClient client; @@ -73,7 +74,7 @@ public class AsyncProxyServletLoadTest private Server server; private ServerConnector serverConnector; - public AsyncProxyServletLoadTest(Class proxyServletClass) throws Exception + public ProxyServletLoadTest(Class proxyServletClass) throws Exception { proxyServlet = (AbstractProxyServlet)proxyServletClass.newInstance(); } @@ -170,7 +171,7 @@ public class AsyncProxyServletLoadTest thread.start(); } - Assert.assertTrue(activeClientLatch.await(clientCount * iterations * 10, TimeUnit.MILLISECONDS)); + Assert.assertTrue(activeClientLatch.await(Math.max(clientCount * iterations * 10, 5000), TimeUnit.MILLISECONDS)); Assert.assertTrue(success.get()); } @@ -211,7 +212,7 @@ public class AsyncProxyServletLoadTest if (response.getStatus() != 200) { - LOG.warn("Got response <{}>, expecting <{}>", response.getStatus(), 200); + LOG.warn("Got response <{}>, expecting <{}> iteration=", response.getStatus(), 200,iterations); // allow all ClientLoops to finish success.set(false); } @@ -224,7 +225,7 @@ public class AsyncProxyServletLoadTest } catch (Throwable x) { - LOG.warn("Error processing request", x); + LOG.warn("Error processing request "+iterations, x); success.set(false); } finally diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java index 223cd3c9c53..331ce27130b 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java @@ -417,7 +417,12 @@ public class HttpChannel implements Runnable, HttpOutput.Interceptor status == HttpStatus.NO_CONTENT_204 || status == HttpStatus.NOT_MODIFIED_304); if (hasContent && !_response.isContentComplete(_response.getHttpOutput().getWritten())) - _transport.abort(new IOException("insufficient content written")); + { + if (isCommitted()) + _transport.abort(new IOException("insufficient content written")); + else + _response.sendError(HttpStatus.INTERNAL_SERVER_ERROR_500,"insufficient content written"); + } } _response.closeOutput(); _request.setHandled(true); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java index b8a83807348..79153650dec 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java @@ -18,10 +18,6 @@ package org.eclipse.jetty.server; -import static javax.servlet.RequestDispatcher.ERROR_EXCEPTION; -import static javax.servlet.RequestDispatcher.ERROR_MESSAGE; -import static javax.servlet.RequestDispatcher.ERROR_STATUS_CODE; - import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -42,6 +38,10 @@ import org.eclipse.jetty.util.log.Logger; import org.eclipse.jetty.util.thread.Locker; import org.eclipse.jetty.util.thread.Scheduler; +import static javax.servlet.RequestDispatcher.ERROR_EXCEPTION; +import static javax.servlet.RequestDispatcher.ERROR_MESSAGE; +import static javax.servlet.RequestDispatcher.ERROR_STATUS_CODE; + /** * Implementation of AsyncContext interface that holds the state of request-response cycle. */ @@ -87,7 +87,7 @@ public class HttpChannelState /** * The state of the servlet async API. */ - public enum Async + private enum Async { NOT_ASYNC, STARTED, // AsyncContext.startAsync() has been called @@ -99,17 +99,31 @@ public class HttpChannelState ERRORED // The error has been processed } - private final boolean DEBUG=LOG.isDebugEnabled(); + private enum Interest + { + NONE(false), + NEEDED(true), + REGISTERED(true); + + private final boolean _interested; + + Interest(boolean interest) + { + _interested = interest; + } + + private boolean isInterested() { return _interested;} + } + private final Locker _locker=new Locker(); private final HttpChannel _channel; - private List _asyncListeners; private State _state; private Async _async; private boolean _initial; private boolean _asyncReadPossible; - private boolean _asyncReadUnready; - private boolean _asyncWrite; // TODO refactor same as read + private Interest _asyncRead=Interest.NONE; + private boolean _asyncWritePossible; private long _timeoutMs=DEFAULT_TIMEOUT; private AsyncContextEvent _event; @@ -174,9 +188,15 @@ public class HttpChannelState public String toStringLocked() { - return String.format("%s@%x{s=%s a=%s i=%b r=%s w=%b}",getClass().getSimpleName(),hashCode(),_state,_async,_initial, - _asyncReadPossible?(_asyncReadUnready?"PU":"P!U"):(_asyncReadUnready?"!PU":"!P!U"), - _asyncWrite); + return String.format("%s@%x{s=%s a=%s i=%b r=%s/%s w=%b}", + getClass().getSimpleName(), + hashCode(), + _state, + _async, + _initial, + _asyncRead, + _asyncReadPossible, + _asyncWritePossible); } @@ -200,7 +220,7 @@ public class HttpChannelState { try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("handling {}",toStringLocked()); switch(_state) @@ -215,17 +235,17 @@ public class HttpChannelState return Action.TERMINATED; case ASYNC_WOKEN: - if (_asyncReadPossible) + if (_asyncRead.isInterested() && _asyncReadPossible) { _state=State.ASYNC_IO; - _asyncReadUnready=false; + _asyncRead=Interest.NONE; return Action.READ_CALLBACK; } - if (_asyncWrite) + if (_asyncWritePossible) { _state=State.ASYNC_IO; - _asyncWrite=false; + _asyncWritePossible=false; return Action.WRITE_CALLBACK; } @@ -275,7 +295,7 @@ public class HttpChannelState try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("startAsync {}",toStringLocked()); if (_state!=State.DISPATCHED || _async!=Async.NOT_ASYNC) throw new IllegalStateException(this.getStatusStringLocked()); @@ -317,7 +337,6 @@ public class HttpChannelState } } - public void asyncError(Throwable failure) { AsyncContextEvent event = null; @@ -371,7 +390,7 @@ public class HttpChannelState try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("unhandle {}",toStringLocked()); switch(_state) @@ -409,24 +428,29 @@ public class HttpChannelState break; case STARTED: - if (_asyncReadUnready && _asyncReadPossible) + // If a read is possible and either we are interested in reads or we have + // to call onAllDataRead, then we need a READ_CALLBACK + if (_asyncReadPossible && (_asyncRead.isInterested() || _channel.getRequest().getHttpInput().isAsyncEOF())) { _state=State.ASYNC_IO; - _asyncReadUnready=false; - action = Action.READ_CALLBACK; + _asyncRead=Interest.NONE; + action=Action.READ_CALLBACK; } - else if (_asyncWrite) // TODO refactor same as read + else if (_asyncWritePossible) { - _asyncWrite=false; _state=State.ASYNC_IO; + _asyncWritePossible=false; action=Action.WRITE_CALLBACK; } else { _state=State.ASYNC_WAIT; action=Action.WAIT; - if (_asyncReadUnready) + if (_asyncRead==Interest.NEEDED) + { + _asyncRead=Interest.REGISTERED; read_interested=true; + } Scheduler scheduler=_channel.getScheduler(); if (scheduler!=null && _timeoutMs>0) _event.setTimeoutTask(scheduler.schedule(_event,_timeoutMs,TimeUnit.MILLISECONDS)); @@ -477,7 +501,7 @@ public class HttpChannelState AsyncContextEvent event; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("dispatch {} -> {}",toStringLocked(),path); boolean started=false; @@ -531,7 +555,7 @@ public class HttpChannelState AsyncContextEvent event; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onTimeout {}",toStringLocked()); if (_async!=Async.STARTED) @@ -630,7 +654,7 @@ public class HttpChannelState AsyncContextEvent event; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("complete {}",toStringLocked()); boolean started=false; @@ -668,7 +692,7 @@ public class HttpChannelState { try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("error complete {}",toStringLocked()); _async=Async.COMPLETE; @@ -703,7 +727,7 @@ public class HttpChannelState try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onError {} {}",toStringLocked(),failure); // Set error on request. @@ -713,8 +737,7 @@ public class HttpChannelState _event.getSuppliedRequest().setAttribute(ERROR_STATUS_CODE,code); _event.getSuppliedRequest().setAttribute(ERROR_EXCEPTION,failure); _event.getSuppliedRequest().setAttribute(RequestDispatcher.ERROR_EXCEPTION_TYPE,failure==null?null:failure.getClass()); - - _event.getSuppliedRequest().setAttribute(ERROR_MESSAGE,reason!=null?reason:null); + _event.getSuppliedRequest().setAttribute(ERROR_MESSAGE,reason); } else { @@ -724,7 +747,7 @@ public class HttpChannelState baseRequest.setAttribute(ERROR_STATUS_CODE,code); baseRequest.setAttribute(ERROR_EXCEPTION,failure); baseRequest.setAttribute(RequestDispatcher.ERROR_EXCEPTION_TYPE,failure==null?null:failure.getClass()); - baseRequest.setAttribute(ERROR_MESSAGE,reason!=null?reason:null); + baseRequest.setAttribute(ERROR_MESSAGE,reason); } // Are we blocking? @@ -821,7 +844,7 @@ public class HttpChannelState try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onComplete {}",toStringLocked()); switch(_state) @@ -878,7 +901,7 @@ public class HttpChannelState cancelTimeout(); try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("recycle {}",toStringLocked()); switch(_state) @@ -895,8 +918,9 @@ public class HttpChannelState _state=State.IDLE; _async=Async.NOT_ASYNC; _initial=true; - _asyncReadPossible=_asyncReadUnready=false; - _asyncWrite=false; + _asyncReadPossible=false; + _asyncRead=Interest.NONE; + _asyncWritePossible=false; _timeoutMs=DEFAULT_TIMEOUT; _event=null; } @@ -907,7 +931,7 @@ public class HttpChannelState cancelTimeout(); try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("upgrade {}",toStringLocked()); switch(_state) @@ -922,8 +946,9 @@ public class HttpChannelState _state=State.UPGRADED; _async=Async.NOT_ASYNC; _initial=true; - _asyncReadPossible=_asyncReadUnready=false; - _asyncWrite=false; + _asyncReadPossible=false; + _asyncRead=Interest.NONE; + _asyncWritePossible=false; _timeoutMs=DEFAULT_TIMEOUT; _event=null; } @@ -1096,9 +1121,8 @@ public class HttpChannelState _channel.getRequest().setAttribute(name,attribute); } - - /* ------------------------------------------------------------ */ - /** Called to signal async read isReady() has returned false. + /** + * Called to signal async read isReady() has returned false. * This indicates that there is no content available to be consumed * and that once the channel enteres the ASYNC_WAIT state it will * register for read interest by calling {@link HttpChannel#asyncReadFillInterested()} @@ -1109,16 +1133,20 @@ public class HttpChannelState boolean interested=false; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onReadUnready {}",toStringLocked()); // We were already unready, this is not a state change, so do nothing - if (!_asyncReadUnready) + if (_asyncRead!=Interest.REGISTERED) { - _asyncReadUnready=true; _asyncReadPossible=false; // Assumes this has been checked in isReady() with lock held if (_state==State.ASYNC_WAIT) + { interested=true; + _asyncRead=Interest.REGISTERED; + } + else + _asyncRead=Interest.NEEDED; } } @@ -1126,8 +1154,8 @@ public class HttpChannelState _channel.asyncReadFillInterested(); } - /* ------------------------------------------------------------ */ - /** Called to signal that content is now available to read. + /** + * Called to signal that content is now available to read. * If the channel is in ASYNC_WAIT state and unready (ie isReady() has * returned false), then the state is changed to ASYNC_WOKEN and true * is returned. @@ -1138,11 +1166,11 @@ public class HttpChannelState boolean woken=false; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onReadPossible {}",toStringLocked()); _asyncReadPossible=true; - if (_state==State.ASYNC_WAIT && _asyncReadUnready) + if (_state==State.ASYNC_WAIT && _asyncRead.isInterested()) { woken=true; _state=State.ASYNC_WOKEN; @@ -1151,8 +1179,8 @@ public class HttpChannelState return woken; } - /* ------------------------------------------------------------ */ - /** Called to signal that the channel is ready for a callback. + /** + * Called to signal that the channel is ready for a callback. * This is similar to calling {@link #onReadUnready()} followed by * {@link #onReadPossible()}, except that as content is already * available, read interest is never set. @@ -1163,10 +1191,10 @@ public class HttpChannelState boolean woken=false; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onReadReady {}",toStringLocked()); - _asyncReadUnready=true; + _asyncRead=Interest.REGISTERED; _asyncReadPossible=true; if (_state==State.ASYNC_WAIT) { @@ -1177,8 +1205,8 @@ public class HttpChannelState return woken; } - /* ------------------------------------------------------------ */ - /** Called to signal that a read has read -1. + /** + * Called to signal that a read has read -1. * Will wake if the read was called while in ASYNC_WAIT state * @return true if woken */ @@ -1187,21 +1215,20 @@ public class HttpChannelState boolean woken=false; try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onReadEof {}",toStringLocked()); - + if (_state==State.ASYNC_WAIT) { - _state=State.ASYNC_WOKEN; - _asyncReadUnready=true; - _asyncReadPossible=true; woken=true; + _state=State.ASYNC_WOKEN; + _asyncRead=Interest.REGISTERED; + _asyncReadPossible=true; } } return woken; } - public boolean isReadPossible() { try(Locker.Lock lock= _locker.lock()) @@ -1216,10 +1243,10 @@ public class HttpChannelState try(Locker.Lock lock= _locker.lock()) { - if(DEBUG) + if (LOG.isDebugEnabled()) LOG.debug("onWritePossible {}",toStringLocked()); - _asyncWrite=true; + _asyncWritePossible=true; if (_state==State.ASYNC_WAIT) { _state=State.ASYNC_WOKEN; @@ -1229,5 +1256,4 @@ public class HttpChannelState return handle; } - } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java index e5c146333aa..83fed3fc29d 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java @@ -284,7 +284,7 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http { int filled = fillRequestBuffer(); handled = parseRequestBuffer(); - if (handled || filled<=0 || _channel.getRequest().getHttpInput().hasContent()) + if (handled || filled<=0 || _input.hasContent()) break; } return handled; @@ -398,7 +398,7 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http else if (_parser.inContentState() && _generator.isPersistent()) { // If we are async, then we have problems to complete neatly - if (_channel.getRequest().getHttpInput().isAsync()) + if (_input.isAsync()) { if (LOG.isDebugEnabled()) LOG.debug("unconsumed async input {}", this); @@ -409,7 +409,7 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http if (LOG.isDebugEnabled()) LOG.debug("unconsumed input {}", this); // Complete reading the request - if (!_channel.getRequest().getHttpInput().consumeAll()) + if (!_input.consumeAll()) _channel.abort(new IOException("unconsumed input")); } } @@ -627,7 +627,7 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http { if (fillAndParseForContent()) _channel.handle(); - else if (!_input.isFinished()) + else if (!_input.isFinished() && !_input.hasContent()) asyncReadFillInterested(); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java index 3a439804a94..229d0936604 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java @@ -709,6 +709,14 @@ public class HttpInput extends ServletInputStream implements Runnable } } + public boolean isAsyncEOF() + { + synchronized (_inputQ) + { + return _state == AEOF; + } + } + @Override public boolean isReady() { @@ -1121,4 +1129,5 @@ public class HttpInput extends ServletInputStream implements Runnable return "AEOF"; } }; + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java index 544665efa39..1ec2f2eae0e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java @@ -1215,7 +1215,9 @@ public class Response implements HttpServletResponse protected MetaData.Response newResponseMetaData() { - return new MetaData.Response(_channel.getRequest().getHttpVersion(), getStatus(), getReason(), _fields, getLongContentLength()); + MetaData.Response info = new MetaData.Response(_channel.getRequest().getHttpVersion(), getStatus(), getReason(), _fields, getLongContentLength()); + // TODO info.setTrailerSupplier(trailers); + return info; } /** Get the MetaData.Response committed for this response. diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ServerConnector.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ServerConnector.java index 8338847df79..52df1828fe6 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ServerConnector.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ServerConnector.java @@ -300,8 +300,6 @@ public class ServerConnector extends AbstractNetworkConnector _localPort = serverChannel.socket().getLocalPort(); if (_localPort <= 0) throw new IOException("Server channel not bound"); - - addBean(serverChannel); } serverChannel.configureBlocking(true); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index f4b9a1416af..d112b3bdc6e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -761,7 +761,18 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu throw new IllegalStateException("Null contextPath"); if (_logger==null) - _logger = Log.getLogger(getDisplayName() == null?getContextPath():getDisplayName()); + { + String log_name = getDisplayName(); + if (log_name == null || log_name.isEmpty()) + { + log_name = getContextPath(); + if (log_name!=null || log_name.startsWith("/")) + log_name = log_name.substring(1); + if (log_name==null || log_name.isEmpty()) + log_name = Integer.toHexString(hashCode()); + } + _logger = Log.getLogger("org.eclipse.jetty.ContextHandler."+log_name); + } ClassLoader old_classloader = null; Thread current_thread = null; Context old_context = null; diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/EvictionFailureTest.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStoreFactory.java similarity index 68% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/EvictionFailureTest.java rename to jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStoreFactory.java index dbdc44a716b..f1a7a6eeb29 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/EvictionFailureTest.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStoreFactory.java @@ -20,20 +20,20 @@ package org.eclipse.jetty.server.session; /** - * EvictionFailureTest + * NullSessionDataStoreFactory * * */ -public class EvictionFailureTest extends AbstractSessionEvictionFailureTest +public class NullSessionDataStoreFactory extends AbstractSessionDataStoreFactory { /** - * @see org.eclipse.jetty.server.session.AbstractTestBase#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) */ @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception { - return new HashTestServer(port, maxInactive, scavengeInterval, evictionPolicy); + return new NullSessionDataStore(); } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java index 5bbb9f1c3f3..29a3548b6bc 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java @@ -844,36 +844,14 @@ public class Session implements SessionHandler.SessionIf if (_handler == null) throw new IllegalStateException ("No session manager for session "+ _sessionData.getId()); - boolean result = false; - - try (Lock lock = _lock.lockIfNotHeld()) - { - switch (_state) - { - case INVALID: - { - throw new IllegalStateException(); //spec does not allow invalidate of already invalid session - } - case VALID: - { - //only first change from valid to invalidating should be actionable - result = true; - _state = State.INVALIDATING; - break; - } - default: - { - LOG.info("Session {} already being invalidated", _sessionData.getId()); - } - } - } + boolean result = beginInvalidate(); try { //if the session was not already invalid, or in process of being invalidated, do invalidate if (result) { - //tell id mgr to remove session from all other contexts + //tell id mgr to remove session from all contexts _handler.getSessionIdManager().invalidateAll(_sessionData.getId()); } } @@ -901,6 +879,39 @@ public class Session implements SessionHandler.SessionIf { return _lock.lockIfNotHeld(); } + + /* ------------------------------------------------------------- */ + /** + * @return true if the session is not already invalid or being invalidated. + */ + protected boolean beginInvalidate() + { + boolean result = false; + + try (Lock lock = _lock.lockIfNotHeld()) + { + switch (_state) + { + case INVALID: + { + throw new IllegalStateException(); //spec does not allow invalidate of already invalid session + } + case VALID: + { + //only first change from valid to invalidating should be actionable + result = true; + _state = State.INVALIDATING; + break; + } + default: + { + LOG.info("Session {} already being invalidated", _sessionData.getId()); + } + } + } + + return result; + } /* ------------------------------------------------------------- */ /** Call HttpSessionAttributeListeners as part of invalidating @@ -908,7 +919,20 @@ public class Session implements SessionHandler.SessionIf * * @throws IllegalStateException */ + @Deprecated protected void doInvalidate() throws IllegalStateException + { + finishInvalidate(); + } + + + /* ------------------------------------------------------------- */ + /** Call HttpSessionAttributeListeners as part of invalidating + * a Session. + * + * @throws IllegalStateException + */ + protected void finishInvalidate() throws IllegalStateException { try (Lock lock = _lock.lockIfNotHeld()) { diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java index ddaf1f47ed7..e8984592fac 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java @@ -1048,6 +1048,8 @@ public class SessionHandler extends ScopedHandler { if (invalidate) { + session.beginInvalidate(); + if (_sessionListeners!=null) { HttpSessionEvent event=new HttpSessionEvent(session); @@ -1214,8 +1216,7 @@ public class SessionHandler extends ScopedHandler /* ------------------------------------------------------------ */ /** - * Called either when a session has expired, or the app has - * invalidated it. + * Called when a session has expired. * * @param id the id to invalidate */ @@ -1232,7 +1233,7 @@ public class SessionHandler extends ScopedHandler if (session != null) { _sessionTimeStats.set(round((System.currentTimeMillis() - session.getSessionData().getCreated())/1000.0)); - session.doInvalidate(); + session.finishInvalidate(); } } catch (Exception e) @@ -1242,7 +1243,11 @@ public class SessionHandler extends ScopedHandler } - + /* ------------------------------------------------------------ */ + /** + * Called periodically by the HouseKeeper to handle the list of + * sessions that have expired since the last call to scavenge. + */ public void scavenge () { //don't attempt to scavenge if we are shutting down @@ -1279,7 +1284,7 @@ public class SessionHandler extends ScopedHandler } } - + /* ------------------------------------------------------------ */ /** * Each session has a timer that is configured to go off * when either the session has not been accessed for a diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java index 9cb27c4d48e..37963cecb95 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java @@ -20,6 +20,7 @@ package org.eclipse.jetty.server; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -442,10 +443,22 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest server.start(); HttpTester.Response response = executeRequest(); - assertThat("response has no status", response.getStatus(), is(0)); + assertThat("response is error", response.getStatus(), is(500)); + assertFalse("response not eof", response.isEarlyEOF()); + } + + @Test + public void testSetContentLengthAndFlushWriteInsufficientBytes() throws Exception + { + server.setHandler(new SetContentLengthAndWriteInsufficientBytesHandler(true)); + server.start(); + + HttpTester.Response response = executeRequest(); + assertThat("response has no status", response.getStatus(), is(200)); assertTrue("response eof", response.isEarlyEOF()); } + @Test public void testSetContentLengthAndWriteExactlyThatAmountOfBytes() throws Exception { diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/TypeUtilTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/TypeUtilTest.java index c07211ffbcd..5d67ee34fa0 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/TypeUtilTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/TypeUtilTest.java @@ -19,8 +19,10 @@ package org.eclipse.jetty.util; +import org.eclipse.jetty.toolchain.test.JDK; import org.hamcrest.Matchers; import org.junit.Assert; +import org.junit.Assume; import org.junit.Test; public class TypeUtilTest @@ -124,8 +126,18 @@ public class TypeUtilTest @Test public void testLoadedFrom() throws Exception { + Assume.assumeFalse(JDK.IS_9); Assert.assertThat(TypeUtil.getLoadedFrom(String.class).toString(),Matchers.containsString("/rt.jar")); Assert.assertThat(TypeUtil.getLoadedFrom(Assert.class).toString(),Matchers.containsString(".jar")); Assert.assertThat(TypeUtil.getLoadedFrom(TypeUtil.class).toString(),Matchers.containsString("/classes/")); } + + @Test + public void testLoadedFrom9() throws Exception + { + Assume.assumeTrue(JDK.IS_9); + Assert.assertThat(TypeUtil.getLoadedFrom(String.class).toString(),Matchers.containsString("jrt:/java.base/java/lang/String.clas")); + Assert.assertThat(TypeUtil.getLoadedFrom(Assert.class).toString(),Matchers.containsString(".jar")); + Assert.assertThat(TypeUtil.getLoadedFrom(TypeUtil.class).toString(),Matchers.containsString("/classes/")); + } } diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java index 49ef12422cf..c021b223839 100644 --- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java +++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java @@ -18,15 +18,21 @@ package org.eclipse.jetty.http.client; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InterruptedIOException; import java.io.UncheckedIOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; +import java.util.Deque; import java.util.Queue; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -49,6 +55,7 @@ import org.eclipse.jetty.client.api.Result; import org.eclipse.jetty.client.http.HttpConnectionOverHTTP; import org.eclipse.jetty.client.util.BufferingResponseListener; import org.eclipse.jetty.client.util.DeferredContentProvider; +import org.eclipse.jetty.client.util.InputStreamContentProvider; import org.eclipse.jetty.client.util.StringContentProvider; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; @@ -135,7 +142,7 @@ public class AsyncIOServletTest extends AbstractTest scope.set(null); } - private void sleep(long ms) throws IOException + private void sleep(long ms) { try { @@ -143,7 +150,7 @@ public class AsyncIOServletTest extends AbstractTest } catch (InterruptedException e) { - throw new InterruptedIOException(); + throw new UncheckedIOException(new InterruptedIOException()); } } @@ -1245,7 +1252,7 @@ public class AsyncIOServletTest extends AbstractTest @Override public void onDataAvailable() throws IOException { - while (input.isReady() && !input.isFinished()) + while (input.isReady()) { int b = input.read(); if (b>0) @@ -1253,8 +1260,8 @@ public class AsyncIOServletTest extends AbstractTest // System.err.printf("0x%2x %s %n", b, Character.isISOControl(b)?"?":(""+(char)b)); out.write(b); } - else - onAllDataRead(); + else if (b<0) + return; } } @@ -1324,5 +1331,136 @@ public class AsyncIOServletTest extends AbstractTest } - + + @Test + public void testWriteListenerFromOtherThread() throws Exception + { + start(new HttpServlet() + { + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + AsyncContext asyncContext = request.startAsync(); + asyncContext.setTimeout(0); + request.getInputStream().setReadListener(new Listener(asyncContext)); + } + }); + + int cores = 4; + int iterations = 10; + CountDownLatch latch = new CountDownLatch(cores * iterations); + Deque failures = new LinkedBlockingDeque<>(); + for (int i = 0; i < cores; ++i) + { + client.getExecutor().execute(() -> + { + for (int j = 0; j < iterations; ++j) + { + try + { + ContentResponse response = client.newRequest(newURI()) + .method(HttpMethod.POST) + .path(servletPath) + .content(new InputStreamContentProvider(new ByteArrayInputStream(new byte[16 * 1024]) + { + @Override + public int read(byte[] b, int off, int len) + { + sleep(5); + return super.read(b, off, Math.min(len, 4242)); + } + })) + .send(); + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + latch.countDown(); + } + catch (Throwable x) + { + failures.offer(x); + } + } + }); + } + + Assert.assertTrue(latch.await(30, TimeUnit.SECONDS)); + Assert.assertTrue(failures.isEmpty()); + } + + private class Listener implements ReadListener, WriteListener + { + private final Executor executor = Executors.newFixedThreadPool(32); + private final CompletableFuture inputComplete = new CompletableFuture<>(); + private final CompletableFuture outputComplete = new CompletableFuture<>(); + private final AtomicBoolean responseWritten = new AtomicBoolean(); + private final AsyncContext asyncContext; + private final HttpServletResponse response; + private final ServletInputStream input; + private final ServletOutputStream output; + + public Listener(AsyncContext asyncContext) throws IOException + { + this.asyncContext = asyncContext; + this.response = (HttpServletResponse)asyncContext.getResponse(); + this.input = asyncContext.getRequest().getInputStream(); + this.output = response.getOutputStream(); + CompletableFuture.allOf(inputComplete, outputComplete) + .whenComplete((ignoredResult, ignoredThrowable) -> asyncContext.complete()); + // Dispatch setting the write listener to another thread. + executor.execute(() -> output.setWriteListener(this)); + } + + @Override + public void onDataAvailable() throws IOException + { + byte[] buffer = new byte[16 * 1024]; + while (input.isReady()) + { + if (input.read(buffer) < 0) + return; + } + } + + @Override + public void onAllDataRead() throws IOException + { + inputComplete.complete(null); + } + + @Override + public void onWritePossible() throws IOException + { + // Dispatch OWP to another thread. + executor.execute(() -> + { + while (output.isReady()) + { + if (responseWritten.compareAndSet(false, true)) + { + try + { + response.setStatus(HttpServletResponse.SC_OK); + response.setContentType("text/plain;charset=utf-8"); + output.write("Hello world".getBytes()); + } + catch (IOException x) + { + throw new UncheckedIOException(x); + } + } + else + { + outputComplete.complete(null); + return; + } + } + }); + } + + @Override + public void onError(Throwable t) + { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + asyncContext.complete(); + } + } } diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java deleted file mode 100644 index d4762b2851d..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,58 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.File; - -import org.eclipse.jetty.util.IO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - - - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java similarity index 72% rename from tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java rename to tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java index c2aa0c649d3..6232802adda 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java @@ -23,27 +23,32 @@ import org.junit.Before; import org.junit.Test; /** - * OrphanedSessionTest + * ClusteredOrphanedSessionTest */ -public class OrphanedSessionTest extends AbstractOrphanedSessionTest +public class ClusteredOrphanedSessionTest extends AbstractClusteredOrphanedSessionTest { @Before public void before() throws Exception { - FileTestServer.setup(); + FileTestHelper.setup(); } @After public void after() { - FileTestServer.teardown(); + FileTestHelper.teardown(); + } + + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + return FileTestHelper.newSessionDataStoreFactory(); } - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge,evictionPolicy); - } - @Test public void testOrphanedSession() throws Exception { diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java similarity index 76% rename from tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java rename to tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java index c092000ca75..35e30b958b1 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java @@ -19,19 +19,19 @@ package org.eclipse.jetty.server.session; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; import java.io.File; -import org.eclipse.jetty.server.SessionIdManager; import org.eclipse.jetty.util.IO; /** - * @version $Revision$ $Date$ + * FileTestHelper + * */ -public class FileTestServer extends AbstractTestServer +public class FileTestHelper { static int __workers=0; static File _tmpDir; @@ -118,34 +118,11 @@ public class FileTestServer extends AbstractTestServer assertTrue(f.delete()); } } - - - - - public FileTestServer(int port, int maxInactivePeriod, int scavengePeriod, int idlePassivatePeriod) throws Exception + + public static FileSessionDataStoreFactory newSessionDataStoreFactory() { - super(port, maxInactivePeriod, scavengePeriod, idlePassivatePeriod); + FileSessionDataStoreFactory storeFactory = new FileSessionDataStoreFactory(); + storeFactory.setStoreDir(_tmpDir); + return storeFactory; } - - - public SessionIdManager newSessionIdManager(Object config) - { - DefaultSessionIdManager mgr = new DefaultSessionIdManager(_server); - mgr.setWorkerName("worker"+(__workers++)); - return mgr; - } - - - - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - DefaultSessionCache ss = new DefaultSessionCache(handler); - handler.setSessionCache(ss); - FileSessionDataStore ds = new FileSessionDataStore(); - ds.setStoreDir(_tmpDir); - ss.setSessionDataStore(ds); - return handler; - } - } diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java deleted file mode 100644 index 45d9ce6b560..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java +++ /dev/null @@ -1,64 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * ForwardedSessionTest - * - * - */ -public class ForwardedSessionTest extends AbstractForwardedSessionTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - - - - @Test - public void testSessionCreateInForward() throws Exception - { - super.testSessionCreateInForward(); - } - - - - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java deleted file mode 100644 index 9ed3cf4c440..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java +++ /dev/null @@ -1,91 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; - -/** - * IdleSessionTest - * - * - */ -public class IdleSessionTest extends AbstractIdleSessionTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#checkSessionIdled(java.lang.String) - */ - @Override - public void checkSessionIdled(String sessionId) - { - FileTestServer.assertStoreDirEmpty(false); - FileTestServer.assertFileExists(sessionId, true); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#checkSessionDeIdled(java.lang.String) - */ - @Override - public void checkSessionDeIdled(String sessionId) - { - //Can't check absence of file to indicate session is de-idled - //because the FileSessionDataStore writes out the session to a file if anything changes. - //The test changes an attribute so the file will probably exist. - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#deleteSessionData(java.lang.String) - */ - @Override - public void deleteSessionData(String sessionId) - { - FileTestServer.deleteFile(sessionId); - FileTestServer.assertFileExists(sessionId, false); - } - - - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java deleted file mode 100644 index 3a4b47337a0..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java +++ /dev/null @@ -1,58 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; - - - -/** - * ImmediateSaveTest - * - * - */ -public class ImmediateSaveTest extends AbstractImmediateSaveTest -{ - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { return new FileTestServer(port, max, scavenge, evictionPolicy) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java deleted file mode 100644 index c7a92e22e67..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java +++ /dev/null @@ -1,45 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; - -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java similarity index 73% rename from tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java rename to tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java index f8df217fa30..90255936ffe 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java @@ -23,26 +23,32 @@ import org.junit.Before; import org.junit.Test; /** - * NewSessionTest + * NonClusteredSessionScavengingTest */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { @Before public void before() throws Exception { System.setProperty("org.eclipse.jetty.server.session.LEVEL", "DEBUG"); - FileTestServer.setup(); + FileTestHelper.setup(); } @After public void after() { - FileTestServer.teardown(); + FileTestHelper.teardown(); } - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new FileTestServer(port,max,scavenge,evictionPolicy); + return FileTestHelper.newSessionDataStoreFactory(); } @Test diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java index 26149fbd025..466dad3e8e2 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java @@ -19,10 +19,7 @@ package org.eclipse.jetty.server.session; -import java.io.File; - import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -38,25 +35,25 @@ public class ProxySerializationTest extends AbstractProxySerializationTest @Before public void before() throws Exception { - FileTestServer.setup(); + FileTestHelper.setup(); } @After public void after() { - FileTestServer.teardown(); + FileTestHelper.teardown(); } + + /** - * @see org.eclipse.jetty.server.session.AbstractProxySerializationTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy ) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new FileTestServer(port,max,scavenge, evictionPolicy); + return FileTestHelper.newSessionDataStoreFactory(); } - - diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java deleted file mode 100644 index bd2e0705e5e..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,55 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * ReentrantRequestSessionTest - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new FileTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java deleted file mode 100644 index 7270be1398f..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java +++ /dev/null @@ -1,52 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class RemoveSessionTest extends AbstractRemoveSessionTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge,evictionPolicy); - } - - @Test - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java deleted file mode 100644 index a9137dbc522..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java +++ /dev/null @@ -1,59 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * ScatterGunLoadTest - */ -public class ScatterGunLoadTest extends AbstractScatterGunLoadTest -{ - - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - - - - @Test - public void testLightLoad() throws Exception - { - super.testLightLoad(); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java deleted file mode 100644 index 4f67bcf78bd..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java +++ /dev/null @@ -1,55 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class ServerCrossContextSessionTest extends AbstractServerCrossContextSessionTest -{ - - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge, evictionPolicy); - } - - - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java deleted file mode 100644 index d55ee320a18..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java +++ /dev/null @@ -1,48 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; - -public class SessionCookieTest extends AbstractSessionCookieTest -{ - - - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port, max, scavenge,evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java similarity index 74% rename from tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java index d88b9847c6b..d3a83cad34c 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java @@ -22,25 +22,29 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { @Before public void before() throws Exception { - FileTestServer.setup(); + FileTestHelper.setup(); } @After public void after() { - FileTestServer.teardown(); + FileTestHelper.teardown(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new FileTestServer(port,max,scavenge,evictionPolicy); + return FileTestHelper.newSessionDataStoreFactory(); } @Test diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java deleted file mode 100644 index 7760f6a12f5..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java +++ /dev/null @@ -1,66 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.eclipse.jetty.webapp.WebAppContext; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class SessionRenewTest extends AbstractSessionRenewTest -{ - - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port, max, scavenge,evictionPolicy); - } - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - ((FileTestServer)_server).assertFileExists(oldSessionId, false); - ((FileTestServer)_server).assertFileExists(newSessionId, true); - return true; - } - - -} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java deleted file mode 100644 index daeb517893f..00000000000 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Before; - -public class SessionValueSharedSaving extends AbstractSessionValueSavingTest -{ - - @Before - public void before() throws Exception - { - FileTestServer.setup(); - } - - @After - public void after() - { - FileTestServer.teardown(); - } - - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new FileTestServer(port,max,scavenge,evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClientCrossContextSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClientCrossContextSessionTest.java deleted file mode 100644 index 2fd354229b8..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,56 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractClientCrossContextSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ClientCrossContextSessionTest - * - * - */ -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); - } - - @Test - @Override - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LastAccessTimeTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredLastAccessTimeTest.java similarity index 69% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LastAccessTimeTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredLastAccessTimeTest.java index d127fa77eb2..9b983a003f4 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LastAccessTimeTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredLastAccessTimeTest.java @@ -19,18 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractLastAccessTimeTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredLastAccessTimeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; /** - * LastAccessTimeTest + * ClusteredLastAccessTimeTest * * */ -public class LastAccessTimeTest extends AbstractLastAccessTimeTest +public class ClusteredLastAccessTimeTest extends AbstractClusteredLastAccessTimeTest { @AfterClass @@ -38,13 +37,15 @@ public class LastAccessTimeTest extends AbstractLastAccessTimeTest { GCloudTestSuite.__testSupport.deleteSessions(); } + + /** - * @see org.eclipse.jetty.server.session.AbstractLastAccessTimeTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } @Test diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/OrphanedSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredOrphanedSessionTest.java similarity index 70% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/OrphanedSessionTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredOrphanedSessionTest.java index 6187c6b82eb..6b2a2c4f247 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/OrphanedSessionTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredOrphanedSessionTest.java @@ -19,18 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractOrphanedSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredOrphanedSessionTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; /** - * OrphanedSessionTest + * ClusteredOrphanedSessionTest * * */ -public class OrphanedSessionTest extends AbstractOrphanedSessionTest +public class ClusteredOrphanedSessionTest extends AbstractClusteredOrphanedSessionTest { @AfterClass @@ -40,14 +39,16 @@ public class OrphanedSessionTest extends AbstractOrphanedSessionTest } + /** - * @see org.eclipse.jetty.server.session.AbstractOrphanedSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } + @Test @Override diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionMigrationTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionMigrationTest.java similarity index 68% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionMigrationTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionMigrationTest.java index 6ee341912b3..0774d1b0023 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionMigrationTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionMigrationTest.java @@ -19,18 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractSessionMigrationTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionMigrationTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; /** - * SessionMigrationTest + * ClusteredSessionMigrationTest * * */ -public class SessionMigrationTest extends AbstractSessionMigrationTest +public class ClusteredSessionMigrationTest extends AbstractClusteredSessionMigrationTest { @AfterClass public static void teardown () throws Exception @@ -38,14 +37,14 @@ public class SessionMigrationTest extends AbstractSessionMigrationTest GCloudTestSuite.__testSupport.deleteSessions(); } - + /** - * @see org.eclipse.jetty.server.session.AbstractSessionMigrationTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } @Test diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LocalSessionScavengingTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionScavengingTest.java similarity index 68% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LocalSessionScavengingTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionScavengingTest.java index 0988ccd7c97..3c0993657a3 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/LocalSessionScavengingTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ClusteredSessionScavengingTest.java @@ -19,18 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; /** - * LocalSessionScavengingTest + * ClusteredSessionScavengingTest * * */ -public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTest +public class ClusteredSessionScavengingTest extends AbstractClusteredSessionScavengingTest { @AfterClass @@ -39,13 +38,14 @@ public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTe GCloudTestSuite.__testSupport.deleteSessions(); } + /** - * @see org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } @Test diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudSessionTestSupport.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudSessionTestSupport.java index 514c660892b..ddab62c3712 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudSessionTestSupport.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudSessionTestSupport.java @@ -27,6 +27,10 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.eclipse.jetty.server.session.SessionDataStore; +import org.eclipse.jetty.server.session.SessionHandler; +import org.joda.time.Duration; + import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; @@ -47,7 +51,31 @@ public class GCloudSessionTestSupport LocalDatastoreHelper _helper = LocalDatastoreHelper.create(1.0); Datastore _ds; + + public static class TestGCloudSessionDataStoreFactory extends GCloudSessionDataStoreFactory + { + Datastore _d; + + public TestGCloudSessionDataStoreFactory(Datastore d) + { + _d = d; + } + /** + * @see org.eclipse.jetty.gcloud.session.GCloudSessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ + @Override + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception + { + GCloudSessionDataStore ds = new GCloudSessionDataStore(); + ds.setDatastore(_d); + return ds; + } + } + public static GCloudSessionDataStoreFactory newSessionDataStoreFactory(Datastore d) + { + return new TestGCloudSessionDataStoreFactory(d); + } public GCloudSessionTestSupport () { @@ -73,10 +101,15 @@ public class GCloudSessionTestSupport public void tearDown() throws Exception { - _helper.stop(); + _helper.stop(Duration.standardMinutes(1)); //wait up to 1min for shutdown } + public void reset() throws Exception + { + _helper.reset(); + } + public Set getSessionIds () throws Exception { diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java deleted file mode 100644 index 6122b7b72bd..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java +++ /dev/null @@ -1,65 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.DefaultSessionCache; -import org.eclipse.jetty.server.session.SessionHandler; -import org.eclipse.jetty.server.session.TestSessionHandler; - -/** - * GCloudTestServer - * - * - */ -public class GCloudTestServer extends AbstractTestServer -{ - - /** - * @param port - * @param maxInactivePeriod - * @param scavengePeriod - * @param evictionPolicy - * @throws Exception TODO - */ - public GCloudTestServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, evictionPolicy); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractTestServer#newSessionHandler() - */ - @Override - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - handler.setSessionIdManager(_sessionIdManager); - GCloudSessionDataStore ds = new GCloudSessionDataStore(); - ds.setDatastore(GCloudTestSuite.__testSupport.getDatastore()); - DefaultSessionCache ss = new DefaultSessionCache(handler); - ss.setSessionDataStore(ds); - handler.setSessionCache(ss); - return handler; - } - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestSuite.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestSuite.java index cd27f6de802..4b024f84f7b 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestSuite.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestSuite.java @@ -31,25 +31,15 @@ import org.junit.runners.Suite; */ @RunWith(Suite.class) @Suite.SuiteClasses({ - ClientCrossContextSessionTest.class, - ForwardedSessionTest.class, - ImmediateSaveTest.class, - ImmortalSessionTest.class, InvalidationSessionTest.class, - LastAccessTimeTest.class, - LocalSessionScavengingTest.class, - NewSessionTest.class, - OrphanedSessionTest.class, - ReentrantRequestSessionTest.class, - RemoveSessionTest.class, - SameNodeLoadTest.class, - ServerCrossContextSessionTest.class, + ClusteredLastAccessTimeTest.class, + ClusteredSessionScavengingTest.class, + NonClusteredSessionScavengingTest.class, + ClusteredOrphanedSessionTest.class, SessionExpiryTest.class, - SessionInvalidateAndCreateTest.class, - SessionMigrationTest.class, - SessionRenewTest.class, - SessionValueSavingTest.class, - StopSessionManagerPreserveSessionTest.class + SessionInvalidateCreateScavengeTest.class, + ClusteredSessionMigrationTest.class, + ModifyMaxInactiveIntervalTest.class }) diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmediateSaveTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmediateSaveTest.java deleted file mode 100644 index 5f15b130c45..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmediateSaveTest.java +++ /dev/null @@ -1,61 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractImmediateSaveTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.SessionHandler; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; - - - -/** - * ImmediateSaveTest - * - * - */ -public class ImmediateSaveTest extends AbstractImmediateSaveTest -{ - - @After - public void deleteSessions () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavenge, evictionPolicy) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - } -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmortalSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmortalSessionTest.java deleted file mode 100644 index 545e36808ec..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ImmortalSessionTest.java +++ /dev/null @@ -1,59 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractImmortalSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ImmortalSessionTest - * - * - */ -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - - - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - /** - * @see org.eclipse.jetty.server.session.AbstractImmortalSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); - } - - @Test - @Override - public void testImmortalSession() throws Exception - { - super.testImmortalSession(); - } - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/InvalidationSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/InvalidationSessionTest.java index 463c4bc0081..751fab6dc79 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/InvalidationSessionTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/InvalidationSessionTest.java @@ -20,19 +20,16 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractInvalidationSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.server.session.AbstractClusteredInvalidationSessionTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Ignore; /** * InvalidationSessionTest * * */ -public class InvalidationSessionTest extends AbstractInvalidationSessionTest +public class InvalidationSessionTest extends AbstractClusteredInvalidationSessionTest { @AfterClass @@ -40,28 +37,13 @@ public class InvalidationSessionTest extends AbstractInvalidationSessionTest { GCloudTestSuite.__testSupport.deleteSessions(); } - + /** - * @see org.eclipse.jetty.server.session.AbstractInvalidationSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - GCloudTestServer server = new GCloudTestServer(port, maxInactive, scavengeInterval, evictionPolicy) - { - /** - * @see org.eclipse.jetty.gcloud.session.GCloudTestServer#newSessionHandler() - */ - @Override - public SessionHandler newSessionHandler() - { - SessionHandler handler = super.newSessionHandler(); - handler.getSessionCache().setEvictionPolicy(evictionPolicy); - return handler; - } - - }; - return server; + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } - } diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ForwardedSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ModifyMaxInactiveIntervalTest.java similarity index 60% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ForwardedSessionTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ModifyMaxInactiveIntervalTest.java index 49547fea9a4..fc8efb39719 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ForwardedSessionTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ModifyMaxInactiveIntervalTest.java @@ -19,30 +19,32 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractForwardedSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.eclipse.jetty.server.session.AbstractModifyMaxInactiveIntervalTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.junit.After; /** - * ForwardedSessionTest + * ModifyMaxInactiveIntervalTest * * */ -public class ForwardedSessionTest extends AbstractForwardedSessionTest +public class ModifyMaxInactiveIntervalTest extends AbstractModifyMaxInactiveIntervalTest { - - @AfterClass - public static void teardown () throws Exception + @After + public void teardown () throws Exception { GCloudTestSuite.__testSupport.deleteSessions(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } } diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NewSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NonClusteredSessionScavengingTest.java similarity index 65% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NewSessionTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NonClusteredSessionScavengingTest.java index a318797a7ca..49aa10a1ae4 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NewSessionTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/NonClusteredSessionScavengingTest.java @@ -19,23 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import java.io.File; - -import org.eclipse.jetty.server.session.AbstractNewSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractNonClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; /** - * NewSessionTest + * NonClusteredSessionScavengingTest * * */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { @@ -46,14 +40,16 @@ public class NewSessionTest extends AbstractNewSessionTest } + /** - * @see org.eclipse.jetty.server.session.AbstractNewSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } + @Test public void testNewSession() throws Exception diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ReentrantRequestSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ReentrantRequestSessionTest.java deleted file mode 100644 index 11c786d71e9..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ReentrantRequestSessionTest - * - * - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port,int max, int scavengePeriod,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavengePeriod, evictionPolicy); - } - - @Test - @Override - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/RemoveSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/RemoveSessionTest.java deleted file mode 100644 index 2bad82ecb64..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/RemoveSessionTest.java +++ /dev/null @@ -1,63 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractRemoveSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * RemoveSessionTest - * - * - */ -public class RemoveSessionTest extends AbstractRemoveSessionTest -{ - - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractRemoveSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - @Override - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); - } - - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SameNodeLoadTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SameNodeLoadTest.java deleted file mode 100644 index c327d60bac4..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SameNodeLoadTest.java +++ /dev/null @@ -1,60 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractSameNodeLoadTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * SameNodeLoadTest - * - * - */ -public class SameNodeLoadTest extends AbstractSameNodeLoadTest -{ - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractSameNodeLoadTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - @Override - public void testLoad() throws Exception - { - super.testLoad(); - } - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ServerCrossContextSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ServerCrossContextSessionTest.java deleted file mode 100644 index ae852c30aa0..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/ServerCrossContextSessionTest.java +++ /dev/null @@ -1,55 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractServerCrossContextSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ServerCrossContextSessionTest - * - * - */ -public class ServerCrossContextSessionTest extends AbstractServerCrossContextSessionTest -{ - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); - } - - @Test - @Override - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionExpiryTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionExpiryTest.java index a0787a28dbb..cc57a0badde 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionExpiryTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionExpiryTest.java @@ -20,13 +20,11 @@ package org.eclipse.jetty.gcloud.session; import org.eclipse.jetty.server.session.AbstractSessionExpiryTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.After; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.After; import org.junit.Assert; +import org.junit.Test; /** @@ -37,42 +35,24 @@ import org.junit.Assert; public class SessionExpiryTest extends AbstractSessionExpiryTest { - @AfterClass - public static void teardown () throws Exception + @After + public void teardown () throws Exception { GCloudTestSuite.__testSupport.deleteSessions(); } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionExpiryTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - @Override - public void testSessionNotExpired() throws Exception - { - super.testSessionNotExpired(); - GCloudTestSuite.__testSupport.deleteSessions(); - } /** - * @see org.eclipse.jetty.server.session.AbstractSessionExpiryTest#testSessionExpiry() + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ - @Test @Override - public void testSessionExpiry() throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - super.testSessionExpiry(); - - GCloudTestSuite.__testSupport.deleteSessions(); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } + + @Override public void verifySessionCreated(TestHttpSessionListener listener, String sessionId) { @@ -80,6 +60,9 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest try {GCloudTestSuite.__testSupport.assertSessions(1);}catch(Exception e){ Assert.fail(e.getMessage());} } + + + @Override public void verifySessionDestroyed(TestHttpSessionListener listener, String sessionId) { diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateCreateScavengeTest.java similarity index 70% rename from tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateCreateScavengeTest.java index a37dcef742a..d6fd1964e0b 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionInvalidateCreateScavengeTest.java @@ -19,18 +19,17 @@ package org.eclipse.jetty.gcloud.session; -import org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractSessionInvalidateCreateScavengeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; /** - * SessionInvalidateAndCreateTest + * SessionInvalidateCreateScavengeTest * * */ -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { @AfterClass public static void teardown () throws Exception @@ -40,12 +39,12 @@ public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAnd /** - * @see org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); + return GCloudSessionTestSupport.newSessionDataStoreFactory(GCloudTestSuite.__testSupport.getDatastore()); } @Test diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionRenewTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionRenewTest.java deleted file mode 100644 index 7da9f94ff5c..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionRenewTest.java +++ /dev/null @@ -1,82 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import java.util.Set; - -import org.eclipse.jetty.server.session.AbstractSessionRenewTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.webapp.WebAppContext; - -import static org.junit.Assert.fail; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * SessionRenewTest - * - * - */ -public class SessionRenewTest extends AbstractSessionRenewTest -{ - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new GCloudTestServer(port,max, scavenge, evictionPolicy); - } - - @Test - @Override - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - try - { - Set ids = GCloudTestSuite.__testSupport.getSessionIds(); - return (!ids.contains(oldSessionId) && ids.contains(newSessionId)); - } - catch (Exception e) - { - fail(e.getMessage()); - return false; - } - - } - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionValueSavingTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionValueSavingTest.java deleted file mode 100644 index 64164c377ff..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/SessionValueSavingTest.java +++ /dev/null @@ -1,58 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import org.eclipse.jetty.server.session.AbstractSessionValueSavingTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * SessionValueSavingTest - * - * - */ -public class SessionValueSavingTest extends AbstractSessionValueSavingTest -{ - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionValueSavingTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - @Override - public void testSessionValueSaving() throws Exception - { - super.testSessionValueSaving(); - } - - -} diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/StopSessionManagerPreserveSessionTest.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/StopSessionManagerPreserveSessionTest.java deleted file mode 100644 index 27e2e48e592..00000000000 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/StopSessionManagerPreserveSessionTest.java +++ /dev/null @@ -1,84 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.gcloud.session; - -import static org.junit.Assert.fail; -import org.eclipse.jetty.server.session.AbstractStopSessionManagerPreserveSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * StopSessionManagerPreserveSessionTest - * - * - */ -public class StopSessionManagerPreserveSessionTest extends AbstractStopSessionManagerPreserveSessionTest -{ - - @AfterClass - public static void teardown () throws Exception - { - GCloudTestSuite.__testSupport.deleteSessions(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractStopSessionManagerPreserveSessionTest#checkSessionPersisted(String, boolean) - */ - @Override - public void checkSessionPersisted(String id, boolean expected) - { - try - { - GCloudTestSuite.__testSupport.assertSessions(1); - } - catch (Exception e) - { - fail(e.getMessage()); - } - - } - - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs,int evictionPolicy) throws Exception - { - return new GCloudTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); - } - /** - * @see org.eclipse.jetty.server.session.AbstractStopSessionManagerPreserveSessionTest#configureSessionManagement(org.eclipse.jetty.servlet.ServletContextHandler) - */ - @Override - public void configureSessionManagement(ServletContextHandler context) - { - - } - - @Test - @Override - public void testStopSessionManagerPreserveSession() throws Exception - { - super.testStopSessionManagerPreserveSession(); - } - - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java deleted file mode 100644 index e3475481c0f..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,44 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.File; - -import org.eclipse.jetty.util.IO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestHelper.java similarity index 76% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java rename to tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestHelper.java index 00d3b78fd0e..8d967eb7c93 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionCookieTest.java +++ b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestHelper.java @@ -18,13 +18,16 @@ package org.eclipse.jetty.server.session; -public class SessionCookieTest extends AbstractSessionCookieTest +/** + * HashTestHelper + * + */ +public class HashTestHelper { - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public static SessionDataStoreFactory newSessionDataStoreFactory() { - return new HashTestServer(port, max, scavenge, evictionPolicy); + return new NullSessionDataStoreFactory(); } } diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java deleted file mode 100644 index 509c0545e9a..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java +++ /dev/null @@ -1,44 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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; - -/** - * @version $Revision$ $Date$ - */ -public class HashTestServer extends AbstractTestServer -{ - - - public HashTestServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, evictionPolicy); - } - - - - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - DefaultSessionCache ss = new DefaultSessionCache(handler); - handler.setSessionCache(ss); - ss.setSessionDataStore(new NullSessionDataStore()); - return handler; - } - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java deleted file mode 100644 index 61f2f25f9d5..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java +++ /dev/null @@ -1,30 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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; - -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java similarity index 71% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java rename to tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java index 300150ba672..cce1f3f3470 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java +++ b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java @@ -21,19 +21,25 @@ package org.eclipse.jetty.server.session; import org.junit.Test; /** - * NewSessionTest + * NonClusteredSessionScavengingTest */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } + @Test public void testNewSession() throws Exception { super.testNewSession(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + return HashTestHelper.newSessionDataStoreFactory(); + } } diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java deleted file mode 100644 index 191b712b217..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,44 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.Test; - -/** - * ReentrantRequestSessionTest - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - - /** - * @see org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java deleted file mode 100644 index 763c7da6d3d..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java +++ /dev/null @@ -1,42 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.Test; - -public class RemoveSessionTest extends AbstractRemoveSessionTest -{ - - - @Test - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractRemoveSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer (port, max, scavenge, evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java deleted file mode 100644 index 4c56d31aba1..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java +++ /dev/null @@ -1,35 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.Test; - -public class ServerCrossContextSessionTest extends AbstractServerCrossContextSessionTest -{ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java similarity index 74% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java index 1c18689e65a..d7b7946d50d 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java @@ -20,13 +20,15 @@ package org.eclipse.jetty.server.session; import org.junit.Test; -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { - + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new HashTestServer(port,max,scavenge,evictionPolicy); + return HashTestHelper.newSessionDataStoreFactory(); } @Test 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 deleted file mode 100644 index 43f9ff53e2d..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java +++ /dev/null @@ -1,55 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.File; - - -import org.eclipse.jetty.util.IO; -import org.eclipse.jetty.webapp.WebAppContext; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class SessionRenewTest extends AbstractSessionRenewTest -{ - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port, max, scavenge,evictionPolicy); - } - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context ,String oldSessionId, String newSessionId) - { - return true; //no other tests possible, sessions only in memory - } - - -} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java deleted file mode 100644 index 75fb53ce36d..00000000000 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSharedSaving.java +++ /dev/null @@ -1,30 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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; - -public class SessionValueSharedSaving extends AbstractSessionValueSavingTest -{ - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java deleted file mode 100644 index a826db9b2cc..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - public static InfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredLastAccessTimeTest.java similarity index 73% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredLastAccessTimeTest.java index d6f7780c189..e3780be7c3b 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredLastAccessTimeTest.java @@ -18,10 +18,11 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -public class LastAccessTimeTest extends AbstractLastAccessTimeTest +public class ClusteredLastAccessTimeTest extends AbstractClusteredLastAccessTimeTest { public static InfinispanTestSupport __testSupport; @@ -39,18 +40,23 @@ public class LastAccessTimeTest extends AbstractLastAccessTimeTest { __testSupport.teardown(); } - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - } @Override public void testLastAccessTime() throws Exception { super.testLastAccessTime(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; + } } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java similarity index 72% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java index 59e045faacb..9ccce23a405 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java @@ -19,15 +19,16 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * SessionMigrationTest + * ClusteredSessionMigrationTest * * */ -public class SessionMigrationTest extends AbstractSessionMigrationTest +public class ClusteredSessionMigrationTest extends AbstractClusteredSessionMigrationTest { public static InfinispanTestSupport __testSupport; @@ -47,10 +48,15 @@ public class SessionMigrationTest extends AbstractSessionMigrationTest } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } @Override diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java similarity index 69% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java index f2f48579f28..e574172302f 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java @@ -19,15 +19,16 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * LocalSessionScavengingTest + * ClusteredSessionScavengingTest * * */ -public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTest +public class ClusteredSessionScavengingTest extends AbstractClusteredSessionScavengingTest { public static InfinispanTestSupport __testSupport; @@ -43,17 +44,18 @@ public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTe @AfterClass public static void teardown () throws Exception { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + __testSupport.teardown(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; + } } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java deleted file mode 100644 index e90b442bd1d..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java +++ /dev/null @@ -1,66 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ForwardedSessionTest - * - * - */ -public class ForwardedSessionTest extends AbstractForwardedSessionTest -{ - - public static InfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testSessionCreateInForward() throws Exception - { - super.testSessionCreateInForward(); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java deleted file mode 100644 index 7a981462c05..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java +++ /dev/null @@ -1,64 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.AfterClass; -import org.junit.BeforeClass; - - - -/** - * RemoteImmediateSaveTest - * - * - */ -public class ImmediateSaveTest extends AbstractImmediateSaveTest -{ - InfinispanTestSessionServer _server; - public static InfinispanTestSupport __testSupport; - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - _server = new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - return _server; - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java deleted file mode 100644 index c0cccc341fa..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java +++ /dev/null @@ -1,71 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.infinispan.Cache; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.manager.DefaultCacheManager; -import org.infinispan.manager.EmbeddedCacheManager; -import org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * ImmortalSessionTest - * - * - */ -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - - - public static InfinispanTestSupport __testSupport; - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractImmortalSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Override - public void testImmortalSession() throws Exception - { - super.testImmortalSession(); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java deleted file mode 100644 index fbe15290eca..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.eclipse.jetty.server.SessionIdManager; -import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStore; -import org.eclipse.jetty.webapp.WebAppContext; -import org.infinispan.Cache; -import org.infinispan.commons.api.BasicCache; -import org.infinispan.commons.util.CloseableIteratorSet; - -public class InfinispanTestSessionServer extends AbstractTestServer -{ - - - - public InfinispanTestSessionServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy, BasicCache config) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, evictionPolicy, config); - } - - - - @Override - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - InfinispanSessionDataStore sds = new InfinispanSessionDataStore(); - sds.setCache((BasicCache)_config); - DefaultSessionCache ss = new DefaultSessionCache(handler); - ss.setSessionDataStore(sds); - handler.setSessionCache(ss); - return handler; - } - - public boolean exists (WebAppContext context, String id) - { - BasicCache cache = (BasicCache)_config; - if (cache != null) - { - return cache.containsKey(((InfinispanSessionDataStore)(context.getSessionHandler().getSessionCache().getSessionDataStore())).getCacheKey(id)); - } - - return false; - } - - public Object get (WebAppContext context, String id) - { - BasicCache cache = (BasicCache)_config; - if (cache != null) - { - return cache.get(((InfinispanSessionDataStore)(context.getSessionHandler().getSessionCache().getSessionDataStore())).getCacheKey(id)); - } - - return null; - } - - public void dumpCache () - { - BasicCache cache = (BasicCache)_config; - if (cache != null) - { - System.err.println(cache.getName()+" contains "+cache.size()+" entries"); - } - } - - public void clearCache () - { - BasicCache cache = (BasicCache)_config; - - if (cache != null) - cache.clear(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSupport.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSupport.java index 2bcea542420..ac0016d379d 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSupport.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSupport.java @@ -57,6 +57,9 @@ public class InfinispanTestSupport } } + + + public InfinispanTestSupport () { this (null); diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java similarity index 66% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java index a79db60816f..056c13ece1c 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java @@ -16,16 +16,21 @@ // ======================================================================== // + package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Test; -public class RemoveSessionTest extends AbstractRemoveSessionTest +/** + * ModifyMaxInactiveIntervalTest + * + * + */ +public class ModifyMaxInactiveIntervalTest extends AbstractModifyMaxInactiveIntervalTest { - - public static InfinispanTestSupport __testSupport; + public static InfinispanTestSupport __testSupport; @BeforeClass @@ -42,17 +47,15 @@ public class RemoveSessionTest extends AbstractRemoveSessionTest } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - InfinispanTestSessionServer s = new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - return s; + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } - @Test - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); - } - } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java similarity index 72% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java index 38ba1ee5514..4f5659ba0e9 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java @@ -19,15 +19,16 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * NewSessionTest + * NonClusteredSessionScavengingTest * * */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { public static InfinispanTestSupport __testSupport; @@ -46,15 +47,18 @@ public class NewSessionTest extends AbstractNewSessionTest __testSupport.teardown(); } + + /** - * @see org.eclipse.jetty.server.session.AbstractNewSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } - @Override public void testNewSession() throws Exception diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java deleted file mode 100644 index f8119624768..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,64 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * ReentrantRequestSessionTest - * - * - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - public static InfinispanTestSupport __testSupport; - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port,int maxInactive, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactive, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Override - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java deleted file mode 100644 index efd6ad08af7..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java +++ /dev/null @@ -1,66 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * SameNodeLoadTest - * - * - */ -public class SameNodeLoadTest extends AbstractSameNodeLoadTest -{ - - public static InfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSameNodeLoadTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port,int maxInactive, int scavenge, int evictionPolicy) throws Exception - { - InfinispanTestSessionServer server = new InfinispanTestSessionServer(port,maxInactive, scavenge, evictionPolicy, __testSupport.getCache()); - return server; - } - - @Override - public void testLoad() throws Exception - { - super.testLoad(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java index 003a04bb3fb..c94cc8bb938 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java @@ -19,6 +19,7 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -41,13 +42,18 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest __testSupport.teardown(); } - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - InfinispanTestSessionServer server = new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - return server; - } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; + } + @Test @Override public void testSessionNotExpired() throws Exception diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java similarity index 72% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java index 99776526c2c..6cbe1b7a1f0 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java @@ -19,15 +19,16 @@ package org.eclipse.jetty.server.session; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * SessionInvalidateAndCreateTest + * SessionInvalidateCreateScavengeTest * * */ -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { public static InfinispanTestSupport __testSupport; @@ -46,13 +47,16 @@ public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAnd } + /** - * @see org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } @Override diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java deleted file mode 100644 index ef465716c00..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java +++ /dev/null @@ -1,83 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertTrue; - -import org.eclipse.jetty.webapp.WebAppContext; - -import static org.junit.Assert.assertFalse; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * SessionRenewTest - * - * - */ -public class SessionRenewTest extends AbstractSessionRenewTest -{ - - public static InfinispanTestSupport __testSupport; - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new InfinispanTestSupport(); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - assertTrue(((InfinispanTestSessionServer)_server).exists(context, newSessionId)); - assertFalse(((InfinispanTestSessionServer)_server).exists(context, oldSessionId)); - return (!((InfinispanTestSessionServer)_server).exists(context, oldSessionId)) && ((InfinispanTestSessionServer)_server).exists(context, newSessionId); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteRemoveSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/ModifyMaxInactiveIntervalTest.java similarity index 65% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteRemoveSessionTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/ModifyMaxInactiveIntervalTest.java index 5afc3b31d99..3eb3c5aff9f 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteRemoveSessionTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/ModifyMaxInactiveIntervalTest.java @@ -16,18 +16,22 @@ // ======================================================================== // + package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractRemoveSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractModifyMaxInactiveIntervalTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Test; -public class RemoteRemoveSessionTest extends AbstractRemoveSessionTest +/** + * ModifyMaxInactiveIntervalTest + * + * + */ +public class ModifyMaxInactiveIntervalTest extends AbstractModifyMaxInactiveIntervalTest { - public static RemoteInfinispanTestSupport __testSupport; @@ -45,17 +49,15 @@ public class RemoteRemoveSessionTest extends AbstractRemoveSessionTest } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - InfinispanTestSessionServer s = new InfinispanTestSessionServer(port, max, scavenge,evictionPolicy, __testSupport.getCache()); - return s; + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } - @Test - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); - } - } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteNewSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/NonClusteredSessionScavengingTest.java similarity index 67% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteNewSessionTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/NonClusteredSessionScavengingTest.java index 623ecf39a63..06cd5c31295 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteNewSessionTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/NonClusteredSessionScavengingTest.java @@ -19,18 +19,18 @@ package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractNewSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractNonClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * NewSessionTest + * NonClusteredSessionScavengingTest * * */ -public class RemoteNewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { public static RemoteInfinispanTestSupport __testSupport; @@ -48,14 +48,16 @@ public class RemoteNewSessionTest extends AbstractNewSessionTest { __testSupport.teardown(); } - + /** - * @see org.eclipse.jetty.server.session.AbstractNewSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClientCrossContextSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClientCrossContextSessionTest.java deleted file mode 100644 index 43c34cc5cfe..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClientCrossContextSessionTest.java +++ /dev/null @@ -1,69 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - - -import org.eclipse.jetty.server.session.AbstractClientCrossContextSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; - -/** - * RemoteClientCrossContextSessionTest - * - * - */ -public class RemoteClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - public static RemoteInfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInvalidationSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredInvalidationSessionTest.java similarity index 67% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInvalidationSessionTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredInvalidationSessionTest.java index 3a8abcd169a..d6063851885 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInvalidationSessionTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredInvalidationSessionTest.java @@ -19,19 +19,18 @@ package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractInvalidationSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractClusteredInvalidationSessionTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Ignore; /** * InvalidationSessionTest * * */ -public class RemoteInvalidationSessionTest extends AbstractInvalidationSessionTest +public class RemoteClusteredInvalidationSessionTest extends AbstractClusteredInvalidationSessionTest { public static RemoteInfinispanTestSupport __testSupport; @@ -52,15 +51,17 @@ public class RemoteInvalidationSessionTest extends AbstractInvalidationSessionTe __testSupport.teardown(); } + /** - * @see org.eclipse.jetty.server.session.AbstractInvalidationSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int maxInterval, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, maxInterval, scavengeInterval, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } - } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLastAccessTimeTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredLastAccessTimeTest.java similarity index 64% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLastAccessTimeTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredLastAccessTimeTest.java index d44e347261d..1731db92e08 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLastAccessTimeTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredLastAccessTimeTest.java @@ -18,21 +18,13 @@ package org.eclipse.jetty.server.session.remote; -import java.io.File; - -import org.eclipse.jetty.server.session.AbstractLastAccessTimeTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.eclipse.jetty.util.IO; -import org.infinispan.Cache; -import org.infinispan.configuration.cache.Configuration; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.manager.DefaultCacheManager; -import org.infinispan.manager.EmbeddedCacheManager; +import org.eclipse.jetty.server.session.AbstractClusteredLastAccessTimeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -public class RemoteLastAccessTimeTest extends AbstractLastAccessTimeTest +public class RemoteClusteredLastAccessTimeTest extends AbstractClusteredLastAccessTimeTest { public static RemoteInfinispanTestSupport __testSupport; @@ -51,10 +43,16 @@ public class RemoteLastAccessTimeTest extends AbstractLastAccessTimeTest } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } @Override diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionMigrationTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionMigrationTest.java similarity index 67% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionMigrationTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionMigrationTest.java index 373abb5e306..49b9274298e 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionMigrationTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionMigrationTest.java @@ -19,18 +19,18 @@ package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractSessionMigrationTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionMigrationTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * RemoteSessionMigrationTest + * RemoteClusteredSessionMigrationTest * * */ -public class RemoteSessionMigrationTest extends AbstractSessionMigrationTest +public class RemoteClusteredSessionMigrationTest extends AbstractClusteredSessionMigrationTest { public static RemoteInfinispanTestSupport __testSupport; @@ -50,11 +50,17 @@ public class RemoteSessionMigrationTest extends AbstractSessionMigrationTest } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } + @Override public void testSessionMigration() throws Exception { diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLocalSessionScavengingTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionScavengingTest.java similarity index 66% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLocalSessionScavengingTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionScavengingTest.java index 7daf9c9463b..9e254b4aa82 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteLocalSessionScavengingTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteClusteredSessionScavengingTest.java @@ -19,18 +19,18 @@ package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * LocalSessionScavengingTest + * ClusteredSessionScavengingTest * * */ -public class RemoteLocalSessionScavengingTest extends AbstractLocalSessionScavengingTest +public class RemoteClusteredSessionScavengingTest extends AbstractClusteredSessionScavengingTest { public static RemoteInfinispanTestSupport __testSupport; @@ -49,13 +49,16 @@ public class RemoteLocalSessionScavengingTest extends AbstractLocalSessionScaven } + /** - * @see org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } } diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteForwardedSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteForwardedSessionTest.java deleted file mode 100644 index 8de4a446db7..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteForwardedSessionTest.java +++ /dev/null @@ -1,67 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractForwardedSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * RemoteForwardedSessionTest - * - * - */ -public class RemoteForwardedSessionTest extends AbstractForwardedSessionTest -{ - - public static RemoteInfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testSessionCreateInForward() throws Exception - { - super.testSessionCreateInForward(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmediateSaveTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmediateSaveTest.java deleted file mode 100644 index ac4b655b870..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmediateSaveTest.java +++ /dev/null @@ -1,66 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractImmediateSaveTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.eclipse.jetty.server.session.SessionHandler; -import org.junit.AfterClass; -import org.junit.BeforeClass; - - - -/** - * RemoteImmediateSaveTest - * - * - */ -public class RemoteImmediateSaveTest extends AbstractImmediateSaveTest -{ - public static RemoteInfinispanTestSupport __testSupport; - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmortalSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmortalSessionTest.java deleted file mode 100644 index eef5e0466bd..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteImmortalSessionTest.java +++ /dev/null @@ -1,74 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractImmortalSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.infinispan.Cache; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.manager.DefaultCacheManager; -import org.infinispan.manager.EmbeddedCacheManager; -import org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * ImmortalSessionTest - * - * - */ -public class RemoteImmortalSessionTest extends AbstractImmortalSessionTest -{ - - - public static RemoteInfinispanTestSupport __testSupport; - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractImmortalSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactiveMs, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Override - public void testImmortalSession() throws Exception - { - super.testImmortalSession(); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java index c2d1562c83c..22c5c3c842a 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java @@ -19,17 +19,8 @@ package org.eclipse.jetty.server.session.remote; -import java.io.File; - -import org.eclipse.jetty.util.IO; -import org.infinispan.Cache; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; -import org.infinispan.configuration.cache.Configuration; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.configuration.global.GlobalConfigurationBuilder; -import org.infinispan.manager.DefaultCacheManager; -import org.infinispan.manager.EmbeddedCacheManager; /** * RemoteInfinispanTestSupport diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteReentrantRequestSessionTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteReentrantRequestSessionTest.java deleted file mode 100644 index a70dd635a2c..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteReentrantRequestSessionTest.java +++ /dev/null @@ -1,67 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * ReentrantRequestSessionTest - * - * - */ -public class RemoteReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - public static RemoteInfinispanTestSupport __testSupport; - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, maxInactive, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Override - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSameNodeLoadTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSameNodeLoadTest.java deleted file mode 100644 index f2b389263f1..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSameNodeLoadTest.java +++ /dev/null @@ -1,69 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractSameNodeLoadTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; - -/** - * SameNodeLoadTest - * - * - */ -public class RemoteSameNodeLoadTest extends AbstractSameNodeLoadTest -{ - - public static RemoteInfinispanTestSupport __testSupport; - - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSameNodeLoadTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavenge, int evictionPolicy) throws Exception - { - InfinispanTestSessionServer server = new InfinispanTestSessionServer(port, maxInactive, scavenge,evictionPolicy, __testSupport.getCache()); - return server; - } - - @Override - public void testLoad() throws Exception - { - super.testLoad(); - } - -} diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionExpiryTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionExpiryTest.java index 0bdc4e7c607..8d91af1fff0 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionExpiryTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionExpiryTest.java @@ -20,8 +20,8 @@ package org.eclipse.jetty.server.session.remote; import org.eclipse.jetty.server.session.AbstractSessionExpiryTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -44,11 +44,16 @@ public class RemoteSessionExpiryTest extends AbstractSessionExpiryTest __testSupport.teardown(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - InfinispanTestSessionServer server = new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - return server; + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } @Test diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateAndCreateTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateCreateScavengeTest.java similarity index 70% rename from tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateCreateScavengeTest.java index e794fbd029e..1761176bdaf 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionInvalidateCreateScavengeTest.java @@ -19,18 +19,18 @@ package org.eclipse.jetty.server.session.remote; -import org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; +import org.eclipse.jetty.server.session.AbstractSessionInvalidateCreateScavengeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.session.infinispan.InfinispanSessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; /** - * SessionInvalidateAndCreateTest + * SessionInvalidateCreateScavengeTest * * */ -public class RemoteSessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class RemoteSessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { public static RemoteInfinispanTestSupport __testSupport; @@ -49,13 +49,16 @@ public class RemoteSessionInvalidateAndCreateTest extends AbstractSessionInvalid } + /** - * @see org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); + InfinispanSessionDataStoreFactory factory = new InfinispanSessionDataStoreFactory(); + factory.setCache(__testSupport.getCache()); + return factory; } @Override diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionRenewTest.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionRenewTest.java deleted file mode 100644 index d2c7d5cedcf..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteSessionRenewTest.java +++ /dev/null @@ -1,78 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.remote; - -import org.eclipse.jetty.server.session.AbstractSessionRenewTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.InfinispanTestSessionServer; -import org.eclipse.jetty.webapp.WebAppContext; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * SessionRenewTest - * - * - */ -public class RemoteSessionRenewTest extends AbstractSessionRenewTest -{ - - public static RemoteInfinispanTestSupport __testSupport; - - - @BeforeClass - public static void setup () throws Exception - { - __testSupport = new RemoteInfinispanTestSupport("remote-session-test"); - __testSupport.setup(); - } - - @AfterClass - public static void teardown () throws Exception - { - __testSupport.teardown(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new InfinispanTestSessionServer(port, max, scavenge, evictionPolicy, __testSupport.getCache()); - } - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - return !((InfinispanTestSessionServer)_server).exists(context, oldSessionId) && ((InfinispanTestSessionServer)_server).exists(context, newSessionId); - } -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java deleted file mode 100644 index 193a536e145..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,52 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - -/** - * ClientCrossContextSessionTest - * - * - */ - -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/InvalidationSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredInvalidationSessionTest.java similarity index 72% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/InvalidationSessionTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredInvalidationSessionTest.java index f4e94d0fc47..d59b200da96 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/InvalidationSessionTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredInvalidationSessionTest.java @@ -23,16 +23,10 @@ import org.junit.After; import org.junit.Test; /** - * InvalidationSessionTest + * ClusteredInvalidationSessionTest */ -public class InvalidationSessionTest extends AbstractInvalidationSessionTest +public class ClusteredInvalidationSessionTest extends AbstractClusteredInvalidationSessionTest { - - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - @Test public void testInvalidation() throws Exception @@ -44,6 +38,16 @@ public class InvalidationSessionTest extends AbstractInvalidationSessionTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); + } + + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() + { + return JdbcTestHelper.newSessionDataStoreFactory(); } } 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/ClusteredLastAccessTimeTest.java similarity index 73% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LastAccessTimeTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredLastAccessTimeTest.java index f79b5d5d0ce..75a162f41e1 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/ClusteredLastAccessTimeTest.java @@ -22,15 +22,18 @@ import org.junit.After; import org.junit.Test; /** - * LastAccessTimeTest + * ClusteredLastAccessTimeTest */ -public class LastAccessTimeTest extends AbstractLastAccessTimeTest +public class ClusteredLastAccessTimeTest extends AbstractClusteredLastAccessTimeTest { - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } - @Test public void testLastAccessTime() throws Exception { @@ -40,7 +43,7 @@ public class LastAccessTimeTest extends AbstractLastAccessTimeTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java similarity index 72% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java index 7370039aa55..b94d3f8f0c7 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/OrphanedSessionTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredOrphanedSessionTest.java @@ -22,13 +22,17 @@ import org.junit.After; import org.junit.Test; /** - * OrphanedSessionTest + * ClusteredOrphanedSessionTest */ -public class OrphanedSessionTest extends AbstractOrphanedSessionTest +public class ClusteredOrphanedSessionTest extends AbstractClusteredOrphanedSessionTest { - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge,evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } @Test @@ -40,6 +44,6 @@ public class OrphanedSessionTest extends AbstractOrphanedSessionTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java similarity index 73% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java index 80e3bdeca35..26bd6c8f363 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionMigrationTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionMigrationTest.java @@ -22,16 +22,19 @@ import org.junit.After; import org.junit.Test; /** - * SessionMigrationTest + * ClusteredSessionMigrationTest */ -public class SessionMigrationTest extends AbstractSessionMigrationTest +public class ClusteredSessionMigrationTest extends AbstractClusteredSessionMigrationTest { - + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + @Test public void testSessionMigration() throws Exception { @@ -41,6 +44,6 @@ public class SessionMigrationTest extends AbstractSessionMigrationTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java similarity index 81% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java index 23b6e2ecb73..eafd44ca8e8 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/LocalSessionScavengingTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ClusteredSessionScavengingTest.java @@ -22,9 +22,9 @@ import org.junit.After; import org.junit.Test; /** - * LocalSessionScavengingTest + * ClusteredSessionScavengingTest */ -public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTest +public class ClusteredSessionScavengingTest extends AbstractClusteredSessionScavengingTest { public void pause (int scavenge) { @@ -43,9 +43,13 @@ public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTe } } - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } @Test @@ -65,6 +69,6 @@ public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTe @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java deleted file mode 100644 index ff8861e3e56..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ForwardedSessionTest.java +++ /dev/null @@ -1,54 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - -/** - * ForwardedSessionTest - * - * - */ -public class ForwardedSessionTest extends AbstractForwardedSessionTest -{ - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - - @Test - public void testSessionCreateInForward() throws Exception - { - super.testSessionCreateInForward(); - } - - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - - - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java deleted file mode 100644 index f54d49db176..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmediateSaveTest.java +++ /dev/null @@ -1,55 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.AfterClass; - - - -/** - * ImmediateSaveTest - * - * - */ -public class ImmediateSaveTest extends AbstractImmediateSaveTest -{ - JdbcTestServer _server; - - @AfterClass - public static void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - _server = new JdbcTestServer(port, max, scavenge, evictionPolicy) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - return _server; - } -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java deleted file mode 100644 index efd74500a6e..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java +++ /dev/null @@ -1,49 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - -/** - * ImmortalSessionTest - * - * - */ - -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - public AbstractTestServer createServer(int port, int maxInactiveMs, int scavengeMs, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, maxInactiveMs, scavengeMs, evictionPolicy); - } - - @Test - public void testImmortalSession() throws Exception - { - super.testImmortalSession(); - } - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestHelper.java similarity index 79% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestHelper.java index eaf5597d564..ec6c0066aa5 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestHelper.java @@ -30,9 +30,9 @@ import org.eclipse.jetty.server.SessionIdManager; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; /** - * JdbcTestServer + * JdbcTestHelper */ -public class JdbcTestServer extends AbstractTestServer +public class JdbcTestHelper { public static final String DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver"; public static final String DEFAULT_CONNECTION_URL = "jdbc:derby:memory:sessions;create=true"; @@ -79,32 +79,20 @@ public class JdbcTestServer extends AbstractTestServer } - public JdbcTestServer(int port, int maxInactivePeriod, int scavengePeriod, int idlePassivatePeriod, String connectionUrl) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, idlePassivatePeriod); - } - - public JdbcTestServer(int port, int maxInactivePeriod, int scavengePeriod, int idlePassivatePeriod) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, idlePassivatePeriod); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractTestServer#newSessionHandler() + + + /** + * @return a fresh JDBCSessionDataStoreFactory */ - @Override - public SessionHandler newSessionHandler() + public static SessionDataStoreFactory newSessionDataStoreFactory() { - SessionHandler handler = new TestSessionHandler(); - DefaultSessionCache sessionStore = new DefaultSessionCache(handler); - handler.setSessionCache(sessionStore); - JDBCSessionDataStore ds = new JDBCSessionDataStore(); - sessionStore.setSessionDataStore(ds); - ds.setGracePeriodSec(_scavengePeriod); + JDBCSessionDataStoreFactory factory = new JDBCSessionDataStoreFactory(); + DatabaseAdaptor da = new DatabaseAdaptor(); - da.setDriverInfo(DRIVER_CLASS, (_config==null?DEFAULT_CONNECTION_URL:(String)_config)); - ds.setDatabaseAdaptor(da); + da.setDriverInfo(DRIVER_CLASS, DEFAULT_CONNECTION_URL); + factory.setDatabaseAdaptor(da); + JDBCSessionDataStore.SessionTableSchema sessionTableSchema = new JDBCSessionDataStore.SessionTableSchema(); sessionTableSchema.setTableName(TABLE); sessionTableSchema.setIdColumn(ID_COL); @@ -118,15 +106,15 @@ public class JdbcTestServer extends AbstractTestServer sessionTableSchema.setLastSavedTimeColumn(LAST_SAVE_COL); sessionTableSchema.setMapColumn(MAP_COL); sessionTableSchema.setMaxIntervalColumn(MAX_IDLE_COL); - ds.setSessionTableSchema(sessionTableSchema); - return handler; + factory.setSessionTableSchema(sessionTableSchema); + return factory; } - public boolean existsInSessionTable(String id, boolean verbose) + public static boolean existsInSessionTable(String id, boolean verbose) throws Exception { Class.forName(DRIVER_CLASS); @@ -160,7 +148,7 @@ public class JdbcTestServer extends AbstractTestServer - public Set getSessionIds () + public static Set getSessionIds () throws Exception { HashSet ids = new HashSet(); 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 deleted file mode 100644 index 5d45e100e6c..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/MaxInactiveMigrationTest.java +++ /dev/null @@ -1,133 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.io.PrintWriter; - -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 org.junit.After; -import org.junit.Before; -import org.junit.Test; - - -/** - * MaxInactiveMigrationTest - * - * Test - */ -public class MaxInactiveMigrationTest -{ - private JdbcTestServer testServer1; - private JdbcTestServer testServer2; - private HttpClient client; - private String sessionCookie; - - @Test - public void testFailover() throws Exception { - String response1 = sendRequest( testServer1 ); - String response2 = sendRequest( testServer2 ); - - assertEquals( "Hello World 1", response1 ); - assertEquals( "Hello World 2", response2 ); - } - - @Before - public void setUp() throws Exception { - testServer1 = new JdbcTestServer(0, -1, 2, -1); - testServer2 = new JdbcTestServer(0, -1, 2, -1); - ServletContextHandler context = testServer1.addContext(""); - context.addServlet(TestServlet.class, "/test"); - ServletContextHandler context2 = testServer2.addContext(""); - context2.addServlet(TestServlet.class, "/test"); - testServer1.start(); - testServer2.start(); - client = new HttpClient(); - client.start(); - } - - @After - public void tearDown() throws Exception { - - testServer1.stop(); - testServer2.stop(); - client.stop(); - - JdbcTestServer.shutdown(null); - } - - - - private String sendRequest( JdbcTestServer server ) throws Exception { - - int port=server.getPort(); - - //Log.getLog().setDebugEnabled(true); - Request request = client.newRequest("http://localhost:" + port + "" + "/test"); - if (sessionCookie != null) - request.header("Cookie", sessionCookie); - ContentResponse response = request.send(); - assertEquals(HttpServletResponse.SC_OK, response.getStatus()); - - sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue( sessionCookie != null ); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - return response.getContentAsString(); - } - - - - public static class TestServlet extends HttpServlet { - private static final long serialVersionUID = 1L; - private static final String ATTR_COUNTER = "counter"; - - protected void doGet( HttpServletRequest request, HttpServletResponse response ) - throws IOException - { - HttpSession session = request.getSession( true ); - Integer counter = ( Integer )session.getAttribute( ATTR_COUNTER ); - if( counter == null ) { - counter = 0; - } - counter = counter + 1; - session.setAttribute( ATTR_COUNTER, counter ); - PrintWriter writer = response.getWriter(); - writer.write( "Hello World " + counter); - writer.flush(); - } - - public String getServletInfo() { - return "Test Servlet"; - } - } - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java index 7cdca47c968..7e16c7ae054 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ModifyMaxInactiveIntervalTest.java @@ -16,503 +16,32 @@ // ======================================================================== // + package org.eclipse.jetty.server.session; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -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 org.junit.After; -import org.junit.Test; - /** * ModifyMaxInactiveIntervalTest * * - * */ -public class ModifyMaxInactiveIntervalTest +public class ModifyMaxInactiveIntervalTest extends AbstractModifyMaxInactiveIntervalTest { - - - public static int newMaxInactive = 20; - public static int __scavenge = 1; - - - @Test - public void testReduceMaxInactiveInterval() throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - int oldMaxInactive = 3; - int newMaxInactive = 1; - int sleep = (int)(oldMaxInactive * 0.8); - - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive, 1, SessionCache.NEVER_EVICT); - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to reduce the maxinactive interval - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } + return JdbcTestHelper.newSessionDataStoreFactory(); } - - @Test - public void testIncreaseMaxInactiveInterval() throws Exception - { - - int oldMaxInactive = 3; - int newMaxInactive = 5; - int sleep = (int)(oldMaxInactive * 0.8); - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive, 1, SessionCache.NEVER_EVICT); - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to increase the maxinactive interval, first waiting until the old expiration should have passed - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - - @Test - public void testSetMaxInactiveIntervalWithImmortalSessionAndEviction() throws Exception - { - int oldMaxInactive = -1; - int newMaxInactive = 120; //2min - int evict = 2; - int sleep = evict; - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive, 1, evict); - - - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to reduce the maxinactive interval - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - - @Test - public void testSetMaxInactiveIntervalWithNonImmortalSessionAndEviction() throws Exception - { - int oldMaxInactive = 10; - int newMaxInactive = 2; - int evict = 4; - int sleep = evict; - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive, 1, evict); - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to reduce the maxinactive interval - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - @Test - public void testChangeMaxInactiveIntervalForImmortalSessionNoEviction() throws Exception - { - int oldMaxInactive = -1; - int newMaxInactive = 120; - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive, 1, SessionCache.NEVER_EVICT); - - - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to change the maxinactive interval - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+2); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - @Test - public void testNoExpireSessionInUse() throws Exception - { - int maxInactive = 3; - int sleep = maxInactive + (int)(maxInactive * 0.8); - - AbstractTestServer server = new JdbcTestServer(0, maxInactive, 1, SessionCache.NEVER_EVICT); - - - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request that will sleep long enough for the session expiry time to have passed - //before trying to access the session and ensure it is still there - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=sleep&val="+sleep); - request.header("Cookie", sessionCookie); - response = request.send(); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - @Test - public void testSessionExpiryAfterModifiedMaxInactiveInterval() throws Exception - { - int oldMaxInactive = 4; - int newMaxInactive = 20; - int sleep = oldMaxInactive+(int)(oldMaxInactive * 0.8); - - AbstractTestServer server = new JdbcTestServer(0, oldMaxInactive,__scavenge, SessionCache.NEVER_EVICT); - - ServletContextHandler ctxA = server.addContext("/mod"); - ctxA.addServlet(TestModServlet.class, "/test"); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //do another request to change the maxinactive interval - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //wait for longer than the old inactive interval - Thread.currentThread().sleep(sleep*1000L); - - //do another request using the cookie to ensure the session is still there - request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } - - public static class TestModServlet 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); - return; - } - - if ("change".equals(action)) - { - //change the expiry time for the session, maybe sleeping before the change - String tmp = request.getParameter("val"); - int interval = -1; - interval = (tmp==null?-1:Integer.parseInt(tmp)); + - tmp = request.getParameter("wait"); - int wait = (tmp==null?0:Integer.parseInt(tmp)); - if (wait >0) - { - try { Thread.currentThread().sleep(wait*1000);}catch (Exception e) {throw new ServletException(e);} - } - HttpSession session = request.getSession(false); - if (session == null) - throw new ServletException("Session is null for action=change"); - - if (interval > 0) - session.setMaxInactiveInterval(interval); - - session = request.getSession(false); - if (session == null) - throw new ServletException ("Null session after maxInactiveInterval change"); - return; - } - - if ("sleep".equals(action)) - { - //sleep before trying to access the session - - HttpSession session = request.getSession(false); - if (session == null) - throw new ServletException("Session is null for action=sleep"); - - String tmp = request.getParameter("val"); - int interval = 0; - interval = (tmp==null?0:Integer.parseInt(tmp)); - - if (interval > 0) - { - try{Thread.currentThread().sleep(interval*1000);}catch (Exception e) {throw new ServletException(e);} - } - - session = request.getSession(false); - if (session == null) - throw new ServletException("Session null after sleep"); - - return; - } - - if ("test".equals(action)) - { - HttpSession session = request.getSession(false); - if (session == null) - throw new ServletException("Session does not exist"); - String tmp = request.getParameter("val"); - int interval = 0; - interval = (tmp==null?0:Integer.parseInt(tmp)); - - assertEquals(interval, session.getMaxInactiveInterval()); - return; - } - } - } - } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java similarity index 72% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java index 62f2bdec8a8..d320b2e0f83 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NewSessionTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/NonClusteredSessionScavengingTest.java @@ -22,17 +22,20 @@ import org.junit.After; import org.junit.Test; /** - * NewSessionTest + * NonClusteredSessionScavengingTest */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { + /** - * @see org.eclipse.jetty.server.session.AbstractNewSessionTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + @Test public void testNewSession() throws Exception @@ -43,7 +46,7 @@ public class NewSessionTest extends AbstractNewSessionTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java index 7dfc4e15b95..f60b86d2307 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ProxySerializationTest.java @@ -30,15 +30,17 @@ import org.junit.Test; */ public class ProxySerializationTest extends AbstractProxySerializationTest { - + /** - * @see org.eclipse.jetty.server.session.AbstractProxySerializationTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port, max, scavenge, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + + /** * @see org.eclipse.jetty.server.session.AbstractProxySerializationTest#customizeContext(org.eclipse.jetty.servlet.ServletContextHandler) @@ -61,6 +63,6 @@ public class ProxySerializationTest extends AbstractProxySerializationTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java deleted file mode 100644 index 6f8ee25ddf6..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,49 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - - -/** - * ReentrantRequestSessionTest - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port,max,scavenge,evictionPolicy); - } - - @Test - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReloadedSessionMissingClassTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReloadedSessionMissingClassTest.java index 69f4ea98a62..af2bedf084b 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReloadedSessionMissingClassTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ReloadedSessionMissingClassTest.java @@ -87,8 +87,12 @@ public class ReloadedSessionMissingClassTest URLClassLoader loaderWithFoo = new URLClassLoader(foobarUrls, Thread.currentThread().getContextClassLoader()); URLClassLoader loaderWithoutFoo = new URLClassLoader(barUrls, Thread.currentThread().getContextClassLoader()); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = JdbcTestHelper.newSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); - AbstractTestServer server1 = new JdbcTestServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + TestServer server1 = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC,cacheFactory, storeFactory); WebAppContext webApp = server1.addWebAppContext(unpackedWarDir.getCanonicalPath(), contextPath); webApp.getSessionHandler().getSessionCache().setRemoveUnloadableSessions(true); @@ -147,7 +151,7 @@ public class ReloadedSessionMissingClassTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SaveIntervalTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SaveIntervalTest.java deleted file mode 100644 index bfb27c5a836..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SaveIntervalTest.java +++ /dev/null @@ -1,187 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -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 org.eclipse.jetty.servlet.ServletHolder; -import org.junit.After; -import org.junit.Ignore; -import org.junit.Test; - -/** - * SaveIntervalTest - * - * Checks to see that potentially stale sessions that have not - * changed are not always reloaded from the database. - * - * This test is Ignored because it takes a little while to run. - * - */ -public class SaveIntervalTest -{ - public static int INACTIVE = 90; //sec - public static int SCAVENGE = 100; //sec - public static int SAVE = 10; //sec - - - @Ignore - @Test - public void testSaveInterval() throws Exception - { - AbstractTestServer server = new JdbcTestServer(0,INACTIVE,SCAVENGE, SessionCache.NEVER_EVICT); - - ServletContextHandler ctxA = server.addContext("/mod"); - ServletHolder holder = new ServletHolder(); - TestSaveIntervalServlet servlet = new TestSaveIntervalServlet(); - holder.setServlet(servlet); - ctxA.addServlet(holder, "/test"); - - - //TODO set up the intermittent save - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - long lastSaved = ((Session)servlet._session).getSessionData().getLastSaved(); - - - //do another request to change the session attribute - Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=set"); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - long tmp = ((Session)servlet._session).getSessionData().getLastSaved(); - assertNotEquals(lastSaved, tmp); //set of attribute will cause save to db - lastSaved = tmp; - - //do nothing for just a bit longer than the save interval to ensure - //session will be checked against database on next request - Thread.currentThread().sleep((SAVE+2)*1000); - - - //do another request to access the session, this will cause session to be initially - //checked against db. On exit of request, the access time will need updating, so the - //session will be saved to db. - request = client.newRequest("http://localhost:" + port + "/mod/test?action=tickle"); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - tmp = ((Session)servlet._session).getSessionData().getLastSaved(); - assertNotEquals(lastSaved, tmp); - lastSaved = tmp; - - //wait a little and do another request to access the session - Thread.currentThread().sleep((SAVE/2)*1000); - - //do another request to access the session. This time, the save interval has not - //expired, so we should NOT see a debug trace of loading stale session. Nor should - //the exit of the request cause a save of the updated access time. - request = client.newRequest("http://localhost:" + port + "/mod/test?action=tickle"); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - tmp = ((Session)servlet._session).getSessionData().getLastSaved(); - assertEquals(lastSaved, tmp); //the save interval did not expire, so update to the access time will not have been persisted - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - - public static class TestSaveIntervalServlet extends HttpServlet - { - public HttpSession _session; - - - @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); - _session = session; - return; - } - - if ("set".equals(action)) - { - HttpSession session = request.getSession(false); - if (session == null) - throw new ServletException("Session is null for action=change"); - - session.setAttribute("aaa", "12345"); - assertEquals(_session.getId(), session.getId()); - return; - } - - if ("tickle".equals(action)) - { - HttpSession session = request.getSession(false); - if (session == null) - throw new ServletException("Session does not exist"); - - assertEquals(_session.getId(), session.getId()); - return; - } - } - } - -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java deleted file mode 100644 index 39f1de0d8d4..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/ServerCrossContextSessionTest.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - -/** - * ServerCrossContextSessionTest - */ -public class ServerCrossContextSessionTest extends AbstractServerCrossContextSessionTest -{ - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java index 00e3bbd008d..664d6f59bc7 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionExpiryTest.java @@ -31,15 +31,16 @@ import org.junit.Test; */ public class SessionExpiryTest extends AbstractSessionExpiryTest { - + /** - * @see org.eclipse.jetty.server.session.AbstractSessionExpiryTest#createServer(int, int, int, int) + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + @Test public void testSessionExpiry() throws Exception @@ -49,9 +50,16 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest super.testSessionExpiry(); } } - - - + + /** + * @see org.eclipse.jetty.server.session.AbstractSessionExpiryTest#testSessionExpiresWithListener() + */ + @Test + public void testSessionExpiresWithListener() throws Exception + { + super.testSessionExpiresWithListener(); + } + @Test @@ -63,7 +71,7 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java similarity index 74% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java index 67beb0a46ab..3b99c4c1b9e 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionInvalidateCreateScavengeTest.java @@ -22,14 +22,18 @@ package org.eclipse.jetty.server.session; import org.junit.After; import org.junit.Test; -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new JdbcTestServer(port,max,scavenge,evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + @Test public void testSessionScavenge() throws Exception @@ -41,7 +45,7 @@ public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAnd @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } 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 deleted file mode 100644 index 0c8c0dafeaa..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.fail; - -import org.eclipse.jetty.webapp.WebAppContext; -import org.junit.After; -import org.junit.Test; - -public class SessionRenewTest extends AbstractSessionRenewTest -{ - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new JdbcTestServer(port, max, scavenge, evictionPolicy); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - try - { - //assert the new one exists - assertTrue(((JdbcTestServer)_server).existsInSessionTable(newSessionId, false)); - assertFalse(((JdbcTestServer)_server).existsInSessionTable(oldSessionId, false)); - return true; - } - catch (Exception e) - { - fail(e.getMessage()); - } - - return false; - } - - - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - -} 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 deleted file mode 100644 index f7af6a1e507..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/SessionValueSavingTest.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 org.junit.After; -import org.junit.Test; - -/** - * LastAccessTimeTest - */ -public class SessionValueSavingTest extends AbstractSessionValueSavingTest -{ - public AbstractTestServer createServer(int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new JdbcTestServer(port,max,scavenge,evictionPolicy); - } - - @Test - public void testSessionValueSaving() throws Exception - { - super.testSessionValueSaving(); - } - - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/StopSessionManagerPreserveSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/StopSessionManagerPreserveSessionTest.java deleted file mode 100644 index a7ad1522bd5..00000000000 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/StopSessionManagerPreserveSessionTest.java +++ /dev/null @@ -1,73 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.junit.After; -import org.junit.Test; - -public class StopSessionManagerPreserveSessionTest extends AbstractStopSessionManagerPreserveSessionTest -{ - JdbcTestServer _server; - - - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - - @Override - public void checkSessionPersisted(String id, boolean expected) - { - try - { - boolean actual = _server.existsInSessionTable(id, true); - assertEquals(expected, actual); - } - catch (Exception e) - { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - _server = new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - return _server; - } - - @Override - public void configureSessionManagement(ServletContextHandler context) - { - //nothing special - } - - - @Test - public void testStopSessionManagerPreserveSession() throws Exception - { - super.testStopSessionManagerPreserveSession(); - } -} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/WebAppObjectInSessionTest.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/WebAppObjectInSessionTest.java index 3221ee7d5f8..eb3aab6a673 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/WebAppObjectInSessionTest.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/WebAppObjectInSessionTest.java @@ -29,12 +29,18 @@ import org.junit.Test; */ public class WebAppObjectInSessionTest extends AbstractWebAppObjectInSessionTest { + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { Resource.setDefaultUseCaches(false); - return new JdbcTestServer(port, maxInactive, scavengeInterval, evictionPolicy); + return JdbcTestHelper.newSessionDataStoreFactory(); } + + @Test public void testWebappObjectInSession() throws Exception { @@ -45,7 +51,7 @@ public class WebAppObjectInSessionTest extends AbstractWebAppObjectInSessionTest @After public void tearDown() throws Exception { - JdbcTestServer.shutdown(null); + JdbcTestHelper.shutdown(null); } } diff --git a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/CachingSessionDataStoreTest.java b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/CachingSessionDataStoreTest.java index e64c399b96b..4223b905220 100644 --- a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/CachingSessionDataStoreTest.java +++ b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/CachingSessionDataStoreTest.java @@ -34,13 +34,14 @@ 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.memcached.sessions.MemcachedTestServer.MockDataStore; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.memcached.sessions.MemcachedTestHelper.MockDataStore; import org.eclipse.jetty.server.session.CachingSessionDataStore; -import org.eclipse.jetty.server.session.SessionCache; +import org.eclipse.jetty.server.session.DefaultSessionCacheFactory; import org.eclipse.jetty.server.session.SessionData; import org.eclipse.jetty.server.session.SessionDataMap; import org.eclipse.jetty.server.session.SessionDataStore; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.server.session.TestServer; import org.eclipse.jetty.servlet.ServletContextHandler; import org.junit.Test; /** @@ -50,10 +51,7 @@ import org.junit.Test; */ public class CachingSessionDataStoreTest { - public AbstractTestServer createServer (int port, int max, int scavenge,int evictionPolicy) throws Exception - { - return new MemcachedTestServer(port, max, scavenge, evictionPolicy); - } + @Test public void testSessionCRUD () throws Exception @@ -61,8 +59,11 @@ public class CachingSessionDataStoreTest String servletMapping = "/server"; int scavengePeriod = -1; int maxInactivePeriod = -1; + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + SessionDataStoreFactory storeFactory = MemcachedTestHelper.newSessionDataStoreFactory(); + //Make sure sessions are evicted on request exit so they will need to be reloaded via cache/persistent store - AbstractTestServer server = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.EVICT_ON_SESSION_EXIT); + TestServer server = new TestServer(0, maxInactivePeriod, scavengePeriod, cacheFactory, storeFactory); ServletContextHandler context = server.addContext("/"); context.addServlet(TestServlet.class, servletMapping); String contextPath = ""; @@ -84,7 +85,7 @@ public class CachingSessionDataStoreTest assertTrue(sessionCookie != null); // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - String id = AbstractTestServer.extractSessionId(sessionCookie); + String id = TestServer.extractSessionId(sessionCookie); //check that the memcache contains the session, and the session data store contains the session CachingSessionDataStore ds = (CachingSessionDataStore)context.getSessionHandler().getSessionCache().getSessionDataStore(); diff --git a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestHelper.java similarity index 74% rename from tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java rename to tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestHelper.java index 909d87c7926..3ea31d32a5c 100644 --- a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java +++ b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestHelper.java @@ -19,26 +19,27 @@ package org.eclipse.jetty.memcached.sessions; +import java.net.InetSocketAddress; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.eclipse.jetty.memcached.session.MemcachedSessionDataMap; +import org.eclipse.jetty.memcached.session.MemcachedSessionDataMapFactory; import org.eclipse.jetty.server.session.AbstractSessionDataStore; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.CachingSessionDataStore; -import org.eclipse.jetty.server.session.DefaultSessionCache; +import org.eclipse.jetty.server.session.AbstractSessionDataStoreFactory; +import org.eclipse.jetty.server.session.CachingSessionDataStoreFactory; import org.eclipse.jetty.server.session.SessionData; +import org.eclipse.jetty.server.session.SessionDataStore; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.eclipse.jetty.server.session.SessionHandler; -import org.eclipse.jetty.server.session.TestSessionHandler; /** - * MemcachedTestServer + * MemcachedTestHelper * * */ -public class MemcachedTestServer extends AbstractTestServer +public class MemcachedTestHelper { public static class MockDataStore extends AbstractSessionDataStore @@ -139,38 +140,33 @@ public class MemcachedTestServer extends AbstractTestServer { super.doStop(); } - - + } + + + public static class MockDataStoreFactory extends AbstractSessionDataStoreFactory + { + + /** + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ + @Override + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception + { + return new MockDataStore(); + } } - /** - * @param port - * @param maxInactivePeriod - * @param scavengePeriod - * @param evictionPolicy - */ - public MemcachedTestServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy) throws Exception + + public static SessionDataStoreFactory newSessionDataStoreFactory() { - super(port, maxInactivePeriod, scavengePeriod, evictionPolicy); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractTestServer#newSessionHandler() - */ - @Override - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - handler.setSessionIdManager(_sessionIdManager); - MockDataStore persistentStore = new MockDataStore(); - MemcachedSessionDataMap sdm = new MemcachedSessionDataMap("localhost", "11211"); - CachingSessionDataStore cachingStore = new CachingSessionDataStore(sdm, persistentStore); - DefaultSessionCache ss = new DefaultSessionCache(handler); - ss.setSessionDataStore(cachingStore); - handler.setSessionCache(ss); - return handler; + MockDataStoreFactory storeFactory = new MockDataStoreFactory(); + MemcachedSessionDataMapFactory mapFactory = new MemcachedSessionDataMapFactory(); + mapFactory.setAddresses(new InetSocketAddress("localhost", 11211)); + + CachingSessionDataStoreFactory factory = new CachingSessionDataStoreFactory(); + factory.setSessionDataMapFactory(mapFactory); + factory.setSessionStoreFactory(storeFactory); + return factory; } } diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/AttributeNameTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/AttributeNameTest.java index 5c74e8c8c5a..13228e34170 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/AttributeNameTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/AttributeNameTest.java @@ -34,9 +34,10 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.http.HttpHeader; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.DefaultSessionCacheFactory; import org.eclipse.jetty.server.session.Session; import org.eclipse.jetty.server.session.SessionCache; +import org.eclipse.jetty.server.session.TestServer; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -55,24 +56,16 @@ public class AttributeNameTest @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - public AbstractTestServer createServer(int port, int max, int scavenge, int idlePassivate) - throws Exception - { - MongoTestServer server = new MongoTestServer(port,max,scavenge,idlePassivate, true); - - return server; - - } @Test public void testAttributeNamesWithDots() throws Exception @@ -81,12 +74,19 @@ public class AttributeNameTest String servletMapping = "/server"; int maxInactivePeriod = 10000; int scavengePeriod = 20000; - AbstractTestServer server1 = createServer(0,maxInactivePeriod,scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory (); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + + MongoSessionDataStoreFactory storeFactory = MongoTestHelper.newSessionDataStoreFactory(); + storeFactory.setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer (0,maxInactivePeriod,scavengePeriod, cacheFactory, storeFactory); server1.addContext(contextPath).addServlet(TestServlet.class,servletMapping); server1.start(); int port1 = server1.getPort(); - AbstractTestServer server2 = createServer(0,maxInactivePeriod,scavengePeriod, SessionCache.NEVER_EVICT); + TestServer server2 = new TestServer (0,maxInactivePeriod,scavengePeriod, cacheFactory, storeFactory); server2.addContext(contextPath).addServlet(TestServlet.class,servletMapping); server2.start(); int port2 = server2.getPort(); diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java deleted file mode 100644 index 01cb55627d5..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java +++ /dev/null @@ -1,57 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractClientCrossContextSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class ClientCrossContextSessionTest extends AbstractClientCrossContextSessionTest -{ - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - - - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/InvalidateSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredInvalidateSessionTest.java similarity index 64% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/InvalidateSessionTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredInvalidateSessionTest.java index 1af11032d85..4c2a241e98a 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/InvalidateSessionTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredInvalidateSessionTest.java @@ -19,31 +19,36 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractInvalidationSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredInvalidationSessionTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Test; -public class InvalidateSessionTest extends AbstractInvalidationSessionTest +public class ClusteredInvalidateSessionTest extends AbstractClusteredInvalidationSessionTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInterval, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port, maxInterval, scavengeInterval, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } + + + } 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/ClusteredLastAccessTimeTest.java similarity index 66% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredLastAccessTimeTest.java index 6c51e658d87..9a19dfb4007 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/ClusteredLastAccessTimeTest.java @@ -18,35 +18,39 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractLastAccessTimeTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredLastAccessTimeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -public class LastAccessTimeTest extends AbstractLastAccessTimeTest +public class ClusteredLastAccessTimeTest extends AbstractClusteredLastAccessTimeTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } - @Test diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredOrphanedSessionTest.java similarity index 65% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredOrphanedSessionTest.java index 3c49152ed95..993bc867b38 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredOrphanedSessionTest.java @@ -18,37 +18,42 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractOrphanedSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredOrphanedSessionTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** - * OrphanedSessionTest + * ClusteredOrphanedSessionTest */ -public class OrphanedSessionTest extends AbstractOrphanedSessionTest +public class ClusteredOrphanedSessionTest extends AbstractClusteredOrphanedSessionTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } + @Test public void testOrphanedSession() throws Exception { diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionMigrationTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionMigrationTest.java similarity index 67% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionMigrationTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionMigrationTest.java index c1ff7f06a33..aff162d655b 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionMigrationTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionMigrationTest.java @@ -18,36 +18,40 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractSessionMigrationTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionMigrationTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -public class SessionMigrationTest extends AbstractSessionMigrationTest +public class ClusteredSessionMigrationTest extends AbstractClusteredSessionMigrationTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port, maxInactive, scavengeInterval, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } + @Test public void testSessionMigration() throws Exception { diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LocalSessionScavengingTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionScavengingTest.java similarity index 67% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LocalSessionScavengingTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionScavengingTest.java index a4d242efac9..2de108c19cb 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LocalSessionScavengingTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClusteredSessionScavengingTest.java @@ -18,36 +18,38 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractLocalSessionScavengingTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -public class LocalSessionScavengingTest extends AbstractLocalSessionScavengingTest +public class ClusteredSessionScavengingTest extends AbstractClusteredSessionScavengingTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - MongoTestServer mserver=new MongoTestServer(port,max,scavenge, evictionPolicy); - - return mserver; + return MongoTestHelper.newSessionDataStoreFactory(); } + @Override public void testLocalSessionsScavenging() throws Exception { diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/CreateAndInvalidateTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/CreateAndInvalidateTest.java deleted file mode 100644 index f2991ee6747..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/CreateAndInvalidateTest.java +++ /dev/null @@ -1,105 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.eclipse.jetty.server.session.AbstractCreateAndInvalidateTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.After; -import org.junit.Before; - -import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; - -/** - * CreateAndInvalidateTest - * - * - */ -public class CreateAndInvalidateTest extends AbstractCreateAndInvalidateTest -{ - @Before - public void beforeTest() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @After - public void afterTest() throws Exception - { - MongoTestServer.dropCollection(); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractCreateAndInvalidateTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new MongoTestServer(port,max,scavenge, evictionPolicy); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractCreateAndInvalidateTest#checkSession(java.lang.String, boolean) - */ - @Override - public void checkSession(String sessionId, boolean isPersisted) throws Exception - { - DBCollection sessions = MongoTestServer.getCollection(); - DBObject o = sessions.findOne(new BasicDBObject(MongoSessionDataStore.__ID,sessionId)); - if (!isPersisted) - assertNull(o); - else - assertNotNull(o); - } - - - /** - * @see org.eclipse.jetty.server.session.AbstractCreateAndInvalidateTest#checkSessionByKey(java.lang.String, java.lang.String, boolean) - */ - public void checkSessionByKey (String sessionId, String context, boolean isPersisted) throws Exception - { - DBCollection sessions = MongoTestServer.getCollection(); - DBObject o = sessions.findOne(new BasicDBObject(MongoSessionDataStore.__ID,sessionId)); - if (!isPersisted) - assertNull(o); - else - assertNotNull(o); - - if (isPersisted) - { - Boolean valid = (Boolean)o.get(MongoSessionDataStore.__VALID); - assertNotNull(valid); - assertTrue(valid); - DBObject c = (DBObject)o.get("context"); - assertNotNull(c); - DBObject c1 = (DBObject)c.get(context); - assertNotNull(c1); - } - } -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ForwardedSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ForwardedSessionTest.java deleted file mode 100644 index 98dcfa165b1..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ForwardedSessionTest.java +++ /dev/null @@ -1,61 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractForwardedSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ForwardedSessionTest - * - * - */ -public class ForwardedSessionTest extends AbstractForwardedSessionTest -{ - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new MongoTestServer(port,maxInactive, scavengeInterval, evictionPolicy); - } - - @Test - public void testSessionCreateInForward() throws Exception - { - super.testSessionCreateInForward(); - } -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/IdleSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/IdleSessionTest.java deleted file mode 100644 index 5469e134ebe..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/IdleSessionTest.java +++ /dev/null @@ -1,109 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import org.eclipse.jetty.server.session.AbstractIdleSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.Session; -import org.eclipse.jetty.util.thread.Locker.Lock; -import org.junit.After; -import org.junit.Before; - -/** - * IdleSessionTest - * - * - */ -public class IdleSessionTest extends AbstractIdleSessionTest -{ - @Before - public void beforeTest() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @After - public void afterTest() throws Exception - { - MongoTestServer.dropCollection(); - } - - - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(final int port, final int max, final int scavenge, final int evictionPolicy) throws Exception - { - return new MongoTestServer(port,max,scavenge, evictionPolicy); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#checkSessionIdled(java.lang.String) - */ - @Override - public void checkSessionIdled(String sessionId) - { - assertNotNull(_servlet); - assertNotNull(_servlet._session); - try (Lock lock = ((Session)_servlet._session).lock()) - { - assertTrue(!((Session)_servlet._session).isResident()); - } - } - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#checkSessionDeIdled(java.lang.String) - */ - @Override - public void checkSessionDeIdled(String sessionId) - { - assertNotNull(_servlet); - assertNotNull(_servlet._session); - try (Lock lock = ((Session)_servlet._session).lock()) - { - assertTrue(((Session)_servlet._session).isResident()); - } - } - - /** - * @see org.eclipse.jetty.server.session.AbstractIdleSessionTest#deleteSessionData(java.lang.String) - */ - @Override - public void deleteSessionData(String sessionId) - { - try - { - MongoTestServer.dropCollection(); - } - catch (Exception e) - { - fail(e.getMessage()); - } - - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmediateSaveTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmediateSaveTest.java deleted file mode 100644 index 748968b1126..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmediateSaveTest.java +++ /dev/null @@ -1,67 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertNotNull; - -import org.eclipse.jetty.server.session.AbstractImmediateSaveTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.SessionHandler; -import org.junit.After; -import org.junit.Before; - -import com.mongodb.BasicDBObject; -import com.mongodb.DBObject; - -/** - * ImmediateSaveTest - * - * - */ -public class ImmediateSaveTest extends AbstractImmediateSaveTest -{ - - @Before - public void beforeTest() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @After - public void afterTest() throws Exception - { - MongoTestServer.dropCollection(); - } - - - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, max, scavenge, evictionPolicy) - { - public SessionHandler newSessionHandler() - { - SessionHandler h = super.newSessionHandler(); - h.getSessionCache().setSaveOnCreate(true); - return h; - } - }; - } -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmortalSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmortalSessionTest.java deleted file mode 100644 index 7de59c4f951..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ImmortalSessionTest.java +++ /dev/null @@ -1,42 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractImmortalSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; - -/** - * ImmortalSessionTest - * - * - */ -public class ImmortalSessionTest extends AbstractImmortalSessionTest -{ - - /** - * @see org.eclipse.jetty.server.session.AbstractTestBase#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ModifyMaxInactiveIntervalTest.java similarity index 62% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ModifyMaxInactiveIntervalTest.java index bc75de7296a..bbb9e5544ee 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ModifyMaxInactiveIntervalTest.java @@ -16,40 +16,42 @@ // ======================================================================== // + package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractRemoveSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractModifyMaxInactiveIntervalTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Test; -public class RemoveSessionTest extends AbstractRemoveSessionTest -{ +/** + * ModifyMaxInactiveIntervalTest + * + * + */ +public class ModifyMaxInactiveIntervalTest extends AbstractModifyMaxInactiveIntervalTest +{ - @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge, evictionPolicy); - } - - @Test - public void testRemoveSession() throws Exception - { - super.testRemoveSession(); + return MongoTestHelper.newSessionDataStoreFactory(); } } diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestHelper.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestHelper.java new file mode 100644 index 00000000000..c7714d895d5 --- /dev/null +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestHelper.java @@ -0,0 +1,65 @@ +// +// ======================================================================== +// Copyright (c) 1995-2017 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 java.net.UnknownHostException; + +import com.mongodb.DBCollection; +import com.mongodb.Mongo; +import com.mongodb.MongoException; + + +/** + * MongoTestHelper + * + */ +public class MongoTestHelper +{ + static int __workers=0; + public static final String DB_NAME = "HttpSessions"; + public static final String COLLECTION_NAME = "testsessions"; + + + + public static void dropCollection () throws MongoException, UnknownHostException + { + new Mongo().getDB(DB_NAME).getCollection(COLLECTION_NAME).drop(); + } + + + public static void createCollection() throws UnknownHostException, MongoException + { + new Mongo().getDB(DB_NAME).createCollection(COLLECTION_NAME, null); + } + + + public static DBCollection getCollection () throws UnknownHostException, MongoException + { + return new Mongo().getDB(DB_NAME).getCollection(COLLECTION_NAME); + } + + + public static MongoSessionDataStoreFactory newSessionDataStoreFactory() + { + MongoSessionDataStoreFactory storeFactory = new MongoSessionDataStoreFactory(); + storeFactory.setCollectionName(COLLECTION_NAME); + storeFactory.setDbName(DB_NAME); + return storeFactory; + } +} 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 deleted file mode 100644 index f4cc55d88c6..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java +++ /dev/null @@ -1,112 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 java.net.UnknownHostException; - -import org.eclipse.jetty.server.SessionIdManager; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.eclipse.jetty.server.session.DefaultSessionCache; -import org.eclipse.jetty.server.session.SessionHandler; -import org.eclipse.jetty.server.session.TestSessionHandler; - -import com.mongodb.DBCollection; -import com.mongodb.Mongo; -import com.mongodb.MongoException; - - -/** - * @version $Revision$ $Date$ - */ -public class MongoTestServer extends AbstractTestServer -{ - static int __workers=0; - - - - public static void dropCollection () throws MongoException, UnknownHostException - { - new Mongo().getDB("HttpSessions").getCollection("testsessions").drop(); - } - - - public static void createCollection() throws UnknownHostException, MongoException - { - new Mongo().getDB("HttpSessions").createCollection("testsessions", null); - } - - - public static DBCollection getCollection () throws UnknownHostException, MongoException - { - return new Mongo().getDB("HttpSessions").getCollection("testsessions"); - } - - - public MongoTestServer(int port, int maxInactivePeriod, int scavengePeriod, int idlePassivatePeriod) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, idlePassivatePeriod); - } - - - - - public MongoTestServer(int port, int maxInactivePeriod, int scavengePeriod, int idlePassivatePeriod, boolean saveAllAttributes) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, idlePassivatePeriod); - } - - - - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - try - { - MongoSessionDataStore ds = new MongoSessionDataStore(); - ds.setDBCollection(getCollection()); - ds.setGracePeriodSec(_scavengePeriod); - - DefaultSessionCache ss = new DefaultSessionCache(handler); - handler.setSessionCache(ss); - ss.setSessionDataStore(ds); - return handler; - } - catch (Exception e) - { - throw new RuntimeException(e); - } - - - } - - public static void main(String... args) throws Exception - { -/* MongoTestServer server8080 = new MongoTestServer(8080); - server8080.addContext("/").addServlet(SessionDump.class,"/"); - server8080.start(); - - MongoTestServer server8081 = new MongoTestServer(8081); - server8081.addContext("/").addServlet(SessionDump.class,"/"); - server8081.start(); - - server8080.join(); - server8081.join();*/ - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NonClusteredSessionScavengingTest.java similarity index 64% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NonClusteredSessionScavengingTest.java index 07972631523..90259b64963 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NonClusteredSessionScavengingTest.java @@ -18,35 +18,38 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractNewSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractNonClusteredSessionScavengingTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** - * NewSessionTest + * NonClusteredSessionScavengingTest */ -public class NewSessionTest extends AbstractNewSessionTest +public class NonClusteredSessionScavengingTest extends AbstractNonClusteredSessionScavengingTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ + @Override + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } @Test diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java deleted file mode 100644 index 4740367fead..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java +++ /dev/null @@ -1,63 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractReentrantRequestSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ReentrantRequestSessionTest - */ -public class ReentrantRequestSessionTest extends AbstractReentrantRequestSessionTest -{ - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - - - @Test - public void testReentrantRequestSession() throws Exception - { - super.testReentrantRequestSession(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractReentrantRequestSessionTest#createServer(int, int, int, int) - */ - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, max, scavenge, evictionPolicy); - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ScatterGunLoadTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ScatterGunLoadTest.java deleted file mode 100644 index de04b8858f9..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ScatterGunLoadTest.java +++ /dev/null @@ -1,59 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractScatterGunLoadTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * ScatterGunLoadTest - */ -public class ScatterGunLoadTest extends AbstractScatterGunLoadTest -{ - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - - @Test - public void testLightLoad() throws Exception - { - super.testLightLoad(); - } - -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java deleted file mode 100644 index bad2aebcf7a..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java +++ /dev/null @@ -1,57 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractServerCrossContextSessionTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - - -public class ServerCrossContextSessionTest extends AbstractServerCrossContextSessionTest -{ - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - - @Override - public AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, maxInactive, scavengeInterval, evictionPolicy); - } - - - @Test - public void testCrossContextDispatch() throws Exception - { - super.testCrossContextDispatch(); - } -} diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionExpiryTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionExpiryTest.java index 41cdc9500b0..639db9e0e19 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionExpiryTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionExpiryTest.java @@ -35,7 +35,10 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.server.session.AbstractSessionExpiryTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.DefaultSessionCacheFactory; +import org.eclipse.jetty.server.session.SessionCache; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; +import org.eclipse.jetty.server.session.TestServer; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.StringUtil; @@ -57,20 +60,22 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } - + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge, evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } @Test @@ -98,8 +103,13 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest String servletMapping = "/server"; int inactivePeriod = Integer.MAX_VALUE * 60; //integer overflow int scavengePeriod = 10; - int idlePassivatePeriod = 0; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, idlePassivatePeriod); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + + MongoSessionDataStoreFactory storeFactory = MongoTestHelper.newSessionDataStoreFactory(); + storeFactory.setGracePeriodSec(scavengePeriod); + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); ChangeTimeoutServlet servlet = new ChangeTimeoutServlet(); ServletHolder holder = new ServletHolder(servlet); ServletContextHandler context = server1.addContext(contextPath); @@ -125,9 +135,9 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - String sessionId = AbstractTestServer.extractSessionId(sessionCookie); + String sessionId = TestServer.extractSessionId(sessionCookie); - DBCollection sessions = MongoTestServer.getCollection(); + DBCollection sessions = MongoTestHelper.getCollection(); verifySessionCreated(listener,sessionId); //verify that the session timeout is set in mongo verifySessionTimeout(sessions, sessionId, -1); //SessionManager sets -1 if maxInactive < 0 @@ -150,8 +160,11 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest String servletMapping = "/server"; int inactivePeriod = 10; int scavengePeriod = 1; - int idlePassivatePeriod = 0; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, idlePassivatePeriod); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + MongoSessionDataStoreFactory storeFactory = MongoTestHelper.newSessionDataStoreFactory(); + storeFactory.setGracePeriodSec(scavengePeriod); + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); ChangeTimeoutServlet servlet = new ChangeTimeoutServlet(); ServletHolder holder = new ServletHolder(servlet); ServletContextHandler context = server1.addContext(contextPath); @@ -177,9 +190,9 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - String sessionId = AbstractTestServer.extractSessionId(sessionCookie); + String sessionId = TestServer.extractSessionId(sessionCookie); - DBCollection sessions = MongoTestServer.getCollection(); + DBCollection sessions = MongoTestHelper.getCollection(); verifySessionCreated(listener,sessionId); //verify that the session timeout is set in mongo verifySessionTimeout(sessions, sessionId, inactivePeriod); @@ -227,9 +240,13 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest String servletMapping = "/server"; int inactivePeriod = 10; int scavengePeriod = 1; - int inspectPeriod = 1; - int idlePassivatePeriod = 0; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod,idlePassivatePeriod); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + MongoSessionDataStoreFactory storeFactory = MongoTestHelper.newSessionDataStoreFactory(); + storeFactory.setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod,cacheFactory, storeFactory); ImmediateChangeTimeoutServlet servlet = new ImmediateChangeTimeoutServlet(); ServletHolder holder = new ServletHolder(servlet); ServletContextHandler context = server1.addContext(contextPath); @@ -257,9 +274,9 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - String sessionId = AbstractTestServer.extractSessionId(sessionCookie); + String sessionId = TestServer.extractSessionId(sessionCookie); - DBCollection sessions = MongoTestServer.getCollection(); + DBCollection sessions = MongoTestHelper.getCollection(); verifySessionCreated(listener,sessionId); //verify that the session timeout is the new value and not the default verifySessionTimeout(sessions, sessionId, inactivePeriod); diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateAndCreateTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateCreateScavengeTest.java similarity index 70% rename from tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateCreateScavengeTest.java index b838cd8d31f..051ac2d98ac 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateAndCreateTest.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionInvalidateCreateScavengeTest.java @@ -18,35 +18,39 @@ package org.eclipse.jetty.nosql.mongodb; -import org.eclipse.jetty.server.session.AbstractSessionInvalidateAndCreateTest; -import org.eclipse.jetty.server.session.AbstractTestServer; +import org.eclipse.jetty.server.session.AbstractSessionInvalidateCreateScavengeTest; +import org.eclipse.jetty.server.session.SessionDataStoreFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -public class SessionInvalidateAndCreateTest extends AbstractSessionInvalidateAndCreateTest +public class SessionInvalidateCreateScavengeTest extends AbstractSessionInvalidateCreateScavengeTest { @BeforeClass public static void beforeClass() throws Exception { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); + MongoTestHelper.dropCollection(); + MongoTestHelper.createCollection(); } @AfterClass public static void afterClass() throws Exception { - MongoTestServer.dropCollection(); + MongoTestHelper.dropCollection(); } + + /** + * @see org.eclipse.jetty.server.session.AbstractTestBase#createSessionDataStoreFactory() + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStoreFactory createSessionDataStoreFactory() { - return new MongoTestServer(port,max,scavenge,evictionPolicy); + return MongoTestHelper.newSessionDataStoreFactory(); } - + @Test public void testSessionScavenge() throws Exception 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 deleted file mode 100644 index a375ddf5f93..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionRenewTest.java +++ /dev/null @@ -1,85 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.eclipse.jetty.webapp.WebAppContext; - -import static org.junit.Assert.assertNotNull; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; - -public class SessionRenewTest extends AbstractSessionRenewTest -{ - - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - public void testSessionRenewal() throws Exception - { - super.testSessionRenewal(); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionRenewTest#verifyChange(WebAppContext, java.lang.String, java.lang.String) - */ - @Override - public boolean verifyChange(WebAppContext context, String oldSessionId, String newSessionId) - { - try - { - DBCollection sessions = MongoTestServer.getCollection(); - assertNotNull(sessions); - DBObject sessionDocument = sessions.findOne(new BasicDBObject("id", oldSessionId)); - if (sessionDocument != null) - return false; - - sessionDocument = sessions.findOne(new BasicDBObject("id", newSessionId)); - return (sessionDocument != null); - } - catch (Exception e) - { - return false; - } - } -} 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 deleted file mode 100644 index 028a8d911a6..00000000000 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java +++ /dev/null @@ -1,59 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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.AbstractSessionValueSavingTest; -import org.eclipse.jetty.server.session.AbstractTestServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class SessionSavingValueTest extends AbstractSessionValueSavingTest -{ - - - @BeforeClass - public static void beforeClass() throws Exception - { - MongoTestServer.dropCollection(); - MongoTestServer.createCollection(); - } - - @AfterClass - public static void afterClass() throws Exception - { - MongoTestServer.dropCollection(); - } - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new MongoTestServer(port, max, scavenge, evictionPolicy); - } - - @Test - public void testSessionValueSaving() throws Exception - { - super.testSessionValueSaving(); - } - - - - -} 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/AbstractClusteredInvalidationSessionTest.java similarity index 89% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractInvalidationSessionTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClusteredInvalidationSessionTest.java index 3c1348b1451..4f69df0aaa6 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/AbstractClusteredInvalidationSessionTest.java @@ -37,7 +37,7 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.junit.Test; /** - * AbstractInvalidationSessionTest + * AbstractClusteredInvalidationSessionTest * * Goal of the test is to be sure that invalidating a session on one node * result in the session being unavailable in the other node also. This @@ -45,7 +45,7 @@ import org.junit.Test; * you must use session eviction, to try to ensure that as the session * bounces around it gets a fresh load of data from the SessionDataStore. */ -public abstract class AbstractInvalidationSessionTest extends AbstractTestBase +public abstract class AbstractClusteredInvalidationSessionTest extends AbstractTestBase { @@ -56,7 +56,12 @@ public abstract class AbstractInvalidationSessionTest extends AbstractTestBase String servletMapping = "/server"; int maxInactiveInterval = 30; int scavengeInterval = 1; - AbstractTestServer server1 = createServer(0, maxInactiveInterval, scavengeInterval, SessionCache.EVICT_ON_SESSION_EXIT); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.EVICT_ON_SESSION_EXIT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengeInterval); + + TestServer server1 = new TestServer(0, maxInactiveInterval, scavengeInterval, cacheFactory, storeFactory); server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping); @@ -64,7 +69,7 @@ public abstract class AbstractInvalidationSessionTest extends AbstractTestBase { server1.start(); int port1 = server1.getPort(); - AbstractTestServer server2 = createServer(0, maxInactiveInterval, scavengeInterval, SessionCache.EVICT_ON_SESSION_EXIT); + TestServer server2 = new TestServer(0, maxInactiveInterval, scavengeInterval, cacheFactory, storeFactory); server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try 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/AbstractClusteredLastAccessTimeTest.java similarity index 91% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClusteredLastAccessTimeTest.java index 62a385fc55b..19c69697565 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/AbstractClusteredLastAccessTimeTest.java @@ -44,14 +44,14 @@ import org.junit.Test; /** - * AbstractLastAccessTimeTest + * AbstractClusteredLastAccessTimeTest * * 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 extends AbstractTestBase +public abstract class AbstractClusteredLastAccessTimeTest extends AbstractTestBase { @Test @@ -61,7 +61,13 @@ public abstract class AbstractLastAccessTimeTest extends AbstractTestBase String servletMapping = "/server"; int maxInactivePeriod = 8; //session will timeout after 8 seconds int scavengePeriod = 2; //scavenging occurs every 2 seconds - AbstractTestServer server1 = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, maxInactivePeriod, scavengePeriod, cacheFactory, storeFactory); TestServlet servlet1 = new TestServlet(); ServletHolder holder1 = new ServletHolder(servlet1); ServletContextHandler context = server1.addContext(contextPath); @@ -75,7 +81,8 @@ public abstract class AbstractLastAccessTimeTest extends AbstractTestBase { server1.start(); int port1=server1.getPort(); - AbstractTestServer server2 = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + TestServer server2 = new TestServer(0, maxInactivePeriod, scavengePeriod, cacheFactory, storeFactory); ServletContextHandler context2 = server2.addContext(contextPath); context2.addServlet(TestServlet.class, servletMapping); SessionHandler m2 = context2.getSessionHandler(); @@ -128,7 +135,7 @@ public abstract class AbstractLastAccessTimeTest extends AbstractTestBase Thread.sleep(maxInactivePeriod+(scavengePeriod * 2500L)); //check that the session was not scavenged over on server1 by ensuring that the SessionListener destroy method wasn't called - assertFalse(listener1._destroys.contains(AbstractTestServer.extractSessionId(sessionCookie))); + assertFalse(listener1._destroys.contains(TestServer.extractSessionId(sessionCookie))); assertAfterScavenge(m1); } 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/AbstractClusteredOrphanedSessionTest.java similarity index 83% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClusteredOrphanedSessionTest.java index 2c3e94ca6f3..6259ed68235 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/AbstractClusteredOrphanedSessionTest.java @@ -36,14 +36,16 @@ import org.eclipse.jetty.client.api.Request; import org.junit.Test; /** - * AbstractOrphanedSessionTest + * AbstractClusteredOrphanedSessionTest + * + * Mimic node1 creating a session then crashing. Check that node2 will + * eventually scavenge the orphaned session, even if the session was + * never used on node2. */ -public abstract class AbstractOrphanedSessionTest extends AbstractTestBase +public abstract class AbstractClusteredOrphanedSessionTest extends AbstractTestBase { /** - * If nodeA creates a session, and just afterwards crashes, it is the only node that knows about the session. - * We want to test that the session data is gone after scavenging. * @throws Exception on test failure */ @Test @@ -53,14 +55,22 @@ public abstract class AbstractOrphanedSessionTest extends AbstractTestBase String contextPath = ""; String servletMapping = "/server"; int inactivePeriod = 5; - AbstractTestServer server1 = createServer(0, inactivePeriod, -1, SessionCache.NEVER_EVICT); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + + TestServer server1 = new TestServer(0, inactivePeriod, -1, cacheFactory, storeFactory); server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try { server1.start(); int port1 = server1.getPort(); int scavengePeriod = 2; - AbstractTestServer server2 = createServer(0, inactivePeriod, scavengePeriod, 2); + + DefaultSessionCacheFactory evictCacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(2);//evict after idle for 2 sec + + TestServer server2 = new TestServer(0, inactivePeriod, scavengePeriod, evictCacheFactory, storeFactory); server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try { 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/AbstractClusteredSessionMigrationTest.java similarity index 85% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionMigrationTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClusteredSessionMigrationTest.java index 6833f9f0e5f..3277cad7928 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/AbstractClusteredSessionMigrationTest.java @@ -36,11 +36,11 @@ import org.eclipse.jetty.client.api.Request; import org.junit.Test; /** - * AbstractSessionMigrationTest + * AbstractClusteredSessionMigrationTest * * Check that a session that is active on node 1 can be accessed on node2. */ -public abstract class AbstractSessionMigrationTest extends AbstractTestBase +public abstract class AbstractClusteredSessionMigrationTest extends AbstractTestBase { @@ -49,15 +49,23 @@ public abstract class AbstractSessionMigrationTest extends AbstractTestBase { String contextPath = ""; String servletMapping = "/server"; - AbstractTestServer server1 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server1 = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC, + cacheFactory, storeFactory); server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try { server1.start(); int port1=server1.getPort(); - - AbstractTestServer server2 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + + TestServer server2 = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC, + cacheFactory, storeFactory); server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try 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/AbstractClusteredSessionScavengingTest.java similarity index 88% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClusteredSessionScavengingTest.java index 9034725e83e..4dd9903ea5f 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/AbstractClusteredSessionScavengingTest.java @@ -34,15 +34,14 @@ import javax.servlet.http.HttpSessionListener; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; -import org.eclipse.jetty.server.Request; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.util.statistic.CounterStatistic; import org.junit.Test; /** - * AbstractLocalSessionScavengingTest + * AbstractClusteredSessionScavengingTest */ -public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBase +public abstract class AbstractClusteredSessionScavengingTest extends AbstractTestBase { public void pause(int scavengePeriod) @@ -87,13 +86,20 @@ public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBas String servletMapping = "/server"; int inactivePeriod = 3; int scavengePeriod = 0; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context1 = server1.addContext(contextPath); context1.addServlet(TestServlet.class, servletMapping); SessionListener listener = new SessionListener(); context1.getSessionHandler().addEventListener(listener); - - + + try { server1.start(); @@ -142,7 +148,7 @@ public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBas server1.stop(); } } - + @Test public void testLocalSessionsScavenging() throws Exception @@ -151,7 +157,14 @@ public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBas String servletMapping = "/server"; int inactivePeriod = 4; int scavengePeriod = 1; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context1 = server1.addContext(contextPath); context1.addServlet(TestServlet.class, servletMapping); @@ -159,7 +172,7 @@ public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBas { server1.start(); int port1 = server1.getPort(); - AbstractTestServer server2 = createServer(0, inactivePeriod, scavengePeriod * 2, SessionCache.NEVER_EVICT); + TestServer server2 = new TestServer(0, inactivePeriod, scavengePeriod * 2, cacheFactory, storeFactory); ServletContextHandler context2 = server2.addContext(contextPath); context2.addServlet(TestServlet.class, servletMapping); diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractCreateAndInvalidateTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractCreateAndInvalidateTest.java deleted file mode 100644 index 2a72dcb5ab7..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractCreateAndInvalidateTest.java +++ /dev/null @@ -1,297 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 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.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -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.server.session.SessionCache; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.StacklessLogging; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; - - - -/** - * AbstractCreateAndInvalidateTest - * - * Test that creating a session and invalidating it before the request exits the session - * does not result in the session being persisted - */ -public abstract class AbstractCreateAndInvalidateTest extends AbstractTestBase -{ - - protected TestServlet _servlet; - protected AbstractTestServer _server1 = null; - protected CountDownLatch _synchronizer; - - @Before - public void setUp () - { - _synchronizer = new CountDownLatch(1); - _servlet = new TestServlet(_synchronizer); - } - - - /** - * @param sessionId - * @param isPersisted - */ - public abstract void checkSession (String sessionId, boolean isPersisted) throws Exception; - - /** - * @param sessionid - * @param contextId - * @param isPersisted - * @throws Exception - */ - public abstract void checkSessionByKey (String sessionid, String contextId, boolean isPersisted) throws Exception; - - - /** - * Create and then invalidate a session in the same request. - * @throws Exception - */ - @Test - public void testSessionCreateAndInvalidate() throws Exception - { - String contextPath = ""; - String servletMapping = "/server"; - int inactivePeriod = 20; - int scavengePeriod = 3; - - - - _server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); - ServletHolder holder = new ServletHolder(_servlet); - ServletContextHandler contextHandler = _server1.addContext(contextPath); - contextHandler.addServlet(holder, servletMapping); - _server1.start(); - int port1 = _server1.getPort(); - - try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) - { - HttpClient client = new HttpClient(); - client.start(); - String url = "http://localhost:" + port1 + contextPath + servletMapping; - - //make a request to set up a session on the server - ContentResponse response = client.GET(url); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //check that the session does not exist - checkSession(_servlet._id, false); - - - } - finally - { - _server1.stop(); - } - } - - /** - * Create a session in a context, forward to another context and create a - * session in it too. Check that both sessions exist after the response - * completes. - * @throws Exception - */ - @Test - public void testSessionCreateForward () throws Exception - { - String contextPath = ""; - String contextB = "/contextB"; - String servletMapping = "/server"; - int inactivePeriod = 20; - int scavengePeriod = 3; - - - - _server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); - ServletHolder holder = new ServletHolder(_servlet); - ServletContextHandler contextHandler = _server1.addContext(contextPath); - contextHandler.addServlet(holder, servletMapping); - ServletContextHandler ctxB = _server1.addContext(contextB); - ctxB.addServlet(TestServletB.class, servletMapping); - _server1.start(); - int port1 = _server1.getPort(); - - try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) - { - HttpClient client = new HttpClient(); - client.start(); - String url = "http://localhost:" + port1 + contextPath + servletMapping; - - //make a request to set up a session on the server - ContentResponse response = client.GET(url+"?action=forward"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //ensure work has finished on the server side - _synchronizer.await(); - - //check that the sessions exist persisted - checkSession(_servlet._id, true); - checkSessionByKey (_servlet._id, "0_0_0_0:", true); - checkSessionByKey (_servlet._id, "0_0_0_0:_contextB", true); - } - finally - { - _server1.stop(); - } - } - - /** - * - * Create a session in one context, forward to another context and create another session - * in it, then invalidate the session in the original context: that should invalidate the - * session in both contexts and no session should exist after the response completes. - * @throws Exception - */ - @Test - public void testSessionCreateForwardAndInvalidate () throws Exception - { - String contextPath = ""; - String contextB = "/contextB"; - String servletMapping = "/server"; - int inactivePeriod = 20; - int scavengePeriod = 3; - - - - _server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); - ServletHolder holder = new ServletHolder(_servlet); - ServletContextHandler contextHandler = _server1.addContext(contextPath); - contextHandler.addServlet(holder, servletMapping); - ServletContextHandler ctxB = _server1.addContext(contextB); - ctxB.addServlet(TestServletB.class, servletMapping); - _server1.start(); - int port1 = _server1.getPort(); - - try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) - { - HttpClient client = new HttpClient(); - client.start(); - String url = "http://localhost:" + port1 + contextPath + servletMapping; - - //make a request to set up a session on the server - ContentResponse response = client.GET(url+"?action=forwardinv"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //wait for the request to have finished before checking session - _synchronizer.await(10, TimeUnit.SECONDS); - - //check that the session does not exist - checkSession(_servlet._id, false); - } - finally - { - _server1.stop(); - } - } - - - - - public static class TestServlet extends HttpServlet - { - public String _id = null; - public CountDownLatch _synchronizer; - - public TestServlet (CountDownLatch latch) - { - _synchronizer = latch; - } - - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException - { - String action = request.getParameter("action"); - - if (action != null && action.startsWith("forward")) - { - HttpSession session = request.getSession(true); - _id = session.getId(); - session.setAttribute("value", new Integer(1)); - - ServletContext contextB = getServletContext().getContext("/contextB"); - RequestDispatcher dispatcherB = contextB.getRequestDispatcher(request.getServletPath()); - dispatcherB.forward(request, httpServletResponse); - - if (action.endsWith("inv")) - session.invalidate(); - - _synchronizer.countDown(); - - return; - } - - HttpSession session = request.getSession(true); - _id = session.getId(); - session.setAttribute("value", new Integer(1)); - session.invalidate(); - assertNull(request.getSession(false)); - assertNotNull(session); - - } - } - - public static class TestServletB extends HttpServlet - { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException - { - HttpSession session = request.getSession(false); - assertNull(session); - if (session == null) session = request.getSession(true); - - // Be sure nothing from contextA is present - Object objectA = session.getAttribute("value"); - assertTrue(objectA == null); - - // Add something, so in contextA we can check if it is visible (it must not). - session.setAttribute("B", "B"); - } - } -} diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmediateSaveTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmediateSaveTest.java deleted file mode 100644 index 6861680f779..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmediateSaveTest.java +++ /dev/null @@ -1,194 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.IOException; - -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 org.eclipse.jetty.servlet.ServletHolder; -import org.junit.Test; - - -/** - * AbstractImmediateSaveTest - * - * - */ -public abstract class AbstractImmediateSaveTest extends AbstractTestBase -{ - protected ServletContextHandler _context; - - - public void checkSessionSaved (String id) throws Exception - { - assertTrue(_context.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); - } - - - public void pause(int scavenge) - { - try - { - Thread.sleep(scavenge * 1000L); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - @Test - public void testSaveNewSession() throws Exception - { - String servletMapping = "/server"; - int scavengePeriod = 3; - int maxInactivePeriod = -1; - AbstractTestServer server = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); - _context = server.addContext("/"); - ServletHolder h = new ServletHolder(); - h.setServlet(new TestServlet()); - _context.addServlet(h, servletMapping); - String contextPath = ""; - - try - { - server.start(); - int port=server.getPort(); - HttpClient client = new HttpClient(); - client.start(); - try - { - ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - - - @Test - public void testSaveNewSessionWithEviction() throws Exception - { - String servletMapping = "/server"; - int scavengePeriod = 3; - int maxInactivePeriod = 1; - AbstractTestServer server = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.EVICT_ON_SESSION_EXIT); - _context = server.addContext("/"); - ServletHolder h = new ServletHolder(); - h.setServlet(new TestServlet()); - _context.addServlet(h, servletMapping); - String contextPath = ""; - - try - { - server.start(); - int port=server.getPort(); - HttpClient client = new HttpClient(); - client.start(); - try - { - //make request to make a save-on-create session - ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //session should now be evicted from the cache - assertFalse(_context.getSessionHandler().getSessionCache().contains(AbstractTestServer.extractSessionId(sessionCookie))); - - //make another request for the same session - Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=test"); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - //session should now be evicted from the cache again - assertFalse(_context.getSessionHandler().getSessionCache().contains(AbstractTestServer.extractSessionId(sessionCookie))); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - - } - - public class TestServlet extends HttpServlet - { - String id; - - @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); - assertNotNull(session); - try - { - checkSessionSaved(session.getId()); - } - catch (Exception e) - { - fail(e.getMessage()); - } - } - else if ("test".equals(action)) - { - HttpSession session = request.getSession(false); - assertNotNull(session); - } - } - } -} diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractModifyMaxInactiveIntervalTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractModifyMaxInactiveIntervalTest.java new file mode 100644 index 00000000000..f09a507901f --- /dev/null +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractModifyMaxInactiveIntervalTest.java @@ -0,0 +1,540 @@ +// +// ======================================================================== +// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; + +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 org.junit.After; +import org.junit.Test; + + +/** + * AbstractModifyMaxInactiveIntervalTest + * + * + * + */ +public abstract class AbstractModifyMaxInactiveIntervalTest extends AbstractTestBase +{ + + + public static int newMaxInactive = 20; + public static int __scavenge = 1; + + + @Test + public void testReduceMaxInactiveInterval() throws Exception + { + int oldMaxInactive = 3; + int newMaxInactive = 1; + int sleep = (int)(oldMaxInactive * 0.8); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to reduce the maxinactive interval + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + + @Test + public void testIncreaseMaxInactiveInterval() throws Exception + { + + int oldMaxInactive = 3; + int newMaxInactive = 5; + int sleep = (int)(oldMaxInactive * 0.8); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to increase the maxinactive interval, first waiting until the old expiration should have passed + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + + @Test + public void testSetMaxInactiveIntervalWithImmortalSessionAndEviction() throws Exception + { + int oldMaxInactive = -1; + int newMaxInactive = 120; //2min + int evict = 2; + int sleep = evict; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(evict); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to reduce the maxinactive interval + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + + @Test + public void testSetMaxInactiveIntervalWithNonImmortalSessionAndEviction() throws Exception + { + int oldMaxInactive = 10; + int newMaxInactive = 2; + int evict = 4; + int sleep = evict; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(evict); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to reduce the maxinactive interval + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+sleep); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + @Test + public void testChangeMaxInactiveIntervalForImmortalSessionNoEviction() throws Exception + { + int oldMaxInactive = -1; + int newMaxInactive = 120; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to change the maxinactive interval + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive+"&wait="+2); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + @Test + public void testNoExpireSessionInUse() throws Exception + { + int maxInactive = 3; + int sleep = maxInactive + (int)(maxInactive * 0.8); + + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, maxInactive, 1, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request that will sleep long enough for the session expiry time to have passed + //before trying to access the session and ensure it is still there + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=sleep&val="+sleep); + request.header("Cookie", sessionCookie); + response = request.send(); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + @Test + public void testSessionExpiryAfterModifiedMaxInactiveInterval() throws Exception + { + int oldMaxInactive = 4; + int newMaxInactive = 20; + int sleep = oldMaxInactive+(int)(oldMaxInactive * 0.8); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server = new TestServer(0, oldMaxInactive, __scavenge, cacheFactory, storeFactory); + ServletContextHandler ctxA = server.addContext("/mod"); + ctxA.addServlet(TestModServlet.class, "/test"); + + server.start(); + int port=server.getPort(); + try + { + HttpClient client = new HttpClient(); + client.start(); + try + { + // Perform a request to create a session + + ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create"); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //do another request to change the maxinactive interval + Request request = client.newRequest("http://localhost:" + port + "/mod/test?action=change&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //wait for longer than the old inactive interval + Thread.currentThread().sleep(sleep*1000L); + + //do another request using the cookie to ensure the session is still there + request= client.newRequest("http://localhost:" + port + "/mod/test?action=test&val="+newMaxInactive); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + + } + finally + { + client.stop(); + } + } + finally + { + server.stop(); + } + } + + + public static class TestModServlet 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); + return; + } + + if ("change".equals(action)) + { + //change the expiry time for the session, maybe sleeping before the change + String tmp = request.getParameter("val"); + int interval = -1; + interval = (tmp==null?-1:Integer.parseInt(tmp)); + + tmp = request.getParameter("wait"); + int wait = (tmp==null?0:Integer.parseInt(tmp)); + if (wait >0) + { + try { Thread.currentThread().sleep(wait*1000);}catch (Exception e) {throw new ServletException(e);} + } + HttpSession session = request.getSession(false); + if (session == null) + throw new ServletException("Session is null for action=change"); + + if (interval > 0) + session.setMaxInactiveInterval(interval); + + session = request.getSession(false); + if (session == null) + throw new ServletException ("Null session after maxInactiveInterval change"); + return; + } + + if ("sleep".equals(action)) + { + //sleep before trying to access the session + + HttpSession session = request.getSession(false); + if (session == null) + throw new ServletException("Session is null for action=sleep"); + + String tmp = request.getParameter("val"); + int interval = 0; + interval = (tmp==null?0:Integer.parseInt(tmp)); + + if (interval > 0) + { + try{Thread.currentThread().sleep(interval*1000);}catch (Exception e) {throw new ServletException(e);} + } + + session = request.getSession(false); + if (session == null) + throw new ServletException("Session null after sleep"); + + return; + } + + if ("test".equals(action)) + { + HttpSession session = request.getSession(false); + if (session == null) + throw new ServletException("Session does not exist"); + String tmp = request.getParameter("val"); + int interval = 0; + interval = (tmp==null?0:Integer.parseInt(tmp)); + + assertEquals(interval, session.getMaxInactiveInterval()); + return; + } + } + } + +} 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/AbstractNonClusteredSessionScavengingTest.java similarity index 87% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNonClusteredSessionScavengingTest.java index cf0dbf6faef..74fc056aed1 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/AbstractNonClusteredSessionScavengingTest.java @@ -19,10 +19,11 @@ package org.eclipse.jetty.server.session; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import javax.servlet.ServletException; @@ -38,12 +39,12 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.junit.Test; /** - * AbstractNewSessionTest + * AbstractNonClusteredSessionScavengingTest * * Create a session, wait for it to be scavenged, re-present the cookie and check that a * new session is created. */ -public abstract class AbstractNewSessionTest extends AbstractTestBase +public abstract class AbstractNonClusteredSessionScavengingTest extends AbstractTestBase { public void pause(int scavenge) @@ -64,7 +65,14 @@ public abstract class AbstractNewSessionTest extends AbstractTestBase String servletMapping = "/server"; int scavengePeriod = 3; int maxInactivePeriod = 1; - AbstractTestServer server = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server = new TestServer(0, maxInactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context = server.addContext("/"); context.addServlet(TestServlet.class, servletMapping); String contextPath = ""; diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractProxySerializationTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractProxySerializationTest.java index b838c7e9e2d..de2541cd9d4 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractProxySerializationTest.java +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractProxySerializationTest.java @@ -42,7 +42,7 @@ import org.junit.Test; /** * AbstractProxySerializationTest * - * + * For SessionDataStores that passivate with serialization. */ public abstract class AbstractProxySerializationTest extends AbstractTestBase { @@ -71,7 +71,14 @@ public abstract class AbstractProxySerializationTest extends AbstractTestBase String contextPath = ""; String servletMapping = "/server"; int scavengePeriod = 10; - AbstractTestServer server = createServer(0, 20, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server = new TestServer(0, 20, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); InputStream is = this.getClass().getClassLoader().getResourceAsStream("proxy-serialization.jar"); diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractScatterGunLoadTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractScatterGunLoadTest.java deleted file mode 100644 index 376386d7c60..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractScatterGunLoadTest.java +++ /dev/null @@ -1,241 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 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.TimeUnit; - -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.junit.Test; - - -/** - * AbstractScatterGunLoadTest - * - * This is an unrealistic test. It takes a scatter-gun approach to smearing a - * single session across 2 different nodes at once. - * - * In the real world, we must have a load balancer that uses sticky sessions - * to keep the session pinned to a particular node. - */ -public abstract class AbstractScatterGunLoadTest extends AbstractTestBase -{ - protected boolean _stress = Boolean.getBoolean( "STRESS" ); - - - @Test - public void testLightLoad() - throws Exception - { - if ( _stress ) - { - String contextPath = ""; - String servletMapping = "/server"; - AbstractTestServer server1 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); - server1.addContext( contextPath ).addServlet( TestServlet.class, servletMapping ); - - try - { - server1.start(); - int port1 = server1.getPort(); - AbstractTestServer server2 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); - server2.addContext( contextPath ).addServlet( TestServlet.class, servletMapping ); - - try - { - server2.start(); - int port2=server2.getPort(); - HttpClient client = new HttpClient(); - client.start(); - try - { - String[] urls = new String[2]; - urls[0] = "http://localhost:" + port1 + contextPath + servletMapping; - urls[1] = "http://localhost:" + port2 + contextPath + servletMapping; - - //create session via first server - ContentResponse response1 = client.GET(urls[0] + "?action=init"); - assertEquals(HttpServletResponse.SC_OK,response1.getStatus()); - String sessionCookie = response1.getHeaders().get( "Set-Cookie" ); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //simulate 50 clients making 100 requests each - ExecutorService executor = Executors.newCachedThreadPool(); - int clientsCount = 50; - CyclicBarrier barrier = new CyclicBarrier( clientsCount + 1 ); - int requestsCount = 100; - Worker[] workers = new Worker[clientsCount]; - for ( int i = 0; i < clientsCount; ++i ) - { - workers[i] = new Worker( barrier, requestsCount, sessionCookie, urls ); - workers[i].start(); - executor.execute( workers[i] ); - } - // Wait for all workers to be ready - barrier.await(); - long start = System.nanoTime(); - - // Wait for all workers to be done - barrier.await(); - long end = System.nanoTime(); - long elapsed = TimeUnit.NANOSECONDS.toMillis( end - start ); - System.out.println( "elapsed ms: " + elapsed ); - - for ( Worker worker : workers ) - worker.stop(); - executor.shutdownNow(); - - // Perform one request to get the result - Request request = client.newRequest( urls[0] + "?action=result" ); - request.header("Cookie", sessionCookie); - ContentResponse response2 = request.send(); - assertEquals(HttpServletResponse.SC_OK,response2.getStatus()); - String response = response2.getContentAsString(); - System.out.println( "get = " + response ); - assertEquals(response.trim(), String.valueOf( clientsCount * requestsCount ) ); - } - finally - { - client.stop(); - } - } - finally - { - server2.stop(); - } - } - finally - { - server1.stop(); - } - } - } - - public static class Worker - implements Runnable - { - private final HttpClient client; - - private final CyclicBarrier barrier; - - private final int requestsCount; - - private final String sessionCookie; - - private final String[] urls; - - - public Worker( CyclicBarrier barrier, int requestsCount, String sessionCookie, String[] urls ) - { - this.client = new HttpClient(); - this.barrier = barrier; - this.requestsCount = requestsCount; - this.sessionCookie = sessionCookie; - this.urls = urls; - } - - public void start() - throws Exception - { - client.start(); - } - - public void stop() - throws Exception - { - client.stop(); - } - - public void run() - { - try - { - // Wait for all workers to be ready - barrier.await(); - - Random random = new Random( System.nanoTime() ); - - for ( int i = 0; i < requestsCount; ++i ) - { - int urlIndex = random.nextInt( urls.length ); - Request request = client.newRequest(urls[urlIndex] + "?action=increment"); - request.header("Cookie", sessionCookie); - ContentResponse response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - } - - // Wait for all workers to be done - barrier.await(); - } - catch ( Exception x ) - { - throw new RuntimeException( x ); - } - } - } - - public static class TestServlet - extends HttpServlet - { - @Override - protected void doGet( HttpServletRequest request, HttpServletResponse response ) - throws ServletException, IOException - { - String action = request.getParameter( "action" ); - if ( "init".equals( action ) ) - { - HttpSession session = request.getSession( true ); - session.setAttribute( "value", 0 ); - } - else if ( "increment".equals( action ) ) - { - // Without synchronization - HttpSession session = request.getSession( false ); - int value = (Integer) session.getAttribute( "value" ); - session.setAttribute( "value", value + 1 ); - } - else if ( "result".equals( action ) ) - { - HttpSession session = request.getSession( false ); - int value = (Integer) session.getAttribute( "value" ); - PrintWriter writer = response.getWriter(); - writer.println( value ); - writer.flush(); - } - } - } -} 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 deleted file mode 100644 index 885453ed56a..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractServerCrossContextSessionTest.java +++ /dev/null @@ -1,117 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -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.servlet.ServletContextHandler; -import org.junit.Test; - -/** - * AbstractServerCrossContextSessionTest - */ -public abstract class AbstractServerCrossContextSessionTest extends AbstractTestBase -{ - - @Test - public void testCrossContextDispatch() throws Exception - { - String contextA = "/contextA"; - String contextB = "/contextB"; - String servletMapping = "/server"; - AbstractTestServer server = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); - ServletContextHandler ctxA = server.addContext(contextA); - ctxA.addServlet(TestServletA.class, servletMapping); - ServletContextHandler ctxB = server.addContext(contextB); - ctxB.addServlet(TestServletB.class, servletMapping); - try - { - server.start(); - int port=server.getPort(); - - HttpClient client = new HttpClient(); - client.start(); - try - { - // Perform a request, on server side a cross context dispatch will be done - ContentResponse response = client.GET("http://localhost:" + port + contextA + servletMapping); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - public static class TestServletA extends HttpServlet - { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException - { - HttpSession session = request.getSession(false); - if (session == null) session = request.getSession(true); - // Add something to the session - session.setAttribute("A", "A"); - // Perform cross context dispatch to another context - // Over there we will check that the session attribute added above is not visible - ServletContext contextB = getServletContext().getContext("/contextB"); - RequestDispatcher dispatcherB = contextB.getRequestDispatcher(request.getServletPath()); - dispatcherB.forward(request, response); - - // Check that we don't see things put in session by contextB - Object objectB = session.getAttribute("B"); - assertTrue(objectB == null); - } - } - - public static class TestServletB extends HttpServlet - { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException - { - HttpSession session = request.getSession(false); - if (session == null) session = request.getSession(true); - - // Be sure nothing from contextA is present - Object objectA = session.getAttribute("A"); - assertTrue(objectA == null); - - // Add something, so in contextA we can check if it is visible (it must not). - session.setAttribute("B", "B"); - } - } -} 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 deleted file mode 100644 index 0013fccf77a..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionCookieTest.java +++ /dev/null @@ -1,148 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -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 org.junit.Ignore; -import org.junit.Test; - -import junit.framework.Assert; - -/** - * AbstractSessionCookieTest - */ -public abstract class AbstractSessionCookieTest extends AbstractTestBase -{ - - public void pause(int scavenge) - { - try - { - Thread.sleep(scavenge * 2500L); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - @Test - @Ignore("failing because an http cookie with null value is coming over as \"null\"") - public void testSessionCookie() throws Exception - { - String contextPath = ""; - String servletMapping = "/server"; - int scavengePeriod = 3; - AbstractTestServer server = createServer(0, 1, scavengePeriod,SessionCache.NEVER_EVICT); - ServletContextHandler context = server.addContext(contextPath); - context.addServlet(TestServlet.class, servletMapping); - - try - { - server.start(); - int port=server.getPort(); - - HttpClient client = new HttpClient(); - client.start(); - try - { - - ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - String sessionCookie = response.getHeaders().get("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); - Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=check-cookie"); - request.header("Cookie", sessionCookie); - response = request.send(); - - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=null-cookie"); - request.header("Cookie", sessionCookie); - response = request.send(); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - } - finally - { - client.stop(); - } - } - finally - { - server.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 ("check-cookie".equals(action)) - { - HttpSession session = request.getSession(false); - - assertTrue(session != null); - - //request.getSession(true); - } - else if ("null-cookie".equals(action)) - { - HttpSession session = request.getSession(false); - - assertEquals(1, request.getCookies().length); - - Assert.assertFalse("null".equals(request.getCookies()[0].getValue())); - - assertTrue(session == null); - - } - else - { - assertTrue(false); - } - } - } -} diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionExpiryTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionExpiryTest.java index 9ea0db40ec3..2e34fe1a455 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionExpiryTest.java +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionExpiryTest.java @@ -38,7 +38,6 @@ import javax.servlet.http.HttpSessionListener; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.server.session.Session.SessionInactivityTimeout; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.StringUtil; @@ -47,7 +46,8 @@ import org.junit.Test; /** * AbstractSessionExpiryTest * - * + * Ensure session is not removed when server stops, and that a + * non-expired session can be loaded in after restart. */ public abstract class AbstractSessionExpiryTest extends AbstractTestBase { @@ -68,18 +68,97 @@ public abstract class AbstractSessionExpiryTest extends AbstractTestBase { public List createdSessions = new ArrayList(); public List destroyedSessions = new ArrayList(); + public boolean accessAttribute = false; + public Exception ex = null; + + public TestHttpSessionListener(boolean access) + { + accessAttribute = access; + } + + public TestHttpSessionListener() + { + accessAttribute = false; + } public void sessionDestroyed(HttpSessionEvent se) { destroyedSessions.add(se.getSession().getId()); + if (accessAttribute) + { + try + { + + se.getSession().getAttribute("anything"); + } + catch (Exception e) + { + ex = e; + } + } } - + public void sessionCreated(HttpSessionEvent se) { createdSessions.add(se.getSession().getId()); } }; + @Test + public void testSessionExpiresWithListener() throws Exception + { + String contextPath = ""; + String servletMapping = "/server"; + int inactivePeriod = 3; + int scavengePeriod = 1; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); + TestServlet servlet = new TestServlet(); + ServletHolder holder = new ServletHolder(servlet); + ServletContextHandler context = server1.addContext(contextPath); + context.addServlet(holder, servletMapping); + TestHttpSessionListener listener = new TestHttpSessionListener(true); + + context.getSessionHandler().addEventListener(listener); + + server1.start(); + int port1 = server1.getPort(); + + try + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping; + + //make a request to set up a session on the server + ContentResponse response1 = client.GET(url + "?action=init"); + assertEquals(HttpServletResponse.SC_OK,response1.getStatus()); + String sessionCookie = response1.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + String sessionId = TestServer.extractSessionId(sessionCookie); + + verifySessionCreated(listener,sessionId); + + //and wait until the session should have expired + pause(inactivePeriod+(scavengePeriod*2)); + + verifySessionDestroyed (listener, sessionId); + assertNull(listener.ex); + } + finally + { + server1.stop(); + } + } /** * Check session is preserved over stop/start @@ -92,7 +171,14 @@ public abstract class AbstractSessionExpiryTest extends AbstractTestBase String servletMapping = "/server"; int inactivePeriod = 20; int scavengePeriod = 10; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); TestServlet servlet = new TestServlet(); ServletHolder holder = new ServletHolder(servlet); server1.addContext(contextPath).addServlet(holder, servletMapping); @@ -152,7 +238,14 @@ public abstract class AbstractSessionExpiryTest extends AbstractTestBase String servletMapping = "/server"; int inactivePeriod = 4; int scavengePeriod = 1; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); TestServlet servlet = new TestServlet(); ServletHolder holder = new ServletHolder(servlet); ServletContextHandler context = server1.addContext(contextPath); @@ -178,7 +271,7 @@ public abstract class AbstractSessionExpiryTest extends AbstractTestBase // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - String sessionId = AbstractTestServer.extractSessionId(sessionCookie); + String sessionId = TestServer.extractSessionId(sessionCookie); verifySessionCreated(listener,sessionId); @@ -221,7 +314,14 @@ public abstract class AbstractSessionExpiryTest extends AbstractTestBase String servletMapping = "/server"; int inactivePeriod = 5; int scavengePeriod = 1; - AbstractTestServer server1 = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server1 = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ChangeTimeoutServlet servlet = new ChangeTimeoutServlet(); ServletHolder holder = new ServletHolder(servlet); ServletContextHandler context = server1.addContext(contextPath); 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/AbstractSessionInvalidateCreateScavengeTest.java similarity index 92% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateAndCreateTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionInvalidateCreateScavengeTest.java index 9a089883ca1..b700ec64fd3 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/AbstractSessionInvalidateCreateScavengeTest.java @@ -46,14 +46,14 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.junit.Test; /** - * AbstractSessionInvalidateAndCreateTest + * AbstractSessionInvalidateCreateScavengeTest * * This test verifies that invalidating an existing session and creating * a new session within the scope of a single request will expire the * newly created session correctly (removed from the server and session listeners called). * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=377610 */ -public abstract class AbstractSessionInvalidateAndCreateTest extends AbstractTestBase +public abstract class AbstractSessionInvalidateCreateScavengeTest extends AbstractTestBase { public class MySessionListener implements HttpSessionListener { @@ -91,7 +91,14 @@ public abstract class AbstractSessionInvalidateAndCreateTest extends AbstractTes String servletMapping = "/server"; int inactivePeriod = 6; int scavengePeriod = 3; - AbstractTestServer server = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); TestServlet servlet = new TestServlet(); ServletHolder holder = new ServletHolder(servlet); 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 deleted file mode 100644 index b7b577e916c..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionValueSavingTest.java +++ /dev/null @@ -1,155 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.io.PrintWriter; - -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.junit.Test; - - -/** - * AbstractSessionValueSavingTest - */ -public abstract class AbstractSessionValueSavingTest extends AbstractTestBase -{ - - @Test - public void testSessionValueSaving() throws Exception - { - String contextPath = ""; - String servletMapping = "/server"; - int maxInactivePeriod = 10000; - int scavengePeriod = 20000; - AbstractTestServer server1 = createServer(0, maxInactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); - server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping); - - try - { - server1.start(); - int port1=server1.getPort(); - - HttpClient client = new HttpClient(); - client.start(); - try - { - long sessionTestValue = 0; - - // Perform one request to server1 to create a session - ContentResponse response1 = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init"); - - assertEquals(HttpServletResponse.SC_OK, response1.getStatus()); - assertTrue(sessionTestValue < Long.parseLong(response1.getContentAsString())); - - sessionTestValue = Long.parseLong(response1.getContentAsString()); - - String sessionCookie = response1.getHeaders().get("Set-Cookie"); - assertTrue( sessionCookie != null ); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - // We want to test that optimizations done to the saving of the shared lastAccessTime - // do not break the correct working - int requestInterval = 500; - - - for (int i = 0; i < 10; ++i) - { - Request request2 = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping); - request2.header("Cookie", sessionCookie); - ContentResponse response2 = request2.send(); - - assertEquals(HttpServletResponse.SC_OK , response2.getStatus()); - assertTrue(sessionTestValue < Long.parseLong(response2.getContentAsString())); - sessionTestValue = Long.parseLong(response2.getContentAsString()); - - String setCookie = response1.getHeaders().get("Set-Cookie"); - if (setCookie!=null) - sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - Thread.sleep(requestInterval); - } - - } - finally - { - client.stop(); - } - } - finally - { - server1.stop(); - } - } - - public static class TestServlet extends HttpServlet - { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException - { - String action = request.getParameter("action"); - if ("init".equals(action)) - { - HttpSession session = request.getSession(true); - session.setAttribute("test", System.currentTimeMillis()); - - sendResult(session, httpServletResponse.getWriter()); - } - else - { - HttpSession session = request.getSession(false); - if (session!=null) - { - long value = System.currentTimeMillis(); - session.setAttribute("test", value); - } - - sendResult(session, httpServletResponse.getWriter()); - - } - - - } - - private void sendResult(HttpSession session, PrintWriter writer) - { - if (session != null) - { - writer.print(session.getAttribute("test")); - } - else - { - writer.print(0); - } - } - - } -} diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractStopSessionManagerPreserveSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractStopSessionManagerPreserveSessionTest.java deleted file mode 100644 index a3ed2929b8a..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractStopSessionManagerPreserveSessionTest.java +++ /dev/null @@ -1,119 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -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.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.junit.Test; - -/** - * AbstractStopSessionManagerPreserveSessionTest - * - * - */ -public abstract class AbstractStopSessionManagerPreserveSessionTest extends AbstractTestBase -{ - public String _id; - - - public abstract void checkSessionPersisted (String id, boolean expected); - - - public abstract void configureSessionManagement(ServletContextHandler context); - - @Test - public void testStopSessionManagerPreserveSession() throws Exception - { - String contextPath = ""; - String servletMapping = "/server"; - - AbstractTestServer server = createServer(0, -1, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); - ServletContextHandler context = server.addContext(contextPath); - ServletHolder holder = new ServletHolder(); - TestServlet servlet = new TestServlet(); - holder.setServlet(servlet); - - context.addServlet(holder, servletMapping); - - configureSessionManagement(context); - - server.start(); - int port=server.getPort(); - try - { - HttpClient client = new HttpClient(); - client.start(); - try - { - //Create a session - ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //stop the session manager - context.getSessionHandler().stop(); - - //check the database to see that the session is still valid - checkSessionPersisted(_id, true); - - } - finally - { - client.stop(); - } - } - finally - { - server.stop(); - } - } - - public 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); - session.setAttribute("foo", "bar"); - assertTrue(session.isNew()); - _id = session.getId(); - } - } - } -} diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestBase.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestBase.java index 00440f8c91a..de290b06e6c 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestBase.java +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestBase.java @@ -26,5 +26,5 @@ package org.eclipse.jetty.server.session; */ public abstract class AbstractTestBase { - public abstract AbstractTestServer createServer(int port, int maxInactive, int scavengeInterval, int evictionPolicy) throws Exception; + public abstract SessionDataStoreFactory createSessionDataStoreFactory (); } 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 601cc6275d0..23bb319c8e6 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 @@ -93,7 +93,13 @@ public abstract class AbstractWebAppObjectInSessionTest extends AbstractTestBase //copy(sourceFile, targetFile); IO.copy(resource.getInputStream(), new FileOutputStream(targetFile)); - AbstractTestServer server1 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = createSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(TestServer.DEFAULT_SCAVENGE_SEC); + + TestServer server1 = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC, + cacheFactory, storeFactory); server1.addWebAppContext(warDir.getCanonicalPath(), contextPath).addServlet(WebAppObjectInSessionServlet.class.getName(), servletMapping); try @@ -101,7 +107,8 @@ public abstract class AbstractWebAppObjectInSessionTest extends AbstractTestBase server1.start(); int port1 = server1.getPort(); - AbstractTestServer server2 = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + TestServer server2 = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC, + cacheFactory, storeFactory); server2.addWebAppContext(warDir.getCanonicalPath(), contextPath).addServlet(WebAppObjectInSessionServlet.class.getName(), servletMapping); try diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/NullCacheRenewSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/NullCacheRenewSessionTest.java deleted file mode 100644 index 20ba0c38f80..00000000000 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/NullCacheRenewSessionTest.java +++ /dev/null @@ -1,284 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -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.HttpSessionIdListener; - -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.ContentResponse; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.webapp.WebAppContext; -import org.junit.Test; - - -/** - * NullCacheRenewSessionTest - * - * Test that changes the session id during a request - * on a SessionHandler that does not use session - * caching. - */ -public class NullCacheRenewSessionTest -{ - /** - * MemorySessionDataStore - * - * Make a fake session data store that creates a new SessionData object - * every time load(id) is called. - */ - public static class MemorySessionDataStore extends AbstractSessionDataStore - { - public Map _map = new HashMap<>(); - - - /** - * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() - */ - @Override - public boolean isPassivating() - { - return false; - } - - /** - * @see org.eclipse.jetty.server.session.SessionDataStore#exists(java.lang.String) - */ - @Override - public boolean exists(String id) throws Exception - { - return _map.containsKey(id); - } - - /** - * @see org.eclipse.jetty.server.session.SessionDataMap#load(java.lang.String) - */ - @Override - public SessionData load(String id) throws Exception - { - SessionData sd = _map.get(id); - if (sd == null) - return null; - SessionData nsd = new SessionData(id,"","",System.currentTimeMillis(),System.currentTimeMillis(), System.currentTimeMillis(),0 ); - nsd.copy(sd); - return nsd; - } - - /** - * @see org.eclipse.jetty.server.session.SessionDataMap#delete(java.lang.String) - */ - @Override - public boolean delete(String id) throws Exception - { - return (_map.remove(id) != null); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionDataStore#doStore(java.lang.String, org.eclipse.jetty.server.session.SessionData, long) - */ - @Override - public void doStore(String id, SessionData data, long lastSaveTime) throws Exception - { - _map.put(id, data); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractSessionDataStore#doGetExpired(java.util.Set) - */ - @Override - public Set doGetExpired(Set candidates) - { - return Collections.emptySet(); - } - - } - - public static class NullCacheServer extends AbstractTestServer - { - - /** - * @param port - * @param maxInactivePeriod - * @param scavengePeriod - * @param evictionPolicy - * @throws Exception - */ - public NullCacheServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy) throws Exception - { - super(port, maxInactivePeriod, scavengePeriod, evictionPolicy); - } - - /** - * @see org.eclipse.jetty.server.session.AbstractTestServer#newSessionHandler() - */ - @Override - public SessionHandler newSessionHandler() - { - SessionHandler handler = new TestSessionHandler(); - SessionCache ss = new NullSessionCache(handler); - handler.setSessionCache(ss); - ss.setSessionDataStore(new MemorySessionDataStore()); - return handler; - } - - } - - - - @Test - /** - * @throws Exception - */ - public void testSessionRenewal() throws Exception - { - String contextPath = ""; - String servletMapping = "/server"; - int maxInactive = 1; - int scavengePeriod = 3; - AbstractTestServer server = new NullCacheServer (0, maxInactive, scavengePeriod, SessionCache.NEVER_EVICT); - - WebAppContext context = server.addWebAppContext(".", contextPath); - context.setParentLoaderPriority(true); - context.addServlet(TestServlet.class, servletMapping); - TestHttpSessionIdListener testListener = new TestHttpSessionIdListener(); - context.addEventListener(testListener); - - - - HttpClient client = new HttpClient(); - try - { - server.start(); - int port=server.getPort(); - - client.start(); - - //make a request to create a session - ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create"); - assertEquals(HttpServletResponse.SC_OK,response.getStatus()); - - String sessionCookie = response.getHeaders().get("Set-Cookie"); - assertTrue(sessionCookie != null); - assertFalse(testListener.isCalled()); - - //make a request to change the sessionid - Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=renew"); - request.header("Cookie", sessionCookie); - ContentResponse renewResponse = request.send(); - - assertEquals(HttpServletResponse.SC_OK,renewResponse.getStatus()); - String renewSessionCookie = renewResponse.getHeaders().get("Set-Cookie"); - assertNotNull(renewSessionCookie); - assertNotSame(sessionCookie, renewSessionCookie); - assertTrue(testListener.isCalled()); - } - finally - { - client.stop(); - server.stop(); - } - } - - - - public static class TestHttpSessionIdListener implements HttpSessionIdListener - { - boolean called = false; - - @Override - public void sessionIdChanged(HttpSessionEvent event, String oldSessionId) - { - assertNotNull(event.getSession()); - assertNotSame(oldSessionId, event.getSession().getId()); - called = true; - } - - public boolean isCalled() - { - return called; - } - } - - - 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); - assertTrue(beforeSession != null); - String beforeSessionId = beforeSession.getId(); - - ((Session)beforeSession).renewId(request); - - HttpSession afterSession = request.getSession(false); - - assertTrue(afterSession != null); - String afterSessionId = afterSession.getId(); - - assertTrue(beforeSession==afterSession); //same object - assertFalse(beforeSessionId.equals(afterSessionId)); //different id - - SessionHandler sessionManager = ((Session)afterSession).getSessionHandler(); - DefaultSessionIdManager sessionIdManager = (DefaultSessionIdManager)sessionManager.getSessionIdManager(); - - assertTrue(sessionIdManager.isIdInUse(afterSessionId)); //new session id should be in use - assertFalse(sessionIdManager.isIdInUse(beforeSessionId)); - - HttpSession session = sessionManager.getSession(afterSessionId); - assertNotNull(session); - session = sessionManager.getSession(beforeSessionId); - assertNull(session); - - if (((Session)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/AbstractTestServer.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestServer.java similarity index 84% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractTestServer.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestServer.java index 9ffec29d697..d6bc60b6410 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/TestServer.java @@ -25,7 +25,7 @@ import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.webapp.WebAppContext; -public abstract class AbstractTestServer +public class TestServer { public static int DEFAULT_MAX_INACTIVE = 30; public static int DEFAULT_SCAVENGE_SEC = 10; @@ -35,12 +35,13 @@ public abstract class AbstractTestServer protected final Server _server; protected final int _maxInactivePeriod; - protected final int _evictionPolicy; protected final int _scavengePeriod; protected final ContextHandlerCollection _contexts; protected SessionIdManager _sessionIdManager; private HouseKeeper _housekeeper; protected Object _config; + protected SessionCacheFactory _cacheFactory; + protected SessionDataStoreFactory _storeFactory; public static String extractSessionId (String sessionCookie) { @@ -58,19 +59,15 @@ public abstract class AbstractTestServer return sessionCookie; } - public AbstractTestServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy) throws Exception - { - this (port, maxInactivePeriod, scavengePeriod, evictionPolicy, null); - } - public AbstractTestServer(int port, int maxInactivePeriod, int scavengePeriod, int evictionPolicy, Object cfg) throws Exception + public TestServer(int port, int maxInactivePeriod, int scavengePeriod, SessionCacheFactory cacheFactory, SessionDataStoreFactory storeFactory) throws Exception { _server = new Server(port); _maxInactivePeriod = maxInactivePeriod; _scavengePeriod = scavengePeriod; - _evictionPolicy = evictionPolicy; + _cacheFactory = cacheFactory; + _storeFactory = storeFactory; _contexts = new ContextHandlerCollection(); - _config = cfg; _sessionIdManager = newSessionIdManager(); _server.setSessionIdManager(_sessionIdManager); ((DefaultSessionIdManager) _sessionIdManager).setServer(_server); @@ -86,7 +83,17 @@ public abstract class AbstractTestServer return idManager; } - public abstract SessionHandler newSessionHandler(); + public SessionHandler newSessionHandler() + throws Exception + { + SessionHandler h = new SessionHandler(); + SessionCache c = _cacheFactory.getSessionCache(h); + SessionDataStore s = _storeFactory.getSessionDataStore(h); + c.setSessionDataStore(s); + h.setSessionCache(c); + return h; + } + public void start() throws Exception { @@ -105,13 +112,12 @@ public abstract class AbstractTestServer return ((NetworkConnector)getServer().getConnectors()[0]).getLocalPort(); } - public ServletContextHandler addContext(String contextPath) + public ServletContextHandler addContext(String contextPath) throws Exception { ServletContextHandler context = new ServletContextHandler(_contexts, contextPath); SessionHandler sessionHandler = newSessionHandler(); sessionHandler.setSessionIdManager(_sessionIdManager); sessionHandler.setMaxInactiveInterval(_maxInactivePeriod); - sessionHandler.getSessionCache().setEvictionPolicy(_evictionPolicy); context.setSessionHandler(sessionHandler); return context; @@ -122,13 +128,12 @@ public abstract class AbstractTestServer _server.stop(); } - public WebAppContext addWebAppContext(String warPath, String contextPath) + public WebAppContext addWebAppContext(String warPath, String contextPath) throws Exception { WebAppContext context = new WebAppContext(_contexts, warPath, contextPath); SessionHandler sessionHandler = newSessionHandler(); sessionHandler.setSessionIdManager(_sessionIdManager); sessionHandler.setMaxInactiveInterval(_maxInactivePeriod); - sessionHandler.getSessionCache().setEvictionPolicy(_evictionPolicy); context.setSessionHandler(sessionHandler); return context; diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStore.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStore.java new file mode 100644 index 00000000000..2dddc68d12e --- /dev/null +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStore.java @@ -0,0 +1,97 @@ +// +// ======================================================================== +// Copyright (c) 1995-2017 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.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * TestSessionDataStore + * + * Make a fake session data store that creates a new SessionData object + * every time load(id) is called. + */ +public class TestSessionDataStore extends AbstractSessionDataStore +{ + public Map _map = new HashMap<>(); + + + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return false; + } + + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#exists(java.lang.String) + */ + @Override + public boolean exists(String id) throws Exception + { + return _map.containsKey(id); + } + + /** + * @see org.eclipse.jetty.server.session.SessionDataMap#load(java.lang.String) + */ + @Override + public SessionData load(String id) throws Exception + { + SessionData sd = _map.get(id); + if (sd == null) + return null; + SessionData nsd = new SessionData(id,"","",System.currentTimeMillis(),System.currentTimeMillis(), System.currentTimeMillis(),0 ); + nsd.copy(sd); + return nsd; + } + + /** + * @see org.eclipse.jetty.server.session.SessionDataMap#delete(java.lang.String) + */ + @Override + public boolean delete(String id) throws Exception + { + return (_map.remove(id) != null); + } + + /** + * @see org.eclipse.jetty.server.session.AbstractSessionDataStore#doStore(java.lang.String, org.eclipse.jetty.server.session.SessionData, long) + */ + @Override + public void doStore(String id, SessionData data, long lastSaveTime) throws Exception + { + _map.put(id, data); + } + + /** + * @see org.eclipse.jetty.server.session.AbstractSessionDataStore#doGetExpired(java.util.Set) + */ + @Override + public Set doGetExpired(Set candidates) + { + return Collections.emptySet(); + } + +} diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStoreFactory.java similarity index 68% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java rename to tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStoreFactory.java index 544c6a2e90e..dedbbd63460 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/ScatterGunLoadTest.java +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionDataStoreFactory.java @@ -16,25 +16,24 @@ // ======================================================================== // + package org.eclipse.jetty.server.session; -import org.junit.Test; - /** - * ScatterGunLoadTest + * TestSessionDataStoreFactory + * + * */ -public class ScatterGunLoadTest extends AbstractScatterGunLoadTest +public class TestSessionDataStoreFactory extends AbstractSessionDataStoreFactory { + /** + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } - @Test - public void testLightLoad() throws Exception - { - super.testLightLoad(); + return new TestSessionDataStore(); } } 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/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java similarity index 87% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java index bd6c775df40..6237cb55e4e 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/test/java/org/eclipse/jetty/server/session/ClientCrossContextSessionTest.java @@ -38,20 +38,28 @@ import org.junit.Test; /** - * AbstractClientCrossContextSessionTest + * ClientCrossContextSessionTest + * + * Test that a client can create a session on one context and + * then re-use that session id on a request to another context, + * but the session contents are separate on each. */ -public abstract class AbstractClientCrossContextSessionTest extends AbstractTestBase +public class ClientCrossContextSessionTest { - - @Test public void testCrossContextDispatch() throws Exception { String contextA = "/contextA"; String contextB = "/contextB"; String servletMapping = "/server"; - AbstractTestServer server = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new NullSessionDataStoreFactory(); + + TestServer server = new TestServer(0, TestServer.DEFAULT_MAX_INACTIVE, TestServer.DEFAULT_SCAVENGE_SEC, + cacheFactory, storeFactory); TestServletA servletA = new TestServletA(); ServletHolder holderA = new ServletHolder(servletA); ServletContextHandler ctxA = server.addContext(contextA); @@ -143,4 +151,6 @@ public abstract class AbstractClientCrossContextSessionTest extends AbstractTest assertTrue(objectA == null); } } + + } diff --git a/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/CreationTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/CreationTest.java new file mode 100644 index 00000000000..2273b14ab09 --- /dev/null +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/CreationTest.java @@ -0,0 +1,440 @@ +// +// ======================================================================== +// Copyright (c) 1995-2017 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +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.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +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 org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.util.StringUtil; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.StacklessLogging; +import org.junit.Before; +import org.junit.Test; + + + +/** + * CreationTest + * + * Test combinations of creating, forwarding and invalidating + * a session. + */ +public class CreationTest +{ + + protected TestServlet _servlet; + protected TestServer _server1 = null; + protected CountDownLatch _synchronizer; + + @Before + public void setUp () + { + _synchronizer = new CountDownLatch(1); + _servlet = new TestServlet(_synchronizer); + } + + + /** + * Test creating a session when the cache is set to + * evict after the request exits. + * @throws Exception + */ + @Test + public void testSessionCreateWithEviction() throws Exception + { + String contextPath = ""; + String servletMapping = "/server"; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.EVICT_ON_SESSION_EXIT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + _server1 = new TestServer(0, -1, -1, cacheFactory, storeFactory); + + ServletHolder holder = new ServletHolder(_servlet); + ServletContextHandler contextHandler = _server1.addContext(contextPath); + contextHandler.addServlet(holder, servletMapping); + _servlet.setStore(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore()); + _server1.start(); + int port1 = _server1.getPort(); + + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping+"?action=create&check=false"; + + //make a request to set up a session on the server + ContentResponse response = client.GET(url); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + String sessionCookie = response.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //session should now be evicted from the cache + String id = TestServer.extractSessionId(sessionCookie); + + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(id)); + assertTrue(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); + + //make another request for the same session + Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=test"); + request.header("Cookie", sessionCookie); + response = request.send(); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //session should now be evicted from the cache again + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(TestServer.extractSessionId(sessionCookie))); + + } + finally + { + _server1.stop(); + } + } + + + /** + * Create and then invalidate a session in the same request. + * Set SessionCache.setSaveOnCreate(false), so that the creation + * and immediate invalidation of the session means it is never stored. + * @throws Exception + */ + @Test + public void testSessionCreateAndInvalidateNoSave() throws Exception + { + String contextPath = ""; + String servletMapping = "/server"; + int inactivePeriod = 20; + int scavengePeriod = 3; + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + _server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); + + ServletHolder holder = new ServletHolder(_servlet); + ServletContextHandler contextHandler = _server1.addContext(contextPath); + contextHandler.addServlet(holder, servletMapping); + _servlet.setStore(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore()); + _server1.start(); + int port1 = _server1.getPort(); + + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping+"?action=createinv&check=false"; + + //make a request to set up a session on the server + ContentResponse response = client.GET(url); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //check that the session does not exist + assertFalse(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + } + finally + { + _server1.stop(); + } + } + + + + + /** + * Create and then invalidate a session in the same request. + * Use SessionCache.setSaveOnCreate(true) and verify the session + * exists before it is invalidated. + * @throws Exception + */ + @Test + public void testSessionCreateAndInvalidateWithSave() throws Exception + { + String contextPath = ""; + String servletMapping = "/server"; + int inactivePeriod = 20; + int scavengePeriod = 3; + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + cacheFactory.setSaveOnCreate(true); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + _server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); + ServletHolder holder = new ServletHolder(_servlet); + ServletContextHandler contextHandler = _server1.addContext(contextPath); + contextHandler.addServlet(holder, servletMapping); + _servlet.setStore(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore()); + _server1.start(); + int port1 = _server1.getPort(); + + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping+"?action=createinv&check=true"; + + //make a request to set up a session on the server + ContentResponse response = client.GET(url); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //check that the session does not exist + assertFalse(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + } + finally + { + _server1.stop(); + } + } + + + + + + + /** + * Create a session in a context, forward to another context and create a + * session in it too. Check that both sessions exist after the response + * completes. + * @throws Exception + */ + @Test + public void testSessionCreateForward () throws Exception + { + String contextPath = ""; + String contextB = "/contextB"; + String servletMapping = "/server"; + int inactivePeriod = 20; + int scavengePeriod = 3; + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + _server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); + + ServletHolder holder = new ServletHolder(_servlet); + ServletContextHandler contextHandler = _server1.addContext(contextPath); + contextHandler.addServlet(holder, servletMapping); + ServletContextHandler ctxB = _server1.addContext(contextB); + ctxB.addServlet(TestServletB.class, servletMapping); + _server1.start(); + int port1 = _server1.getPort(); + + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping; + + //make a request to set up a session on the server + ContentResponse response = client.GET(url+"?action=forward"); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //ensure work has finished on the server side + _synchronizer.await(); + + //check that the sessions exist persisted + assertTrue(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + assertTrue(ctxB.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + } + finally + { + _server1.stop(); + } + } + + /** + * + * Create a session in one context, forward to another context and create another session + * in it, then invalidate the session in the original context: that should invalidate the + * session in both contexts and no session should exist after the response completes. + * @throws Exception + */ + @Test + public void testSessionCreateForwardAndInvalidate () throws Exception + { + String contextPath = ""; + String contextB = "/contextB"; + String servletMapping = "/server"; + int inactivePeriod = 20; + int scavengePeriod = 3; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + _server1 = new TestServer (0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); + + ServletHolder holder = new ServletHolder(_servlet); + ServletContextHandler contextHandler = _server1.addContext(contextPath); + contextHandler.addServlet(holder, servletMapping); + ServletContextHandler ctxB = _server1.addContext(contextB); + ctxB.addServlet(TestServletB.class, servletMapping); + _server1.start(); + int port1 = _server1.getPort(); + + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session"))) + { + HttpClient client = new HttpClient(); + client.start(); + String url = "http://localhost:" + port1 + contextPath + servletMapping; + + //make a request to set up a session on the server + ContentResponse response = client.GET(url+"?action=forwardinv"); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + //wait for the request to have finished before checking session + _synchronizer.await(10, TimeUnit.SECONDS); + + //check that the session does not exist + assertFalse(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + assertFalse(ctxB.getSessionHandler().getSessionCache().getSessionDataStore().exists(_servlet._id)); + } + finally + { + _server1.stop(); + } + } + + + + + public static class TestServlet extends HttpServlet + { + public String _id = null; + public CountDownLatch _synchronizer; + public SessionDataStore _store; + + public TestServlet (CountDownLatch latch) + { + _synchronizer = latch; + } + + public void setStore (SessionDataStore store) + { + _store = store; + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException + { + String action = request.getParameter("action"); + + if (action != null && action.startsWith("forward")) + { + HttpSession session = request.getSession(true); + _id = session.getId(); + session.setAttribute("value", new Integer(1)); + + ServletContext contextB = getServletContext().getContext("/contextB"); + RequestDispatcher dispatcherB = contextB.getRequestDispatcher(request.getServletPath()); + dispatcherB.forward(request, httpServletResponse); + + if (action.endsWith("inv")) + session.invalidate(); + else + { + session = request.getSession(false); + assertNotNull(session); + assertNull(session.getAttribute("B")); //check we don't see stuff from other context + + } + _synchronizer.countDown(); + return; + } + else if (action!=null && "test".equals(action)) + { + HttpSession session = request.getSession(false); + assertNotNull(session); + return; + } + else if (action != null && action.startsWith("create")) + { + HttpSession session = request.getSession(true); + _id = session.getId(); + session.setAttribute("value", new Integer(1)); + + String check = request.getParameter("check"); + if (!StringUtil.isBlank(check) && _store != null) + { + boolean exists; + try + { + exists = _store.exists(_id); + } + catch (Exception e) + { + throw new ServletException (e); + } + + if ("false".equalsIgnoreCase(check)) + assertFalse(exists); + else + assertTrue(exists); + } + + if ("createinv".equals(action)) + { + session.invalidate(); + assertNull(request.getSession(false)); + assertNotNull(session); + } + } + } + } + + public static class TestServletB extends HttpServlet + { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException + { + HttpSession session = request.getSession(false); + assertNull(session); + if (session == null) session = request.getSession(true); + + // Be sure nothing from contextA is present + Object objectA = session.getAttribute("value"); + assertTrue(objectA == null); + + // Add something, so in contextA we can check if it is visible (it must not). + session.setAttribute("B", "B"); + } + } +} diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java similarity index 76% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java index 6311159acee..e91da9d985f 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DeleteUnloadableSessionTest.java @@ -20,6 +20,7 @@ package org.eclipse.jetty.server.session; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import java.io.IOException; @@ -50,14 +51,18 @@ public class DeleteUnloadableSessionTest { /** - * TestSessionDataStore + * DelSessionDataStore * * */ - public static class TestSessionDataStore extends AbstractSessionDataStore + public static class DelSessionDataStore extends AbstractSessionDataStore { int count = 0; + Object o = new Object(); + + String unloadableId = null; + /** * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() */ @@ -73,7 +78,7 @@ public class DeleteUnloadableSessionTest @Override public boolean exists(String id) throws Exception { - return false; + return o != null; } /** @@ -82,11 +87,8 @@ public class DeleteUnloadableSessionTest @Override public SessionData load(String id) throws Exception { - ++count; - if (count == 1) - throw new UnreadableSessionDataException(id, _context, new IllegalStateException()); - - return new SessionData(id, "", "", System.currentTimeMillis(), System.currentTimeMillis(), System.currentTimeMillis(), -1); + unloadableId = id; + throw new UnreadableSessionDataException(id, null, new Exception("fake")); } /** @@ -95,7 +97,12 @@ public class DeleteUnloadableSessionTest @Override public boolean delete(String id) throws Exception { - return true; + if (id.equals(unloadableId)) + { + o = null; + return true; + } + return false; } /** @@ -118,6 +125,20 @@ public class DeleteUnloadableSessionTest } + public static class DelSessionDataStoreFactory extends AbstractSessionDataStoreFactory + { + + /** + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ + @Override + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception + { + return new DelSessionDataStore(); + } + + } + /** * TestServlet * @@ -150,12 +171,15 @@ public class DeleteUnloadableSessionTest String servletMapping = "/server"; int inactivePeriod = -1; int scavengePeriod = 100; - JdbcTestServer server = new JdbcTestServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + cacheFactory.setRemoveUnloadableSessions(true); + SessionDataStoreFactory storeFactory = new DelSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); - context.getSessionHandler().getSessionCache().setRemoveUnloadableSessions(true); - - TestSessionDataStore ds = new TestSessionDataStore(); - context.getSessionHandler().getSessionCache().setSessionDataStore(ds); TestServlet servlet = new TestServlet(); ServletHolder holder = new ServletHolder(servlet); @@ -174,6 +198,8 @@ public class DeleteUnloadableSessionTest request.header("Cookie", sessionCookie); ContentResponse response = request.send(); assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + + assertFalse(context.getSessionHandler().getSessionCache().getSessionDataStore().exists(TestServer.extractSessionId(sessionCookie))); } finally diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java similarity index 85% rename from tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java index dfa0af32c76..7fd488d078b 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DirtyAttributeTest.java @@ -45,10 +45,8 @@ import org.junit.Test; /** * DirtyAttributeTest * - * Check that repeated calls to setAttribute with the same value do not cause writes to the - * database - this is inferred via calls to passivate and activate listeners. - * - * + * Check that repeated calls to setAttribute when we never evict the + * session from the cache still result in writes. */ public class DirtyAttributeTest { @@ -57,13 +55,45 @@ public class DirtyAttributeTest public static String THE_NAME = "__theName"; public static int INACTIVE = 4; public static int SCAVENGE = 1; - public static int INSPECT = 1; - public static int EVICT_SECS = 3; + + public class TestPassivatingSessionDataStore extends TestSessionDataStore + { + + /** + * @see org.eclipse.jetty.server.session.TestSessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return true; + } + } + + + public class TestPassivatingSessionDataStoreFactory extends AbstractSessionDataStoreFactory + { + + /** + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ + @Override + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception + { + return new TestPassivatingSessionDataStore(); + } + + } + @Test public void testDirtyWrite() throws Exception { - AbstractTestServer server = new JdbcTestServer(0,INACTIVE,SCAVENGE, EVICT_SECS); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestPassivatingSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(SCAVENGE); + + TestServer server = new TestServer(0,INACTIVE,SCAVENGE, cacheFactory, storeFactory); ServletContextHandler ctxA = server.addContext("/mod"); ctxA.addServlet(TestDirtyServlet.class, "/test"); @@ -131,12 +161,6 @@ public class DirtyAttributeTest } - @After - public void tearDown() throws Exception - { - JdbcTestServer.shutdown(null); - } - public static class TestValue implements HttpSessionActivationListener, HttpSessionBindingListener, Serializable { diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractIdleSessionTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java similarity index 81% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractIdleSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java index cf1cb434e0f..ec110cac542 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractIdleSessionTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/IdleSessionTest.java @@ -49,34 +49,13 @@ import org.junit.Test; * * */ -public abstract class AbstractIdleSessionTest extends AbstractTestBase +public class IdleSessionTest { protected TestServlet _servlet = new TestServlet(); - protected AbstractTestServer _server1 = null; + protected TestServer _server1 = null; - /** - * @param sessionId - */ - public abstract void checkSessionIdled (String sessionId); - - - - /** - * @param sessionId - */ - public abstract void checkSessionDeIdled (String sessionId); - - - - - /** - * @param sessionId - */ - public abstract void deleteSessionData (String sessionId); - - /** * @param sec */ @@ -104,9 +83,11 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase int scavengePeriod = 3; int evictionSec = 5; + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(evictionSec); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); - - _server1 = createServer(0, inactivePeriod, scavengePeriod, evictionSec); + _server1 = new TestServer(0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); ServletHolder holder = new ServletHolder(_servlet); ServletContextHandler contextHandler = _server1.addContext(contextPath); contextHandler.addServlet(holder, servletMapping); @@ -131,7 +112,9 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase pause(evictionSec*3); //check that the session has been idled - checkSessionIdled(AbstractTestServer.extractSessionId(sessionCookie)); + String id = TestServer.extractSessionId(sessionCookie); + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(id)); + assertTrue(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); //make another request to de-idle the session Request request = client.newRequest(url + "?action=test"); @@ -140,17 +123,20 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase assertEquals(HttpServletResponse.SC_OK,response2.getStatus()); //check session de-idled - checkSessionDeIdled(AbstractTestServer.extractSessionId(sessionCookie)); + assertTrue(contextHandler.getSessionHandler().getSessionCache().contains(id)); + //wait again for the session to be idled pause(evictionSec*3); //check that it is - checkSessionIdled(AbstractTestServer.extractSessionId(sessionCookie)); + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(id)); + assertTrue(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); + //While idle, take some action to ensure that a deidle won't work, like - //deleting all sessions in mongo - deleteSessionData(AbstractTestServer.extractSessionId(sessionCookie)); + //deleting the sessions in the store + ((TestSessionDataStore)contextHandler.getSessionHandler().getSessionCache().getSessionDataStore())._map.clear(); //make a request request = client.newRequest(url + "?action=testfail"); @@ -166,7 +152,8 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase assertTrue(sessionCookie != null); // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - + id = TestServer.extractSessionId(sessionCookie); + //and wait until the session should be idled out pause(evictionSec * 3); @@ -175,7 +162,8 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase _server1.getHouseKeeper().stop(); //check that the session is idle - checkSessionIdled(AbstractTestServer.extractSessionId(sessionCookie)); + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(id)); + assertTrue(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); //wait until the session should be expired pause (inactivePeriod + (3*scavengePeriod)); @@ -185,6 +173,9 @@ public abstract class AbstractIdleSessionTest extends AbstractTestBase request.getHeaders().add("Cookie", sessionCookie); response2 = request.send(); assertEquals(HttpServletResponse.SC_OK,response2.getStatus()); + + assertFalse(contextHandler.getSessionHandler().getSessionCache().contains(id)); + assertFalse(contextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(id)); } 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/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java similarity index 74% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java index 661eec47c4d..374de0aa68c 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/test/java/org/eclipse/jetty/server/session/ImmortalSessionTest.java @@ -39,19 +39,47 @@ import org.junit.Test; /** - * AbstractImmortalSessionTest + * ImmortalSessionTest */ -public abstract class AbstractImmortalSessionTest extends AbstractTestBase +public class ImmortalSessionTest { - + @Test - public void testImmortalSession() throws Exception + public void testImmortalSessionNoEviction() throws Exception + { + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new NullSessionDataStoreFactory(); + doTest(2, cacheFactory, storeFactory); + } + + @Test + public void testImmortalSessionEvictOnExit() throws Exception + { + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.EVICT_ON_SESSION_EXIT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + doTest(2, cacheFactory, storeFactory); + } + + @Test + public void testImmortalSessionEvictOnIdle() throws Exception + { + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.EVICT_ON_INACTIVITY); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + doTest(2, cacheFactory, storeFactory); + } + + + public void doTest (int scavengeInterval, SessionCacheFactory cacheFactory, SessionDataStoreFactory storeFactory) + throws Exception { String contextPath = ""; String servletMapping = "/server"; - int scavengePeriod = 2; + //turn off session expiry by setting maxInactiveInterval to -1 - AbstractTestServer server = createServer(0, -1, scavengePeriod, SessionCache.NEVER_EVICT); + TestServer server = new TestServer (0, -1, scavengeInterval, cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); context.addServlet(TestServlet.class, servletMapping); @@ -75,7 +103,7 @@ public abstract class AbstractImmortalSessionTest extends AbstractTestBase 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); + Thread.sleep(scavengeInterval * 2500L); // Be sure the session is still there Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=get"); @@ -99,6 +127,11 @@ public abstract class AbstractImmortalSessionTest extends AbstractTestBase } } + + + + + public static class TestServlet extends HttpServlet { @Override @@ -125,4 +158,6 @@ public abstract class AbstractImmortalSessionTest extends AbstractTestBase writer.flush(); } } + + } diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java similarity index 91% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java index 8b4120ca0b8..10f28765736 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/RedirectSessionTest.java @@ -48,7 +48,12 @@ public class RedirectSessionTest @Test public void testSessionRedirect() throws Exception { - AbstractTestServer testServer = new HashTestServer(0, -1, 60, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + TestServer testServer = new TestServer(0, -1, -1, cacheFactory,storeFactory); ServletContextHandler testServletContextHandler = testServer.addContext("/context"); testServletContextHandler.addServlet(Servlet1.class, "/one"); testServletContextHandler.addServlet(Servlet2.class, "/two"); 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/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java similarity index 92% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java index 1014a754817..43707c6b7c3 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/test/java/org/eclipse/jetty/server/session/ReentrantRequestSessionTest.java @@ -36,21 +36,26 @@ import org.junit.Test; /** - * AbstractReentrantRequestSessionTest + * ReentrantRequestSessionTest * * While a request is still active in a context, make another * request to it to ensure both share same session. */ -public abstract class AbstractReentrantRequestSessionTest extends AbstractTestBase +public class ReentrantRequestSessionTest { - - @Test public void testReentrantRequestSession() throws Exception { String contextPath = ""; String servletMapping = "/server"; - AbstractTestServer server = createServer(0, 100, 400, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new NullSessionDataStoreFactory(); + + TestServer server = new TestServer(0, -1, 60, cacheFactory, storeFactory); + + server.addContext(contextPath).addServlet(TestServlet.class, servletMapping); try { 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/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java similarity index 90% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractRemoveSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java index 7ecff800a41..12e37961973 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/test/java/org/eclipse/jetty/server/session/RemoveSessionTest.java @@ -19,6 +19,7 @@ package org.eclipse.jetty.server.session; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -40,12 +41,12 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.junit.Test; /** - * AbstractRemoveSessionTest + * RemoveSessionTest * * Test that invalidating a session does not return the session on the next request. * */ -public abstract class AbstractRemoveSessionTest extends AbstractTestBase +public class RemoveSessionTest { @@ -54,7 +55,13 @@ public abstract class AbstractRemoveSessionTest extends AbstractTestBase { String contextPath = ""; String servletMapping = "/server"; - AbstractTestServer server = createServer(0, -1, -1, SessionCache.NEVER_EVICT); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + TestServer server = new TestServer(0, -1, -1,cacheFactory, storeFactory); + ServletContextHandler context = server.addContext(contextPath); context.addServlet(TestServlet.class, servletMapping); TestEventListener testListener = new TestEventListener(); @@ -91,6 +98,9 @@ public abstract class AbstractRemoveSessionTest extends AbstractTestBase assertEquals(0, ((DefaultSessionCache)m.getSessionCache()).getSessionsCurrent()); assertEquals(1, ((DefaultSessionCache)m.getSessionCache()).getSessionsMax()); assertEquals(1, ((DefaultSessionCache)m.getSessionCache()).getSessionsTotal()); + + //check the session is not persisted any more + assertFalse(m.getSessionCache().getSessionDataStore().exists(TestServer.extractSessionId(sessionCookie))); // The session is not there anymore, even if we present an old cookie request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=check"); diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractForwardedSessionTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameContextForwardedSessionTest.java similarity index 79% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractForwardedSessionTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameContextForwardedSessionTest.java index 2872ff2d7b4..8040f11e7e3 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractForwardedSessionTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameContextForwardedSessionTest.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; +import java.util.concurrent.CountDownLatch; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -36,28 +37,43 @@ 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 org.eclipse.jetty.servlet.ServletHolder; +import org.junit.Before; import org.junit.Test; /** - * AbstractForwardedSessionTest + * SameContextForwardedSessionTest * * Test that creating a session inside a forward on the same context works, and that * attributes set after the forward returns are preserved. - * - * This test requires that the sessions will be persisted, as the server is stopped and - * then restarted in order to check that all the attributes were saved. */ -public abstract class AbstractForwardedSessionTest extends AbstractTestBase +public class SameContextForwardedSessionTest { - + protected CountDownLatch _synchronizer; + protected Servlet1 _one; + + @Before + public void setUp () + { + _synchronizer = new CountDownLatch(1); + _one = new Servlet1(); + _one.setSynchronizer(_synchronizer); + } + @Test public void testSessionCreateInForward() throws Exception { - AbstractTestServer testServer = createServer(0, AbstractTestServer.DEFAULT_MAX_INACTIVE, AbstractTestServer.DEFAULT_SCAVENGE_SEC, AbstractTestServer.DEFAULT_EVICTIONPOLICY); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + TestServer testServer = new TestServer(0, -1, -1, cacheFactory, storeFactory); + ServletContextHandler testServletContextHandler = testServer.addContext("/context"); - testServletContextHandler.addServlet(Servlet1.class, "/one"); + ServletHolder holder = new ServletHolder(_one); + testServletContextHandler.addServlet(holder, "/one"); testServletContextHandler.addServlet(Servlet2.class, "/two"); testServletContextHandler.addServlet(Servlet3.class, "/three"); testServletContextHandler.addServlet(Servlet4.class, "/four"); @@ -80,14 +96,12 @@ public abstract class AbstractForwardedSessionTest extends AbstractTestBase // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - //test that the session was created, and that it contains the attributes from servlet3 and servlet1 + //wait until all of the request handling has finished + _synchronizer.await(); - //stop the server, to make sure any session persistence has happened - testServer.stop(); - - //restart - testServer.start(); - serverPort = testServer.getPort(); + //test that the session was created, and that it contains the attributes from servlet3 and servlet1 + testServletContextHandler.getSessionHandler().getSessionCache().contains(TestServer.extractSessionId(sessionCookie)); + testServletContextHandler.getSessionHandler().getSessionCache().getSessionDataStore().exists(TestServer.extractSessionId(sessionCookie)); //Make a fresh request Request request = client.newRequest("http://localhost:" + serverPort + "/context/four"); @@ -111,6 +125,13 @@ public abstract class AbstractForwardedSessionTest extends AbstractTestBase public static class Servlet1 extends HttpServlet { + CountDownLatch _synchronizer; + + public void setSynchronizer(CountDownLatch sync) + { + _synchronizer = sync; + } + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @@ -125,6 +146,9 @@ public abstract class AbstractForwardedSessionTest extends AbstractTestBase assertNotNull(sess); assertNotNull(sess.getAttribute("servlet3")); sess.setAttribute("servlet1", "servlet1"); + + if (_synchronizer != null) + _synchronizer.countDown(); } } diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSameNodeLoadTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java similarity index 62% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSameNodeLoadTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java index 7cdb92dea80..bbbea552ee2 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSameNodeLoadTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SameNodeLoadTest.java @@ -39,99 +39,98 @@ 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.toolchain.test.annotation.Slow; import org.junit.Test; /** - * AbstractSameNodeLoadTest + * SameNodeLoadTest * * This test performs multiple concurrent requests for the same session on the same node. * */ -public abstract class AbstractSameNodeLoadTest extends AbstractTestBase +public class SameNodeLoadTest { - protected boolean _stress = Boolean.getBoolean( "STRESS" ); - - - @Test + @Slow public void testLoad() throws Exception { - if ( _stress ) - { - String contextPath = ""; - String servletMapping = "/server"; - AbstractTestServer server1 = createServer(0, 20000, 4, 1000); - server1.addContext( contextPath ).addServlet( TestServlet.class, servletMapping ); + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + String contextPath = ""; + String servletMapping = "/server"; + TestServer server1 = new TestServer(0, -1, 4, cacheFactory, storeFactory); + + server1.addContext( contextPath ).addServlet( TestServlet.class, servletMapping ); + + try + { + server1.start(); + int port1 = server1.getPort(); + + HttpClient client = new HttpClient(); + client.start(); try { - server1.start(); - int port1 = server1.getPort(); + String url = "http://localhost:" + port1 + contextPath + servletMapping; - HttpClient client = new HttpClient(); - client.start(); - try + + //create session via first server + ContentResponse response1 = client.GET(url + "?action=init"); + assertEquals(HttpServletResponse.SC_OK,response1.getStatus()); + String sessionCookie = response1.getHeaders().get("Set-Cookie"); + assertTrue(sessionCookie != null); + // Mangle the cookie, replacing Path with $Path, etc. + sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); + + //simulate 10 clients making 100 requests each + ExecutorService executor = Executors.newCachedThreadPool(); + int clientsCount = 10; + CyclicBarrier barrier = new CyclicBarrier( clientsCount + 1 ); + int requestsCount = 100; + Worker[] workers = new Worker[clientsCount]; + for ( int i = 0; i < clientsCount; ++i ) { - String url = "http://localhost:" + port1 + contextPath + servletMapping; - - - //create session via first server - ContentResponse response1 = client.GET(url + "?action=init"); - assertEquals(HttpServletResponse.SC_OK,response1.getStatus()); - String sessionCookie = response1.getHeaders().getStringField( "Set-Cookie" ); - assertTrue(sessionCookie != null); - // Mangle the cookie, replacing Path with $Path, etc. - sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - - //simulate 10 clients making 100 requests each - ExecutorService executor = Executors.newCachedThreadPool(); - int clientsCount = 10; - CyclicBarrier barrier = new CyclicBarrier( clientsCount + 1 ); - int requestsCount = 100; - Worker[] workers = new Worker[clientsCount]; - for ( int i = 0; i < clientsCount; ++i ) - { - workers[i] = new Worker(barrier, client, requestsCount, sessionCookie, url); - executor.execute( workers[i] ); - } - // Wait for all workers to be ready - barrier.await(); - long start = System.nanoTime(); - - // Wait for all workers to be done - barrier.await(); - long end = System.nanoTime(); - long elapsed = TimeUnit.NANOSECONDS.toMillis( end - start ); - System.out.println( "elapsed ms: " + elapsed ); - - executor.shutdownNow(); - - // Perform one request to get the result - Request request = client.newRequest( url + "?action=result" ); - request.header("Cookie", sessionCookie); - ContentResponse response2 = request.send(); - assertEquals(HttpServletResponse.SC_OK,response2.getStatus()); - String response = response2.getContentAsString(); - System.out.println( "get = " + response ); - assertEquals(response.trim(), String.valueOf( clientsCount * requestsCount ) ); - } - finally - { - client.stop(); + workers[i] = new Worker(barrier, client, requestsCount, sessionCookie, url); + executor.execute( workers[i] ); } + // Wait for all workers to be ready + barrier.await(); + long start = System.nanoTime(); + + // Wait for all workers to be done + barrier.await(); + long end = System.nanoTime(); + long elapsed = TimeUnit.NANOSECONDS.toMillis( end - start ); + System.err.println("Elapsed ms:"+elapsed); + executor.shutdownNow(); + + // Perform one request to get the result + Request request = client.newRequest( url + "?action=result" ); + request.header("Cookie", sessionCookie); + ContentResponse response2 = request.send(); + assertEquals(HttpServletResponse.SC_OK,response2.getStatus()); + String response = response2.getContentAsString(); + assertEquals(response.trim(), String.valueOf( clientsCount * requestsCount ) ); } finally { - server1.stop(); + client.stop(); } } + finally + { + server1.stop(); + } } public static class Worker implements Runnable { public static int COUNT = 0; - + private final HttpClient client; private final CyclicBarrier barrier; diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionEvictionFailureTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionEvictionFailureTest.java similarity index 80% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionEvictionFailureTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionEvictionFailureTest.java index f3bbd17b7db..d21b9493af2 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionEvictionFailureTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionEvictionFailureTest.java @@ -45,25 +45,26 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.junit.Test; /** - * AbstractSessionEvictionFailureTest + * SessionEvictionFailureTest * * */ -public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBase +public class SessionEvictionFailureTest { /** - * TestSessionDataStore + * MockSessionDataStore * * */ - public static class TestSessionDataStore extends AbstractSessionDataStore + public static class MockSessionDataStore extends AbstractSessionDataStore { - public boolean _nextResult; + public boolean[] _nextStoreResult; + public int i = 0; - public void setNextResult (boolean goodOrBad) + public MockSessionDataStore (boolean[] results) { - _nextResult = goodOrBad; + _nextStoreResult = results; } /** @@ -108,15 +109,10 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas @Override public void doStore(String id, SessionData data, long lastSaveTime) throws Exception { - if (!_nextResult) + if (_nextStoreResult != null && !_nextStoreResult[i++]) { - System.err.println("Throwing exception on store!"); - throw new IllegalStateException("Testing store"); } - else - System.err.println("Storing"); - } /** @@ -130,6 +126,32 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas } + /** + * MockSessionDataStoreFactory + * + * + */ + public static class MockSessionDataStoreFactory extends AbstractSessionDataStoreFactory + { + public boolean[] _nextStoreResults; + + public void setNextStoreResults(boolean[] storeResults) + { + _nextStoreResults = storeResults; + } + + /** + * @see org.eclipse.jetty.server.session.SessionDataStoreFactory#getSessionDataStore(org.eclipse.jetty.server.session.SessionHandler) + */ + @Override + public SessionDataStore getSessionDataStore(SessionHandler handler) throws Exception + { + return new MockSessionDataStore(_nextStoreResults); + } + + } + + /** * TestServlet @@ -174,7 +196,8 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas //just return; } } - + + @Test public void testEvictFailure () throws Exception @@ -184,10 +207,15 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas int inactivePeriod = 0; int scavengePeriod = 20; int evictionPeriod = 5; //evict after inactivity - AbstractTestServer server = createServer(0, inactivePeriod, scavengePeriod, evictionPeriod); + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(evictionPeriod); + SessionDataStoreFactory storeFactory = new MockSessionDataStoreFactory(); + + TestServer server = new TestServer (0, inactivePeriod, scavengePeriod, cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); context.getSessionHandler().getSessionCache().setSaveOnInactiveEviction(true); - TestSessionDataStore ds = new TestSessionDataStore(); + MockSessionDataStore ds = new MockSessionDataStore(new boolean[] {true, false, true, false, true}); context.getSessionHandler().getSessionCache().setSessionDataStore(ds); TestServlet servlet = new TestServlet(); @@ -205,7 +233,6 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas String url = "http://localhost:" + port1 + contextPath + servletMapping; // Create the session - ds.setNextResult(true); ContentResponse response = client.GET(url + "?action=init"); assertEquals(HttpServletResponse.SC_OK,response.getStatus()); String sessionCookie = response.getHeaders().get("Set-Cookie"); @@ -213,13 +240,10 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas // Mangle the cookie, replacing Path with $Path, etc. sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path="); - ds.setNextResult(false); - //Wait for the eviction period to expire - save on evict should fail but session //should remain in the cache - pause(evictionPeriod); + pause(evictionPeriod+(int)(evictionPeriod*0.5)); - ds.setNextResult(true); // Make another request to see if the session is still in the cache and can be used, //allow it to be saved this time @@ -228,14 +252,11 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas response = request.send(); assertEquals(HttpServletResponse.SC_OK,response.getStatus()); assertNull(response.getHeaders().get("Set-Cookie")); //check that the cookie wasn't reset - ds.setNextResult(false); - - System.err.println("Waiting again for session to expire"); + //Wait for the eviction period to expire again - pause(evictionPeriod); - - ds.setNextResult(true); + pause(evictionPeriod+(int)(evictionPeriod*0.5)); + request = client.newRequest(url + "?action=test"); request.header("Cookie", sessionCookie); @@ -252,5 +273,6 @@ public abstract class AbstractSessionEvictionFailureTest extends AbstractTestBas server.stop(); } } + } diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java similarity index 90% rename from tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java index 96cd9ffdc84..9baaea02fdc 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java +++ b/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionListenerTest.java @@ -45,7 +45,7 @@ import org.junit.Test; * * Test that the HttpSessionBindingListeners are called. */ -public class SessionListenerTest extends AbstractTestBase +public class SessionListenerTest { public static class MySessionBindingListener implements HttpSessionBindingListener, Serializable { @@ -70,12 +70,7 @@ public class SessionListenerTest extends AbstractTestBase public boolean getBar() { return bar;}; } - - @Override - public AbstractTestServer createServer(int port, int max, int scavenge, int evictionPolicy) throws Exception - { - return new HashTestServer(port,max,scavenge,evictionPolicy); - } + @Test public void testListener() throws Exception @@ -83,13 +78,19 @@ public class SessionListenerTest extends AbstractTestBase String contextPath = ""; String servletMapping = "/server"; int inactivePeriod = 6; - int scavengePeriod = 3; - AbstractTestServer server = createServer(0, inactivePeriod, scavengePeriod, SessionCache.NEVER_EVICT); + int scavengePeriod = -1; + + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod); + + TestServer server = new TestServer(0, inactivePeriod, scavengePeriod, + cacheFactory, storeFactory); ServletContextHandler context = server.addContext(contextPath); TestServlet servlet = new TestServlet(); ServletHolder holder = new ServletHolder(servlet); context.addServlet(holder, servletMapping); - try { 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/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java similarity index 69% rename from tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractSessionRenewTest.java rename to tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java index 0b679e1a10f..ed2909130f2 100644 --- 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/test/java/org/eclipse/jetty/server/session/SessionRenewTest.java @@ -39,30 +39,76 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.webapp.WebAppContext; +import org.junit.Test; /** - * AbstractSessionRenewTest + * SessionRenewTest * * Test that changes the session id during a request. */ -public abstract class AbstractSessionRenewTest extends AbstractTestBase +public class SessionRenewTest { - protected AbstractTestServer _server; + protected TestServer _server; + + - - public abstract boolean verifyChange (WebAppContext context, String oldSessionId, String newSessionId); /** + * Tests renewing a session id when sessions are not being cached. * @throws Exception */ - public void testSessionRenewal() throws Exception + @Test + public void testSessionRenewalNullCache() throws Exception + { + SessionCacheFactory cacheFactory = new NullSessionCacheFactory(); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + //make the server with a NullSessionCache + _server = new TestServer(0, -1, -1, cacheFactory, storeFactory); + doTest(new RenewalVerifier()); + } + + + /** + * Test renewing session id when sessions are cached + * @throws Exception + */ + @Test + public void testSessionRenewalDefaultCache() throws Exception + { + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory(); + cacheFactory.setEvictionPolicy(SessionCache.NEVER_EVICT); + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory(); + + _server = new TestServer(0, -1, -1, cacheFactory, storeFactory); + + doTest(new RenewalVerifier() { + + @Override + public void verify(WebAppContext context, String oldSessionId, String newSessionId) + throws Exception + { + //verify the contents of the cache changed + assertTrue(context.getSessionHandler().getSessionCache().contains(newSessionId)); + assertFalse(context.getSessionHandler().getSessionCache().contains(oldSessionId)); + super.verify(context, oldSessionId, newSessionId); + } + + }); + } + + + /** + * Perform the test by making a request to create a session + * then another request that will renew the session id. + * @param verifier the class that verifies the session id changes in cache/store + * @throws Exception + */ + public void doTest(RenewalVerifier verifier) throws Exception { String contextPath = ""; String servletMapping = "/server"; - int maxInactive = 1; - int scavengePeriod = 3; - _server = createServer(0, maxInactive, scavengePeriod, SessionCache.NEVER_EVICT); WebAppContext context = _server.addWebAppContext(".", contextPath); context.setParentLoaderPriority(true); context.addServlet(TestServlet.class, servletMapping); @@ -97,8 +143,9 @@ public abstract class AbstractSessionRenewTest extends AbstractTestBase assertNotNull(renewSessionCookie); assertNotSame(sessionCookie, renewSessionCookie); assertTrue(testListener.isCalled()); - - assertTrue(verifyChange(context, AbstractTestServer.extractSessionId(sessionCookie), AbstractTestServer.extractSessionId(renewSessionCookie))); + + if (verifier != null) + verifier.verify(context, TestServer.extractSessionId(sessionCookie), TestServer.extractSessionId(renewSessionCookie)); } finally { @@ -107,8 +154,29 @@ public abstract class AbstractSessionRenewTest extends AbstractTestBase } } + + + + + /** + * RenewalVerifier + * + * + */ + public class RenewalVerifier + { + public void verify(WebAppContext context, String oldSessionId, String newSessionId) + throws Exception + { + //verify that the session id changed in the session store + TestSessionDataStore store = (TestSessionDataStore)context.getSessionHandler().getSessionCache().getSessionDataStore(); + assertTrue(store.exists(newSessionId)); + assertFalse(store.exists(oldSessionId)); + } + } + public static class TestHttpSessionIdListener implements HttpSessionIdListener { boolean called = false;