Lines 16-26
Link Here
|
16 |
*/ |
16 |
*/ |
17 |
package org.apache.catalina.session; |
17 |
package org.apache.catalina.session; |
18 |
|
18 |
|
|
|
19 |
import java.util.concurrent.atomic.AtomicInteger; |
20 |
|
21 |
import javax.servlet.http.HttpServletRequest; |
22 |
import javax.servlet.http.HttpSessionEvent; |
23 |
import javax.servlet.http.HttpSessionListener; |
24 |
|
25 |
import org.easymock.EasyMock; |
26 |
import org.easymock.IAnswer; |
19 |
import org.junit.Assert; |
27 |
import org.junit.Assert; |
20 |
import org.junit.Test; |
28 |
import org.junit.Test; |
21 |
|
29 |
|
22 |
import org.apache.catalina.Context; |
30 |
import org.apache.catalina.Context; |
23 |
import org.apache.catalina.Host; |
31 |
import org.apache.catalina.Host; |
|
|
32 |
import org.apache.catalina.Manager; |
33 |
import org.apache.catalina.Session; |
34 |
import org.apache.catalina.Store; |
35 |
import org.apache.catalina.connector.Connector; |
36 |
import org.apache.catalina.connector.Request; |
37 |
import org.apache.catalina.connector.RequestFacade; |
24 |
import org.apache.tomcat.unittest.TesterContext; |
38 |
import org.apache.tomcat.unittest.TesterContext; |
25 |
import org.apache.tomcat.unittest.TesterHost; |
39 |
import org.apache.tomcat.unittest.TesterHost; |
26 |
|
40 |
|
Lines 49-59
public class TestPersistentManager {
Link Here
|
49 |
// Given the minIdleSwap settings, this should swap one out to get below |
63 |
// Given the minIdleSwap settings, this should swap one out to get below |
50 |
// the limit |
64 |
// the limit |
51 |
manager.processPersistenceChecks(); |
65 |
manager.processPersistenceChecks(); |
52 |
Assert.assertEquals(1, manager.getActiveSessions()); |
66 |
Assert.assertEquals(1, manager.getActiveSessions()); |
53 |
Assert.assertEquals(2, manager.getActiveSessionsFull()); |
67 |
Assert.assertEquals(2, manager.getActiveSessionsFull()); |
54 |
|
68 |
|
55 |
manager.createSession(null); |
69 |
manager.createSession(null); |
56 |
Assert.assertEquals(2, manager.getActiveSessions()); |
70 |
Assert.assertEquals(2, manager.getActiveSessions()); |
57 |
Assert.assertEquals(3, manager.getActiveSessionsFull()); |
71 |
Assert.assertEquals(3, manager.getActiveSessionsFull()); |
|
|
72 |
} |
73 |
|
74 |
@Test |
75 |
public void testBug62175() throws Exception { |
76 |
PersistentManager manager = new PersistentManager(); |
77 |
AtomicInteger sessionExpireCounter = new AtomicInteger(); |
78 |
|
79 |
Store mockStore = EasyMock.createNiceMock(Store.class); |
80 |
EasyMock.expect(mockStore.load(EasyMock.anyString())).andAnswer(new IAnswer<Session>() { |
81 |
|
82 |
@Override |
83 |
public Session answer() throws Throwable { |
84 |
return timedOutSession(manager, sessionExpireCounter); |
85 |
} |
86 |
}).anyTimes(); |
87 |
|
88 |
EasyMock.replay(mockStore); |
89 |
|
90 |
manager.setStore(mockStore); |
91 |
|
92 |
Host host = new TesterHost(); |
93 |
|
94 |
RequestCachingSessionListener requestCachingSessionListener = new RequestCachingSessionListener(); |
95 |
|
96 |
Context context = new TesterContext() { |
97 |
|
98 |
@Override |
99 |
public Object[] getApplicationLifecycleListeners() { |
100 |
return new Object[] { requestCachingSessionListener }; |
101 |
} |
102 |
|
103 |
@Override |
104 |
public Manager getManager() { |
105 |
return manager; |
106 |
} |
107 |
}; |
108 |
context.setParent(host); |
109 |
|
110 |
Connector connector = EasyMock.createNiceMock(Connector.class); |
111 |
Request req = new Request(connector) { |
112 |
@Override |
113 |
public Context getContext() { |
114 |
return context; |
115 |
} |
116 |
}; |
117 |
req.setRequestedSessionId("invalidSession"); |
118 |
HttpServletRequest request = new RequestFacade(req); |
119 |
EasyMock.replay(connector); |
120 |
requestCachingSessionListener.request = request; |
121 |
|
122 |
manager.setContext(context); |
123 |
|
124 |
manager.start(); |
125 |
|
126 |
Assert.assertNull(request.getSession(false)); |
127 |
Assert.assertEquals(1, sessionExpireCounter.get()); |
128 |
|
129 |
} |
130 |
|
131 |
private static class RequestCachingSessionListener implements HttpSessionListener { |
132 |
|
133 |
private HttpServletRequest request; |
134 |
|
135 |
@Override |
136 |
public void sessionDestroyed(HttpSessionEvent se) { |
137 |
request.getSession(false); |
138 |
} |
139 |
} |
140 |
|
141 |
private StandardSession timedOutSession(PersistentManager manager, AtomicInteger counter) { |
142 |
StandardSession timedOutSession = new StandardSession(manager) { |
143 |
private static final long serialVersionUID = -5910605558747844210L; |
144 |
|
145 |
@Override |
146 |
public void expire() { |
147 |
counter.incrementAndGet(); |
148 |
super.expire(); |
149 |
} |
150 |
}; |
151 |
timedOutSession.isValid = true; |
152 |
timedOutSession.expiring = false; |
153 |
timedOutSession.maxInactiveInterval = 1; |
154 |
timedOutSession.lastAccessedTime = 0; |
155 |
timedOutSession.id = "invalidSession"; |
156 |
return timedOutSession; |
58 |
} |
157 |
} |
59 |
} |
158 |
} |
60 |
- |
159 |
|