This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new d5755ed94c Add SSL session tracking test
d5755ed94c is described below
commit d5755ed94caeb16863af57348fb137fdb077ecea
Author: remm <[email protected]>
AuthorDate: Wed Oct 2 17:20:23 2024 +0200
Add SSL session tracking test
---
test/org/apache/tomcat/util/net/TestSsl.java | 59 ++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/test/org/apache/tomcat/util/net/TestSsl.java
b/test/org/apache/tomcat/util/net/TestSsl.java
index 736f1e1072..004765b3d5 100644
--- a/test/org/apache/tomcat/util/net/TestSsl.java
+++ b/test/org/apache/tomcat/util/net/TestSsl.java
@@ -26,6 +26,7 @@ import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.EnumSet;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
@@ -38,6 +39,7 @@ import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import jakarta.servlet.ServletException;
+import jakarta.servlet.SessionTrackingMode;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -49,11 +51,17 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.apache.catalina.Context;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
import org.apache.catalina.Wrapper;
import org.apache.catalina.connector.Connector;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
import org.apache.catalina.startup.TesterServlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.catalina.valves.ValveBase;
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.websocket.server.WsContextListener;
@@ -117,6 +125,37 @@ public class TestSsl extends TomcatBaseTest {
}
+ private String sessionId = null;
+
+ @Test
+ public void testSSLSessionTracking() throws Exception {
+ TesterSupport.configureClientSsl();
+
+ Tomcat tomcat = getTomcatInstance();
+ tomcat.getEngine().getPipeline().addValve(new VerificationValve());
+
+ File appDir = new File(getBuildDirectory(), "webapps/examples");
+ Context ctxt = tomcat.addWebapp(null, "/examples",
appDir.getAbsolutePath());
+ ctxt.addLifecycleListener(new SSLSessionTrackingLifecycleListener());
+ ctxt.addApplicationListener(WsContextListener.class.getName());
+
+ ctxt = getProgrammaticRootContext();
+ Tomcat.addServlet(ctxt, "post", new SimplePostServlet());
+ ctxt.addServletMappingDecoded("/post", "post");
+
+ TesterSupport.initSsl(tomcat);
+ TesterSupport.configureSSLImplementation(tomcat,
sslImplementationName, useOpenSSL);
+
+ tomcat.start();
+ getUrl("https://localhost:" + getPort() +
"/examples/servlets/servlet/HelloWorldExample");
+ // SSL is the only source for the requested session ID, and
SessionTrackingMode.SSL is set on examples
+ Assert.assertNotNull(sessionId);
+ Assert.assertTrue(sessionId.length() > 1);
+ // No SessionTrackingMode.SSL on the root webapp
+ getUrl("https://localhost:" + getPort() + "/post");
+ Assert.assertNull(sessionId);
+ }
+
@Test
public void testPost() throws Exception {
SocketFactory socketFactory = TesterSupport.configureClientSsl();
@@ -379,4 +418,24 @@ public class TestSsl extends TomcatBaseTest {
}
}
+
+ public static class SSLSessionTrackingLifecycleListener implements
LifecycleListener {
+ @Override
+ public void lifecycleEvent(LifecycleEvent event) {
+ if (Lifecycle.BEFORE_START_EVENT.equals(event.getType())) {
+ if (!(event.getLifecycle() instanceof Context)) {
+ throw new IllegalArgumentException("Not Context");
+ }
+ Context context = (Context) event.getLifecycle();
+
context.getServletContext().setSessionTrackingModes(EnumSet.of(SessionTrackingMode.SSL));
+ }
+ }
+ }
+
+ public class VerificationValve extends ValveBase {
+ @Override
+ public void invoke(Request request, Response response) throws
IOException, ServletException {
+ sessionId = request.getRequestedSessionId();
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]