#29238: psycopg2.InterfaceError in sequential tests after HTTP 404 ---------------------------------------------+------------------------ Reporter: alubbock | Owner: nobody Type: Bug | Status: new Component: Testing framework | Version: 1.11 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | ---------------------------------------------+------------------------ I'm getting a curious error, where if I have two test methods, one using a force_login after a test with an HTTP 404, the second one fails. I've added a minimal reproducible example below. If the first method instead returns an HTTP 200, no error arises. If I use SQLite instead of Postgres, no error arises.
I'm using a custom user model with the custom_user package, with email instead of username, in case that's relevant. Key package versions: django 1.11.10, python 3.6.4, postgres 9.6, custom_user 0.7, django allauth 0.35.0 {{{ from django.test import TestCase from django.contrib.auth import get_user_model class TestViews(TestCase): @classmethod def setUpTestData(cls): cls.user = get_user_model().objects.create(email='t...@example.com') def test_404(self): resp = self.client.get('_non_existent_URL') self.assertEquals(resp.status_code, 404) def test_login(self): # fails with postgres self.client.force_login(self.user) }}} Here's the traceback: {{{ Traceback (most recent call last): File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/base/base.py", line 231, in _cursor return self._prepare_cursor(self.create_cursor(name)) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/postgresql/base.py", line 220, in create_cursor cursor = self.connection.cursor() psycopg2.InterfaceError: connection already closed The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/alex/git/VU/myproj-web/myprojweb/tests/test_logins.py", line 16, in test_login self.client.force_login(self.user) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/test/client.py", line 645, in force_login self._login(user, backend) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/test/client.py", line 654, in _login if self.session: File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/test/client.py", line 459, in session session.save() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/contrib/sessions/backends/db.py", line 81, in save return self.create() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/contrib/sessions/backends/db.py", line 50, in create self._session_key = self._get_new_session_key() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/contrib/sessions/backends/base.py", line 164, in _get_new_session_key if not self.exists(session_key): File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/contrib/sessions/backends/db.py", line 46, in exists return self.model.objects.filter(session_key=session_key).exists() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/models/query.py", line 670, in exists return self.query.has_results(using=self.db) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/models/sql/query.py", line 517, in has_results return compiler.has_results() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/models/sql/compiler.py", line 858, in has_results return bool(self.execute_sql(SINGLE)) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/models/sql/compiler.py", line 887, in execute_sql cursor = self.connection.cursor() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/base/base.py", line 254, in cursor return self._cursor() File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/base/base.py", line 231, in _cursor return self._prepare_cursor(self.create_cursor(name)) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/utils.py", line 94, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/base/base.py", line 231, in _cursor return self._prepare_cursor(self.create_cursor(name)) File "/Users/alex/miniconda3/envs/myproj/lib/python3.6/site- packages/django/db/backends/postgresql/base.py", line 220, in create_cursor cursor = self.connection.cursor() django.db.utils.InterfaceError: connection already closed }}} -- Ticket URL: <https://code.djangoproject.com/ticket/29238> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/051.1888d33a270fda349c10237ce924e2f1%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.