#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='[email protected]')

     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 [email protected].
To post to this group, send email to [email protected].
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.

Reply via email to