def test_retrieveSession(self): """ L{PersistentSessionWrapper.authenticatedUserForKey} returns the user to whom a session belongs. """ store = Store() resource = PersistentSessionWrapper(store, None) resource.createSessionForKey(b'key', b'username@domain') user = resource.authenticatedUserForKey(b'key') self.assertEqual(user, b'username@domain')
def test_createSession(self): """ L{PersistentSessionWrapper.createSessionForKey} creates a persistent session in the database for the given session ID. """ store = Store() resource = PersistentSessionWrapper(store, None) resource.createSessionForKey(b'key', b'username@domain') session = store.findUnique(PersistentSession) self.assertEqual(session.sessionKey, b'key') self.assertEqual(session.authenticatedAs, b'username@domain')
def test_removeSession(self): """ L{PersistentSessionWrapper.removeSessionWithKey} removes an existing session with the given key. """ store = Store() resource = PersistentSessionWrapper(store, None) resource.createSessionForKey(b'key', b'username@domain') self.assertEqual(store.query(PersistentSession).count(), 1) resource.removeSessionWithKey(b'key') self.assertEqual(store.query(PersistentSession).count(), 0)
def test_cleanOnStart(self): """ L{PersistentSessionWrapper} immediately cleans expired sessions on instantiation. """ store = Store() resource = PersistentSessionWrapper(store, None) resource.createSessionForKey(b'key', b'username@domain') ps = store.findUnique(PersistentSession) ps.lastUsed -= timedelta(seconds=PERSISTENT_SESSION_LIFETIME + 1) PersistentSessionWrapper(store, None) self.assertEqual(store.query(PersistentSession).count(), 0)
def test_logoutRemovesSession(self): """ Logging out explicitly removes your persistent session. """ store = Store() resource = PersistentSessionWrapper(store, None) session = GuardSession(resource, b'uid') resource.createSessionForKey(session.uid, b'username@domain') self.assertEqual(store.query(PersistentSession).count(), 1) resource.explicitLogout(session) self.assertEqual(store.query(PersistentSession).count(), 0)
def test_sessionCleanup(self): """ Expired sessions are cleaned up every C{sessionCleanFrequency} seconds. """ clock = Clock() store = Store() portal = Portal(_TrivialRealm()) portal.registerChecker(AllowAnonymousAccess(), IAnonymous) request = FakeRequest(headers={'host': 'example.com'}) resource = PersistentSessionWrapper( store, portal, domains=['example.org', 'example.com'], clock=clock) session = GuardSession(resource, b'uid') # Create two sessions resource.createSessionForKey(b'key1', b'username@domain') resource.createSessionForKey(b'key2', b'username@domain') self.assertEqual(store.query(PersistentSession).count(), 2) # Session shouldn't be cleaned yet resource.login(request, session, Anonymous(), ()) self.assertEqual(store.query(PersistentSession).count(), 2) # First session is expired and it's time for a clean ps = store.findUnique(PersistentSession, PersistentSession.sessionKey == b'key1') ps.lastUsed -= timedelta(seconds=PERSISTENT_SESSION_LIFETIME + 1) clock.advance(SESSION_CLEAN_FREQUENCY + 1) resource.login(request, session, Anonymous(), ()) self.assertEqual( list(store.query(PersistentSession).getColumn('sessionKey')), [b'key2']) # Now we expire the second session ps2 = store.findUnique(PersistentSession, PersistentSession.sessionKey == b'key2') ps2.lastUsed -= timedelta(seconds=PERSISTENT_SESSION_LIFETIME + 1) clock.advance(SESSION_CLEAN_FREQUENCY + 1) resource.login(request, session, Anonymous(), ()) self.assertEqual(store.query(PersistentSession).count(), 0)
def test_sessionCleanup(self): """ Expired sessions are cleaned up every C{sessionCleanFrequency} seconds. """ clock = Clock() store = Store() portal = Portal(_TrivialRealm()) portal.registerChecker(AllowAnonymousAccess(), IAnonymous) request = FakeRequest(headers={'host': 'example.com'}) resource = PersistentSessionWrapper( store, portal, domains=['example.org', 'example.com'], clock=clock) session = GuardSession(resource, b'uid') # Create two sessions resource.createSessionForKey(b'key1', b'username@domain') resource.createSessionForKey(b'key2', b'username@domain') self.assertEqual(store.query(PersistentSession).count(), 2) # Session shouldn't be cleaned yet resource.login(request, session, Anonymous(), ()) self.assertEqual(store.query(PersistentSession).count(), 2) # First session is expired and it's time for a clean ps = store.findUnique( PersistentSession, PersistentSession.sessionKey == b'key1') ps.lastUsed -= timedelta(seconds=PERSISTENT_SESSION_LIFETIME + 1) clock.advance(SESSION_CLEAN_FREQUENCY + 1) resource.login(request, session, Anonymous(), ()) self.assertEqual( list(store.query(PersistentSession).getColumn('sessionKey')), [b'key2']) # Now we expire the second session ps2 = store.findUnique( PersistentSession, PersistentSession.sessionKey == b'key2') ps2.lastUsed -= timedelta(seconds=PERSISTENT_SESSION_LIFETIME + 1) clock.advance(SESSION_CLEAN_FREQUENCY + 1) resource.login(request, session, Anonymous(), ()) self.assertEqual(store.query(PersistentSession).count(), 0)