01: /*
02: * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
03: * notice. All rights reserved.
04: */
05: package com.tctest.server.appserver.unit;
06:
07: import com.meterware.httpunit.WebConversation;
08: import com.tc.test.server.appserver.AppServerFactory;
09: import com.tc.test.server.appserver.deployment.AbstractTwoServerDeploymentTest;
10: import com.tc.test.server.appserver.deployment.DeploymentBuilder;
11: import com.tc.test.server.appserver.deployment.WebApplicationServer;
12: import com.tc.test.server.util.TcConfigBuilder;
13: import com.tctest.webapp.servlets.SessionIDIntegrityTestServlet;
14:
15: import java.util.regex.Pattern;
16:
17: import junit.framework.Test;
18:
19: /**
20: * Test to make sure session id is preserved with Terracotta
21: */
22: public class SessionIDIntegrityTest extends
23: AbstractTwoServerDeploymentTest {
24: private static final String CONTEXT = "SessionIDIntegrityTest";
25: private static final String MAPPING = "SessionIDIntegrityTestServlet";
26:
27: public static Test suite() {
28: return new SessionIDIntegrityTestSetup();
29: }
30:
31: public final void testSessionId() throws Exception {
32: WebConversation wc = new WebConversation();
33:
34: assertEquals("OK", request(server0, "cmd=insert", wc));
35:
36: String server0_session_id = wc.getCookieValue("JSESSIONID");
37: System.out.println("Server0 session id: " + server0_session_id);
38: assertSessionIdIntegrity(server0_session_id, "server_0");
39:
40: assertEquals("OK", request(server1, "cmd=query", wc));
41:
42: String server1_session_id = wc.getCookieValue("JSESSIONID");
43: System.out.println("Server1 session id: " + server1_session_id);
44: assertSessionIdIntegrity(server1_session_id, "server_1");
45: }
46:
47: private void assertSessionIdIntegrity(String sessionId,
48: String extra_id) {
49: int appId = AppServerFactory.getCurrentAppServerId();
50:
51: switch (appId) {
52: case AppServerFactory.TOMCAT:
53: case AppServerFactory.WASCE:
54: case AppServerFactory.JBOSS:
55: assertTrue(sessionId.endsWith("." + extra_id));
56: break;
57: case AppServerFactory.WEBLOGIC:
58: assertTrue(Pattern.matches("\\S+!-?\\d+", sessionId));
59: break;
60: case AppServerFactory.WEBSPHERE:
61: assertTrue(Pattern.matches("0000\\S+:\\S+", sessionId));
62: break;
63: default:
64: throw new RuntimeException("Appserver id [" + appId
65: + "] is missing in this test");
66: }
67: }
68:
69: private String request(WebApplicationServer server, String params,
70: WebConversation wc) throws Exception {
71: return server.ping(
72: "/" + CONTEXT + "/" + MAPPING + "?" + params, wc)
73: .getText().trim();
74: }
75:
76: private static class SessionIDIntegrityTestSetup extends
77: TwoServerTestSetup {
78: public SessionIDIntegrityTestSetup() {
79: super (SessionIDIntegrityTest.class, CONTEXT);
80: }
81:
82: protected void configureWar(DeploymentBuilder builder) {
83: builder.addServlet(MAPPING, "/" + MAPPING + "/*",
84: SessionIDIntegrityTestServlet.class, null, false);
85: }
86:
87: protected void configureTcConfig(TcConfigBuilder clientConfig) {
88: clientConfig.addWebApplication(CONTEXT);
89: }
90: }
91: }
|