From b70ba392164791f87deb20260188425ba868c864 Mon Sep 17 00:00:00 2001
From: David Tulloh <git-david@tulloh.id.au>
Date: Tue, 31 May 2016 18:24:04 +0200
Subject: [PATCH] Expand tests to cover alternate digests

---
 repoze/who/tests/test__auth_tkt.py |   40 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/repoze/who/tests/test__auth_tkt.py b/repoze/who/tests/test__auth_tkt.py
index 75572f1..3035442 100644
--- a/repoze/who/tests/test__auth_tkt.py
+++ b/repoze/who/tests/test__auth_tkt.py
@@ -11,6 +11,7 @@
         return self._getTargetClass()(*args, **kw)
 
     def test_ctor_defaults(self):
+        import hashlib
         from .. import _auth_tkt
         with _Monkey(_auth_tkt, time_mod=_Timemod):
             tkt = self._makeOne('SEEKRIT', 'USERID', '1.2.3.4')
@@ -22,11 +23,14 @@
         self.assertEqual(tkt.time, _WHEN)
         self.assertEqual(tkt.cookie_name, 'auth_tkt')
         self.assertEqual(tkt.secure, False)
+        self.assertEqual(tkt.digest_algo, hashlib.md5)
 
     def test_ctor_explicit(self):
+        import hashlib
         tkt = self._makeOne('SEEKRIT', 'USERID', '1.2.3.4', tokens=('a', 'b'),
                             user_data='DATA', time=_WHEN,
-                            cookie_name='oatmeal', secure=True)
+                            cookie_name='oatmeal', secure=True,
+                            digest_algo=hashlib.sha512)
         self.assertEqual(tkt.secret, 'SEEKRIT')
         self.assertEqual(tkt.userid, 'USERID')
         self.assertEqual(tkt.ip, '1.2.3.4')
@@ -35,6 +39,23 @@
         self.assertEqual(tkt.time, _WHEN)
         self.assertEqual(tkt.cookie_name, 'oatmeal')
         self.assertEqual(tkt.secure, True)
+        self.assertEqual(tkt.digest_algo, hashlib.sha512)
+
+    def test_ctor_string_algorithm(self):
+        import hashlib
+        tkt = self._makeOne('SEEKRIT', 'USERID', '1.2.3.4', tokens=('a', 'b'),
+                            user_data='DATA', time=_WHEN,
+                            cookie_name='oatmeal', secure=True,
+                            digest_algo='sha1')
+        self.assertEqual(tkt.secret, 'SEEKRIT')
+        self.assertEqual(tkt.userid, 'USERID')
+        self.assertEqual(tkt.ip, '1.2.3.4')
+        self.assertEqual(tkt.tokens, 'a,b')
+        self.assertEqual(tkt.user_data, 'DATA')
+        self.assertEqual(tkt.time, _WHEN)
+        self.assertEqual(tkt.cookie_name, 'oatmeal')
+        self.assertEqual(tkt.secure, True)
+        self.assertEqual(tkt.digest_algo, hashlib.sha1)
 
     def test_digest(self):
         from .._auth_tkt import calculate_digest, hashlib
@@ -112,9 +133,9 @@
 
 class Test_parse_ticket(unittest.TestCase):
 
-    def _callFUT(self, secret='SEEKRIT', ticket=None, ip='1.2.3.4'):
+    def _callFUT(self, secret='SEEKRIT', ticket=None, ip='1.2.3.4', digest="md5"):
         from .._auth_tkt import parse_ticket
-        return parse_ticket(secret, ticket, ip)
+        return parse_ticket(secret, ticket, ip, digest)
 
     def test_bad_timestamp(self):
         from .._auth_tkt import BadTicket
@@ -168,10 +189,21 @@
         self.assertEqual(tokens, ['a', 'b'])
         self.assertEqual(user_data, 'DATA')
 
+    def test_w_tokens_and_data_ok_alternate_digest(self):
+        from .._auth_tkt import calculate_digest, hashlib
+        digest = calculate_digest('1.2.3.4', _WHEN, 'SEEKRIT', 'USERID',
+                                  'a,b', 'DATA', hashlib.sha256)
+        TICKET = '%s%08xUSERID!a,b!DATA' % (digest, _WHEN)
+        timestamp, userid, tokens, user_data = self._callFUT(ticket=TICKET, digest=hashlib.sha256)
+        self.assertEqual(timestamp, _WHEN)
+        self.assertEqual(userid, 'USERID')
+        self.assertEqual(tokens, ['a', 'b'])
+        self.assertEqual(user_data, 'DATA')
+
 
 class Test_helpers(unittest.TestCase):
 
-    # calculate_digest is not very testable, and fully exercised throug callers.
+    # calculate_digest is not very testable, and fully exercised through callers.
 
     def test_ints_to_bytes(self):
         from struct import pack

--
Gitblit v1.9.3