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