@BeforeMethod public void setup() throws LifecycleException, ClassNotFoundException, IOException { _manager = mock( SessionManager.class ); final Context context = new StandardContext(); when( _manager.getContext() ).thenReturn( context ); // needed for createSession // Manager.getContainer no longer available in tc 8.5+ if(_managerHasGetContainer) { when( _manager.getContainer() ).thenReturn( context ); } when( _manager.newMemcachedBackupSession() ).thenAnswer(new Answer<MemcachedBackupSession>() { @Override public MemcachedBackupSession answer(final InvocationOnMock invocation) throws Throwable { return newMemcachedBackupSession( _manager ); } }); final MemcachedSessionService service = new DummyMemcachedSessionService<SessionManager>( _manager ); when( _manager.createSession( anyString() ) ).thenAnswer(new Answer<MemcachedBackupSession>() { @Override public MemcachedBackupSession answer(final InvocationOnMock invocation) throws Throwable { return createSession(service); } }); when( _manager.readPrincipal( (ObjectInputStream)any() ) ).thenReturn( createPrincipal() ); when( _manager.getMemcachedSessionService() ).thenReturn( service ); when( _manager.willAttributeDistribute(anyString(), any())).thenReturn(true); }
@Test public void testVersionUpgrade() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); final byte[] data = TranscoderService.serializeSessionFields( session, TranscoderService.VERSION_1 ); final byte[] attributesData = TranscoderService.deserializeSessionFields(data, _manager ).getAttributesData(); // we just check that data is read (w/o) bounds issues and no data // is left (we just passed data in, w/o added attributesData appended) assertEquals(attributesData.length, 0); }
@Test public void testSerializeSessionFields() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); session.setLastBackupTime( System.currentTimeMillis() ); final byte[] data = TranscoderService.serializeSessionFields( session ); final MemcachedBackupSession deserialized = TranscoderService.deserializeSessionFields(data, _manager ).getSession(); assertSessionFields( session, deserialized ); }
/** * Test for issue #49: * Sessions not associated with a memcached node don't get associated as soon as a memcached is available * @throws InterruptedException * @throws IOException * @throws TimeoutException * @throws ExecutionException */ @Test( enabled = true ) public void testNotAssociatedSessionGetsAssociatedIssue49() throws InterruptedException, IOException, ExecutionException, TimeoutException { _daemon.stop(); final SessionManager manager = _tomcat1.getManager(); manager.setMaxInactiveInterval( 5 ); manager.setSticky( true ); final SessionIdFormat sessionIdFormat = new SessionIdFormat(); final Session session = manager.createSession( null ); assertNull( sessionIdFormat.extractMemcachedId( session.getId() ) ); _daemon.start(); // Wait so that the daemon will be available and the client can reconnect (async get didn't do the trick) waitForReconnect(manager.getMemcachedSessionService().getStorageClient(), 1, 4000); final String newSessionId = manager.getMemcachedSessionService().changeSessionIdOnMemcachedFailover( session.getId() ); assertNotNull( newSessionId ); assertEquals( newSessionId, session.getId() ); assertEquals( sessionIdFormat.extractMemcachedId( newSessionId ), _memcachedNodeId ); }
@Test public void testSerializeSessionFieldsIncludesFormPrincipalNote() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); final Principal saved = createPrincipal(); session.setNote(Constants.FORM_PRINCIPAL_NOTE, saved); final byte[] data = TranscoderService.serializeSessionFields( session ); final MemcachedBackupSession deserialized = TranscoderService.deserializeSessionFields(data, _manager ).getSession(); final Principal actual = (Principal) deserialized.getNote(Constants.FORM_PRINCIPAL_NOTE); assertNotNull(actual); assertDeepEquals(actual, saved); }
@Test public void testSerializeSessionFieldsIncludesFormRequestNote() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); final SavedRequest saved = new SavedRequest(); saved.setQueryString("foo=bar"); saved.setRequestURI("http://www.foo.org"); session.setNote(Constants.FORM_REQUEST_NOTE, saved); final byte[] data = TranscoderService.serializeSessionFields( session ); final MemcachedBackupSession deserialized = TranscoderService.deserializeSessionFields(data, _manager ).getSession(); final SavedRequest actual = (SavedRequest) deserialized.getNote(Constants.FORM_REQUEST_NOTE); assertNotNull(actual); assertDeepEquals(actual, saved); }
@Test public void testSerializeSessionWithAttributes() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); final TranscoderService transcoderService = new TranscoderService( new JavaSerializationTranscoder( _manager ) ); final String value = "bar"; session.setAttribute( "foo", value ); session.setLastBackupTime( System.currentTimeMillis() ); final byte[] data = transcoderService.serialize( session ); final MemcachedBackupSession deserialized = transcoderService.deserialize( data, _manager ); assertSessionFields( session, deserialized ); Assert.assertEquals( value, deserialized.getAttribute( "foo" ) ); }
@Test public void testSerializeSessionWithoutAttributes() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); session.setLastBackupTime( System.currentTimeMillis() ); final TranscoderService transcoderService = new TranscoderService( new JavaSerializationTranscoder( _manager ) ); final byte[] data = transcoderService.serialize( session ); final MemcachedBackupSession deserialized = transcoderService.deserialize( data, _manager ); assertSessionFields( session, deserialized ); }
@Test public void testSerializeSessionFieldsWithAuthenticatedPrincipal() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); session.setAuthType( HttpServletRequest.FORM_AUTH ); session.setPrincipal( createPrincipal() ); session.setLastBackupTime( System.currentTimeMillis() ); final byte[] data = TranscoderService.serializeSessionFields( session ); final MemcachedBackupSession deserialized = TranscoderService.deserializeSessionFields( data, _manager ).getSession(); assertSessionFields( session, deserialized ); }