| # -*- coding: utf-8 -*- |
| import webapp2 |
| from webapp2_extras import sessions |
| |
| import test_base |
| |
| app = webapp2.WSGIApplication(config={ |
| 'webapp2_extras.sessions': { |
| 'secret_key': 'my-super-secret', |
| }, |
| }) |
| |
| |
| class TestSecureCookieSession(test_base.BaseTestCase): |
| factory = sessions.SecureCookieSessionFactory |
| |
| def test_config(self): |
| app = webapp2.WSGIApplication() |
| req = webapp2.Request.blank('/') |
| req.app = app |
| self.assertRaises(Exception, sessions.SessionStore, req) |
| |
| # Just to set a special config. |
| app = webapp2.WSGIApplication() |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req, config={ |
| 'secret_key': 'my-super-secret', |
| 'cookie_name': 'foo' |
| }) |
| session = store.get_session(factory=self.factory) |
| session['bar'] = 'bar' |
| rsp = webapp2.Response() |
| store.save_sessions(rsp) |
| self.assertTrue(rsp.headers['Set-Cookie'].startswith('foo=')) |
| |
| def test_get_save_session(self): |
| # Round 1 ------------------------------------------------------------- |
| |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| |
| rsp = webapp2.Response() |
| # Nothing changed, we want to test anyway. |
| store.save_sessions(rsp) |
| |
| session['a'] = 'b' |
| session['c'] = 'd' |
| session['e'] = 'f' |
| |
| store.save_sessions(rsp) |
| |
| # Round 2 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| self.assertEqual(session['a'], 'b') |
| self.assertEqual(session['c'], 'd') |
| self.assertEqual(session['e'], 'f') |
| |
| session['g'] = 'h' |
| |
| rsp = webapp2.Response() |
| store.save_sessions(rsp) |
| |
| # Round 3 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| self.assertEqual(session['a'], 'b') |
| self.assertEqual(session['c'], 'd') |
| self.assertEqual(session['e'], 'f') |
| self.assertEqual(session['g'], 'h') |
| |
| self.assertRaises(KeyError, session.pop, 'foo') |
| |
| def test_flashes(self): |
| |
| # Round 1 ------------------------------------------------------------- |
| |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, []) |
| session.add_flash('foo') |
| |
| rsp = webapp2.Response() |
| store.save_sessions(rsp) |
| |
| # Round 2 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, [[u'foo', None]]) |
| |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, []) |
| |
| session.add_flash('bar') |
| session.add_flash('baz', 'important') |
| |
| rsp = webapp2.Response() |
| store.save_sessions(rsp) |
| |
| # Round 3 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, [[u'bar', None], [u'baz', 'important']]) |
| |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, []) |
| |
| rsp = webapp2.Response() |
| store.save_sessions(rsp) |
| |
| # Round 4 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| session = store.get_session(factory=self.factory) |
| flashes = session.get_flashes() |
| self.assertEqual(flashes, []) |
| |
| def test_set_secure_cookie(self): |
| |
| rsp = webapp2.Response() |
| |
| # Round 1 ------------------------------------------------------------- |
| |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| store.set_secure_cookie('foo', {'bar': 'baz'}) |
| store.save_sessions(rsp) |
| |
| # Round 2 ------------------------------------------------------------- |
| |
| cookies = rsp.headers.get('Set-Cookie') |
| req = webapp2.Request.blank('/', headers=[('Cookie', cookies)]) |
| req.app = app |
| store = sessions.SessionStore(req) |
| res = store.get_secure_cookie('foo') |
| self.assertEqual(res, {'bar': 'baz'}) |
| |
| def test_set_session_store(self): |
| app = webapp2.WSGIApplication(config={ |
| 'webapp2_extras.sessions': { |
| 'secret_key': 'my-super-secret', |
| } |
| }) |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| self.assertEqual(len(req.registry), 0) |
| sessions.set_store(store, request=req) |
| self.assertEqual(len(req.registry), 1) |
| s = sessions.get_store(request=req) |
| self.assertTrue(isinstance(s, sessions.SessionStore)) |
| |
| def test_get_session_store(self): |
| app = webapp2.WSGIApplication(config={ |
| 'webapp2_extras.sessions': { |
| 'secret_key': 'my-super-secret', |
| } |
| }) |
| req = webapp2.Request.blank('/') |
| req.app = app |
| self.assertEqual(len(req.registry), 0) |
| s = sessions.get_store(request=req) |
| self.assertEqual(len(req.registry), 1) |
| self.assertTrue(isinstance(s, sessions.SessionStore)) |
| |
| def test_not_implemented(self): |
| req = webapp2.Request.blank('/') |
| req.app = app |
| store = sessions.SessionStore(req) |
| |
| f = sessions.BaseSessionFactory('foo', store) |
| self.assertRaises(NotImplementedError, f.get_session) |
| self.assertRaises(NotImplementedError, f.save_session, None) |
| |
| f = sessions.CustomBackendSessionFactory('foo', store) |
| self.assertRaises(NotImplementedError, f._get_by_sid, None) |
| |
| |
| if __name__ == '__main__': |
| test_base.main() |