Author: russellm
Date: 2010-03-19 00:43:32 -0500 (Fri, 19 Mar 2010)
New Revision: 12807
Added:
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/session.py
Modified:
django/branches/releases/1.1.X/django/test/client.py
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/models.py
Log:
[1.1.X] Fixed #13152 -- Ensure the test client saves the session before writing
the session key to the cookie, in case the session engine changes the session
key.
Backport of r12806 from trunk.
Modified: django/branches/releases/1.1.X/django/test/client.py
===================================================================
--- django/branches/releases/1.1.X/django/test/client.py 2010-03-19
05:42:13 UTC (rev 12806)
+++ django/branches/releases/1.1.X/django/test/client.py 2010-03-19
05:43:32 UTC (rev 12807)
@@ -423,6 +423,9 @@
request.session = engine.SessionStore()
login(request, user)
+ # Save the session values.
+ request.session.save()
+
# Set the cookie to represent the session.
session_cookie = settings.SESSION_COOKIE_NAME
self.cookies[session_cookie] = request.session.session_key
@@ -435,9 +438,6 @@
}
self.cookies[session_cookie].update(cookie_data)
- # Save the session values.
- request.session.save()
-
return True
else:
return False
Modified:
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/models.py
===================================================================
---
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/models.py
2010-03-19 05:42:13 UTC (rev 12806)
+++
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/models.py
2010-03-19 05:43:32 UTC (rev 12807)
@@ -385,6 +385,27 @@
# default client.
self.assertRedirects(response,
"http://testserver/test_client_regress/get_view/")
+
+class SessionEngineTests(TestCase):
+ fixtures = ['testdata']
+
+ def setUp(self):
+ self.old_SESSION_ENGINE = settings.SESSION_ENGINE
+ settings.SESSION_ENGINE = 'regressiontests.test_client_regress.session'
+
+ def tearDown(self):
+ settings.SESSION_ENGINE = self.old_SESSION_ENGINE
+
+ def test_login(self):
+ "A session engine that modifies the session key can be used to log in"
+ login = self.client.login(username='testclient', password='password')
+ self.failUnless(login, 'Could not log in')
+
+ # Try to access a login protected page.
+ response = self.client.get("/test_client/login_protected_view/")
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.context['user'].username, 'testclient')
+
class URLEscapingTests(TestCase):
def test_simple_argument_get(self):
"Get a view that has a simple string argument"
Added:
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/session.py
===================================================================
---
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/session.py
(rev 0)
+++
django/branches/releases/1.1.X/tests/regressiontests/test_client_regress/session.py
2010-03-19 05:43:32 UTC (rev 12807)
@@ -0,0 +1,30 @@
+from django.contrib.sessions.backends.base import SessionBase
+
+class SessionStore(SessionBase):
+ """
+ A simple cookie-based session storage implemenation.
+
+ The session key is actually the session data, pickled and encoded.
+ This means that saving the session will change the session key.
+ """
+ def __init__(self, session_key=None):
+ super(SessionStore, self).__init__(session_key)
+
+ def exists(self, session_key):
+ return False
+
+ def create(self):
+ self.session_key = self.encode({})
+
+ def save(self, must_create=False):
+ self.session_key = self.encode(self._session)
+
+ def delete(self, session_key=None):
+ self.session_key = self.encode({})
+
+ def load(self):
+ try:
+ return self.decode(self.session_key)
+ except:
+ self.modified = True
+ return {}
\ No newline at end of file
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.