View | Details | Raw Unified | Return to bug 62175
Collapse All | Expand All

(-)a/test/org/apache/catalina/session/TestPersistentManager.java (-5 / +104 lines)
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

Return to bug 62175