Baffled by self.client.login(...) not working in unit tests

783 views
Skip to first unread message

adambossy

unread,
Apr 10, 2010, 1:41:02 AM4/10/10
to Django users
I have created users for my unit tests in two ways:

1) Create a fixture for "auth.user" that looks roughly like this:

{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "homer",
"is_active": 1,
"password":
"sha1$72cd3$4935449e2cd7efb8b3723fb9958fe3bb100a30f2",
...
}
}

I've left out the seemingly unimportant parts.

2) Use 'create_user' in the setUp function (although I'd rather keep
everything in my fixtures class):

def
setUp(self):
User.objects.create_user('homer', 'ho...@simpson.net',
'simpson')

Note that the password is simpson in both cases.

I've verified that this info is correctly being loaded into the test
database time and time again. I can grab the User object using
User.objects.get. I can verify the password is correct using
'check_password.' The user is active.

Yet, invariably, self.client.login(username='homer',
password='simpson') FAILS. I'm baffled as to why. I think I've read
every single Internet discussion pertaining to this. Can anybody help?
My login code looks like this:

login = self.client.login(username='homer',
password='simpson')
self.assertTrue(login)

Thanks,

Adam

adambossy

unread,
Apr 10, 2010, 1:36:41 PM4/10/10
to Django users
I forgot to mention: I'm using Django 1.0 on Ubuntu.

Brian McKeever

unread,
Apr 19, 2010, 10:44:01 PM4/19/10
to Django users
I'm having the same problem. None of my tests are able to log in on
this computer.

Here's an example:

def test_bug(self):
response = self.client.get(reverse('home'))
self.assertRedirects(response, 'accounts/login/?next=/home/',
302, 200)
bob = User(
username = 'Bob', email = 'B...@gmail.com')

bob.set_password('Bob')
bob.save()
assert self.client.login( username = 'Bob', password = 'Bob')
response = self.client.get(reverse('home'))
self.assertRedirects(response, 'accounts/login/?next=/home/',
302, 200)

This test passes even though it should log in.

I'm on a freshly reformatted XP Pro machine.
I'm running Django 1.1.1 and Python 2.6.5
My code runs fine on my other machine running ubuntu 9.10, Django
1.1.1, and Python 2.6.4.
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django...@googlegroups.com.
To unsubscribe from this group, send email to django-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

Brian McKeever

unread,
Apr 19, 2010, 10:51:54 PM4/19/10
to Django users
I fixed it by uninstalling Python 2.6.5 and installing 2.6.4 instead.

On Apr 19, 8:44 pm, Brian McKeever <kee...@gmail.com> wrote:
> I'm having the same problem. None of my tests are able to log in on
> this computer.
>
> Here's an example:
>
>     def test_bug(self):
>         response = self.client.get(reverse('home'))
>         self.assertRedirects(response, 'accounts/login/?next=/home/',
> 302, 200)
>         bob = User(
>                 username = 'Bob', email = '...@gmail.com')
>
>         bob.set_password('Bob')
>         bob.save()
>         assert self.client.login( username = 'Bob', password = 'Bob')
>         response = self.client.get(reverse('home'))
>         self.assertRedirects(response, 'accounts/login/?next=/home/',
> 302, 200)
>
> Thistestpasses even though it should log in.

Russell Keith-Magee

unread,
Apr 19, 2010, 10:56:48 PM4/19/10
to django...@googlegroups.com
On Tue, Apr 20, 2010 at 10:51 AM, Brian McKeever <kee...@gmail.com> wrote:
> I fixed it by uninstalling Python 2.6.5 and installing 2.6.4 instead.

Ah - then I think I know the problem.

Python 2.6.5 made a change to the way cookies are stored which is
subtly incompatible with the test client. This problem has been fixed
in the 1.1.X and trunk branches, but the fix hasn't yet made it into a
formal release.

If you are using 1.1.X and Python 2.6.5, you're going to have problems
with any test activity involving cookies. You either need to downgrade
Python, or use the 1.1.X branch rather than the 1.1.1 release.

A 1.1.2 release (that will include the fix for the problem you
describe) will be made at the same time that we release 1.2 -
hopefully, very very soon.

Yours,
Russ Magee %-)

Ramiro Morales

unread,
Apr 19, 2010, 10:59:23 PM4/19/10
to django...@googlegroups.com
On Mon, Apr 19, 2010 at 11:51 PM, Brian McKeever <kee...@gmail.com> wrote:
> I fixed it by uninstalling Python 2.6.5 and installing 2.6.4 instead.

Then it could be related to a change in behavior introduced
by a [0]fix in the Cookie Python stdlib module included in 2.6.5.

This was reported as ticket [1]12720 in Django and fixed
in revision [2]12343 for the SVN trunk (what will become
Django 1.2) and revision [3]12344 in the 1.1.X (what will
become Django 1.1.2

0. http://bugs.python.org/issue5275
1. http://code.djangoproject.com/ticket/12720
2. http://code.djangoproject.com/changeset/12343
3. http://code.djangoproject.com/changeset/12344
--
Ramiro Morales | http://rmorales.net
Reply all
Reply to author
Forward
0 new messages