diff test/test_security.py @ 7223:19db61be18e0

more tests for password.py Test error conditions for: empty passwords and verify setPassword inherits default scheme pbkdf2(), pbkdf2_sha512(), encodePassword()
author John Rouillard <rouilj@ieee.org>
date Sun, 12 Mar 2023 22:02:37 -0400
parents b124c38930ed
children 01c1f357363f
line wrap: on
line diff
--- a/test/test_security.py	Sun Mar 12 21:21:18 2023 -0400
+++ b/test/test_security.py	Sun Mar 12 22:02:37 2023 -0400
@@ -440,9 +440,26 @@
         with self.assertRaises(roundup.password.PasswordValueError) as ctx:
             pbkdf2_unpack("fred$salt$password")
 
-        self.assertEqual(ctx.exception.args[0], 
+        self.assertEqual(ctx.exception.args[0],
                          'invalid PBKDF2 hash (invalid rounds)')
 
+    def test_empty_passwords(self):
+
+        p = roundup.password.Password()
+
+        with self.assertRaises(ValueError) as ctx:
+            p == "foo"
+
+        self.assertEqual(ctx.exception.args[0],
+                         'Password not set')
+
+        p = roundup.password.Password()
+
+        # make sure it uses the default scheme
+        default_scheme = roundup.password.Password.default_scheme
+        p.setPassword("sekret", config=self.db.config)
+        self.assertEqual(p.scheme, default_scheme)
+
     def test_pbkdf2_migrate_rounds(self):
         '''Check that migration happens when number of rounds in
            config is larger than number of rounds in current password.
@@ -458,6 +475,54 @@
         self.assertEqual(p.needs_migration(config=self.db.config), True)
         del(os.environ["PYTEST_USE_CONFIG"])
 
+    def test_encodePassword_errors(self):
+        self.db.config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = 999
+
+        os.environ["PYTEST_USE_CONFIG"] = "True"
+        with self.assertRaises(roundup.password.PasswordValueError) as ctx:
+            p = roundup.password.encodePassword('sekrit', 'PBKDF2',
+            config=self.db.config)
+
+        self.assertEqual(ctx.exception.args[0], 
+                         'invalid PBKDF2 hash (rounds too low)')
+
+        del(os.environ["PYTEST_USE_CONFIG"])
+
+        with self.assertRaises(roundup.password.PasswordValueError) as ctx:
+            p = roundup.password.encodePassword('sekrit', 'fred',
+            config=self.db.config)
+
+        self.assertEqual(ctx.exception.args[0], 
+                         "Unknown encryption scheme 'fred'")
+
+    def test_pbkdf2_errors(self):
+        
+        with self.assertRaises(ValueError) as ctx:
+            roundup.password.pbkdf2('sekret', b'saltandpepper', 0, 41)
+
+        self.assertEqual(ctx.exception.args[0],
+                         "key length too large")
+
+        with self.assertRaises(ValueError) as ctx:
+            roundup.password.pbkdf2('sekret', b'saltandpepper', 0, 40)
+
+        self.assertEqual(ctx.exception.args[0],
+                         "rounds must be positive number")
+
+    def test_pbkdf2_sha512_errors(self):
+        
+        with self.assertRaises(ValueError) as ctx:
+            roundup.password.pbkdf2_sha512('sekret', b'saltandpepper', 0, 65)
+
+        self.assertEqual(ctx.exception.args[0],
+                         "key length too large")
+
+        with self.assertRaises(ValueError) as ctx:
+            roundup.password.pbkdf2_sha512('sekret', b'saltandpepper', 0, 64)
+
+        self.assertEqual(ctx.exception.args[0],
+                         "rounds must be positive number")
+
 
     def test_encodePasswordNoConfig(self):
         # should run cleanly as we are in a test.

Roundup Issue Tracker: http://roundup-tracker.org/