# -*- coding: utf-8 -*- import re from webapp2_extras import security import test_base class TestSecurity(test_base.BaseTestCase): def test_generate_random_string(self): self.assertRaises(ValueError, security.generate_random_string, None) self.assertRaises(ValueError, security.generate_random_string, 0) self.assertRaises(ValueError, security.generate_random_string, -1) self.assertRaises(ValueError, security.generate_random_string, 1, 1) token = security.generate_random_string(16) self.assertTrue(re.match(r'^\w{16}$', token) is not None) token = security.generate_random_string(32) self.assertTrue(re.match(r'^\w{32}$', token) is not None) token = security.generate_random_string(64) self.assertTrue(re.match(r'^\w{64}$', token) is not None) token = security.generate_random_string(128) self.assertTrue(re.match(r'^\w{128}$', token) is not None) def test_create_check_password_hash(self): self.assertRaises(TypeError, security.generate_password_hash, 'foo', 'bar') password = 'foo' hashval = security.generate_password_hash(password, 'sha1') self.assertTrue(security.check_password_hash(password, hashval)) hashval = security.generate_password_hash(password, 'sha1', pepper='bar') self.assertTrue(security.check_password_hash(password, hashval, pepper='bar')) hashval = security.generate_password_hash(password, 'md5') self.assertTrue(security.check_password_hash(password, hashval)) hashval = security.generate_password_hash(password, 'plain') self.assertTrue(security.check_password_hash(password, hashval)) hashval = security.generate_password_hash(password, 'plain') self.assertFalse(security.check_password_hash(password, '')) hashval1 = security.hash_password(unicode(password), 'sha1', u'bar') hashval2 = security.hash_password(unicode(password), 'sha1', u'bar') self.assertTrue(hashval1 is not None) self.assertEqual(hashval1, hashval2) hashval1 = security.hash_password(unicode(password), 'md5', None) hashval2 = security.hash_password(unicode(password), 'md5', None) self.assertTrue(hashval1 is not None) self.assertEqual(hashval1, hashval2) if __name__ == '__main__': test_base.main()