1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.shiro.web.session;
20  
21  import static org.easymock.EasyMock.*;
22  import static org.junit.Assert.assertEquals;
23  
24  import javax.servlet.http.HttpSession;
25  
26  import org.easymock.Capture;
27  import org.junit.Before;
28  import org.junit.Test;
29  
30  public class HttpServletSessionTest {
31  
32      private HttpSession mockSession;
33  
34      @Before
35      public void setUp() throws Exception {
36          this.mockSession = createMock(HttpSession.class);
37      }
38  
39      /*
40       * Shiro-421
41       * Tests that the conversion of a httpSession timeout interval from seconds to milliseconds doesn't overflow.
42       * @since 1.3
43       */
44      @Test
45      public void testLongTimeout() throws Exception {
46          final int expectedTimeoutInSeconds = 30 * 24 * 60 * 60;  // 30 days.
47          final long expectedLongValue = expectedTimeoutInSeconds * 1000L;
48  
49          Capture<Integer> capturedInt = new Capture<Integer>();
50          // use a capture to make sure the setter is doing the right thing.
51          mockSession.setMaxInactiveInterval(captureInt(capturedInt));
52          expect(mockSession.getMaxInactiveInterval()).andReturn(expectedTimeoutInSeconds);
53          replay(mockSession);
54  
55          HttpServletSession servletSession = new HttpServletSession(mockSession, null);
56          servletSession.setTimeout(expectedLongValue);
57  
58          long timeoutInMilliseconds = servletSession.getTimeout();
59  
60          assertEquals(expectedLongValue, timeoutInMilliseconds);
61          assertEquals(expectedTimeoutInSeconds, capturedInt.getValue().intValue());
62      }
63  }