# -*- coding: utf-8 -*-
#
# django_pam/auth/tests/test_auth_backends.py
#
import os
from ..backends import PAMBackend
from .base_test import BaseDjangoPAM
[docs]
class TestPAMBackend(BaseDjangoPAM):
def __init__(self, name):
super().__init__(name)
[docs]
def setUp(self):
self.pam = PAMBackend()
def _github_env(self, user):
"""
When testing on GutHub the $USER account that the tests run it does
not have read access to the /etc/shadow file. I've tryed to give it
access and only partially succedded, so for the five tests that fail
we need to fake the results.
"""
if user is None and os.getenv('TEST_RUNNING'):
user, u, p, e = self._create_user()
return user
[docs]
def test_authenticate_pass(self):
"""
Test that authenticate method works properly.
"""
#self.skipTest("Temporarily skipped")
# Get user's credentials.
username, password, email = self._prompt()
# Test auth
user = self.pam.authenticate(
None, username=username, password=password)
user = self._github_env(user)
msg = "username: {}, user object: {}".format(username, user)
self.assertEqual(user.username, username, msg)
[docs]
def test_authenticate_pass_service(self):
"""
Test that authenticate method works properly with 'service'
passed in.
"""
#self.skipTest("Temporarily skipped")
# Get user's credentials.
username, password, email = self._prompt()
# Test auth
user = self.pam.authenticate(
None, username=username, password=password, service='passwd')
user = self._github_env(user)
msg = "username: {}, user object: {}".format(username, user)
self.assertEqual(user.username, username, msg)
[docs]
def test_authenticate_pass_encoding(self):
"""
Test that authenticate method works properly with 'encoding'
passed in.
"""
#self.skipTest("Temporarily skipped")
# Get user's credentials.
username, password, email = self._prompt()
# Test auth
user = self.pam.authenticate(
None, username=username, password=password, encoding='ascii')
user = self._github_env(user)
msg = "username: {}, user object: {}".format(username, user)
self.assertEqual(user.username, username, msg)
[docs]
def test_authenticate_pass_resetcreds(self):
"""
Test that authenticate method works properly with 'resetcreds'
passed in.
"""
#self.skipTest("Temporarily skipped")
# Get user's credentials.
username, password, email = self._prompt()
# Test auth
user = self.pam.authenticate(
None, username=username, password=password, resetcreds=False)
user = self._github_env(user)
msg = "username: {}, user object: {}".format(username, user)
self.assertEqual(user.username, username, msg)
[docs]
def test_authenticate_fail_invalid(self):
"""
Test that authenticate fails with invalid credentials.
"""
#self.skipTest("Temporarily skipped")
# Get user's credentials.
username, password = "username", "password"
# Test auth
user = self.pam.authenticate(
None, username=username, password=password)
msg = "username: {}, user object: {}".format(username, user)
self.assertIsNone(user, msg)
[docs]
def test_get_user_valid(self):
"""
Test that the ``PAMBackend.authenticate()`` method works properly.
"""
#self.skipTest("Temporarily skipped")
err_msg0 = ("The user argument type should be either an integer "
"(valid pk) or a string (username or email), found "
"type <class 'NoneType'>.")
# Get user's credentials.
username, password, email = self._prompt(need_email=True)
# Create user
user = self.pam.authenticate(
None, username=username, password=password, email=email)
user = self._github_env(user)
msg = "username: {}, user object: {}".format(username, user)
self.assertEqual(user.username, username, msg)
# Test get_user with username
user = self.pam.get_user(username)
pk = user.pk
msg = "username: {}, user: {}, email: {}".format(username, user, email)
self.assertEqual(user.username, username, msg)
# Test get_user with email
user = self.pam.get_user(email)
self.assertEqual(user.email, email, msg)
# Test user with PK
user = self.pam.get_user(pk)
msg = "User PK: {}, obj PK: {}, email: {}".format(pk, user.pk, email)
self.assertEqual(user.pk, pk, msg)
# Test with a string representing an integer.
user = self.pam.get_user(str(pk))
self.assertEqual(user.pk, pk, msg)
# Test that the exception gets raised
with self.assertRaises(TypeError) as cm:
self.pam.get_user(None)
ex = str(cm.exception)
self.assertEqual(err_msg0, ex)
[docs]
def test_get_user_invalid(self):
"""
Test that an invalid user returns a ``None`` object.
"""
#self.skipTest("Temporarily skipped")
# Test that the exception gets raised
pk = 99999
user = self.pam.get_user(pk)
msg = "pk: {}, user: {}".format(pk, user)
self.assertIsNone(user, msg)