#24223 closed Cleanup/optimization (fixed)
SessionMiddleware tests leaving Session objects in database
Reported by: | Matt Leach | Owned by: | Matt Leach |
---|---|---|---|
Component: | contrib.sessions | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Simon Charette | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Currently with default settings several tests in contrib.sessions.SessionMiddlewareTests leave Session objects remaining in the database.
This can be seen by adding a tearDown method:
class SessionMiddlewareTests(unittest.TestCase): def tearDown(self): print "Session count:", len(Session.objects.all())
This results in the following output:
$ ./manage.py test django.contrib.sessions.tests.SessionMiddlewareTests -v 3 ... test_httponly_session_cookie (django.contrib.sessions.tests.SessionMiddlewareTests) ... Session count: 1 ok test_no_httponly_session_cookie (django.contrib.sessions.tests.SessionMiddlewareTests) ... Session count: 2 ok test_secure_session_cookie (django.contrib.sessions.tests.SessionMiddlewareTests) ... Session count: 3 ok test_session_delete_on_end (django.contrib.sessions.tests.SessionMiddlewareTests) ... Session count: 3 ok test_session_save_on_500 (django.contrib.sessions.tests.SessionMiddlewareTests) ... Session count: 4 ok ---------------------------------------------------------------------- Ran 5 tests in 0.011s OK
Currently this does not result in failing tests when the test suite is run but it could lead to issues with tests such as contrib.sessions.DatabaseSessionTests.test_clearsessions_command:
class DatabaseSessionTests(SessionTestsMixin, TestCase): backend = DatabaseSession ... @override_settings(SESSION_ENGINE="django.contrib.sessions.backends.db") def test_clearsessions_command(self): """ Test clearsessions command for clearing expired sessions. """ self.assertEqual(0, Session.objects.count())
which would fail if run immediately after the SessionMiddleware tests.
I would suggest changing the SessionMiddlewareTests class to inherit from django.test.TestCase rather than unittest.TestCase which will ensure the database is flushed after the tests run.
Change History (6)
comment:1 by , 10 years ago
Cc: | added |
---|---|
Component: | Uncategorized → contrib.sessions |
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 10 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:4 by , 10 years ago
Has patch: | set |
---|
comment:5 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
This change makes sense to me, can you open a PR with the required change?