Source code for django_pam.auth.tests.test_auth_backends

# -*- 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)