diff options
author | Robert Mela <rmela02421@gmail.com> | 2011-04-07 23:20:35 -0400 |
---|---|---|
committer | Robert Mela <rmela02421@gmail.com> | 2011-04-07 23:20:35 -0400 |
commit | 89b4e081cebcfb9fd1710880862c9bad452629a3 (patch) | |
tree | 51bd4cf671d0a739e56e91c3c56b5765b89b7431 /tests/db | |
parent | 29d79f485c81a5975b9bd2f4c42f80402f490ae1 (diff) | |
download | boto-89b4e081cebcfb9fd1710880862c9bad452629a3.tar.gz |
user-defined hashfunc for db.PasswordProperty, plus a test
Diffstat (limited to 'tests/db')
-rw-r--r-- | tests/db/test_password.py | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/db/test_password.py b/tests/db/test_password.py new file mode 100644 index 00000000..a0c1424a --- /dev/null +++ b/tests/db/test_password.py @@ -0,0 +1,128 @@ +# Copyright (c) 2010 Robert Mela +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + + +import unittest +import logging +import time + +log= logging.getLogger('password_property_test') +log.setLevel(logging.DEBUG) + +class PasswordPropertyTest(unittest.TestCase): + """Test the PasswordProperty""" + + def tearDown(self): + cls=self.test_model() + for obj in cls.all(): obj.delete() + + def hmac_hashfunc(self): + import hmac + def hashfunc(msg): + return hmac.new('mysecret', msg) + return hashfunc + + def test_model(self,hashfunc=None): + from boto.utils import Password + from boto.sdb.db.model import Model + from boto.sdb.db.property import PasswordProperty + import hashlib + class MyModel(Model): + password=PasswordProperty(hashfunc=hashfunc) + return MyModel + + def test_custom_password_class(self): + from boto.utils import Password + from boto.sdb.db.model import Model + from boto.sdb.db.property import PasswordProperty + import hmac, hashlib + + + myhashfunc = hashlib.md5 + ## Define a new Password class + class MyPassword(Password): + hashfunc = myhashfunc #hashlib.md5 #lambda cls,msg: hmac.new('mysecret',msg) + + ## Define a custom password property using the new Password class + + class MyPasswordProperty(PasswordProperty): + data_type=MyPassword + type_name=MyPassword.__name__ + + ## Define a model using the new password property + + class MyModel(Model): + password=MyPasswordProperty()#hashfunc=hashlib.md5) + + obj = MyModel() + obj.password = 'bar' + expected = myhashfunc('bar').hexdigest() #hmac.new('mysecret','bar').hexdigest() + log.debug("\npassword=%s\nexpected=%s" % (obj.password, expected)) + self.assertTrue(obj.password == 'bar' ) + obj.save() + id= obj.id + time.sleep(5) + obj = MyModel.get_by_id(id) + self.assertEquals(obj.password,'bar') + self.assertEquals(str(obj.password), expected) + #hmac.new('mysecret','bar').hexdigest()) + + + def test_aaa_default_password_property(self): + cls = self.test_model() + obj = cls(id='passwordtest') + obj.password = 'foo' + self.assertEquals('foo', obj.password) + obj.save() + time.sleep(5) + obj = cls.get_by_id('passwordtest') + self.assertEquals('foo', obj.password) + + def test_password_constructor_hashfunc(self): + import hmac + myhashfunc=lambda msg: hmac.new('mysecret',msg) + cls = self.test_model(hashfunc=myhashfunc) + obj = cls() + obj.password='hello' + expected = myhashfunc('hello').hexdigest() + self.assertEquals(obj.password, 'hello') + self.assertEquals(str(obj.password), expected) + obj.save() + id = obj.id + time.sleep(5) + obj = cls.get_by_id(id) + log.debug("\npassword=%s" % obj.password) + self.assertTrue(obj.password == 'hello') + + + +if __name__ == '__main__': + import sys, os + curdir = os.path.dirname( os.path.abspath(__file__) ) + srcroot = curdir + "/../.." + sys.path = [ srcroot ] + sys.path + logging.basicConfig() + log.setLevel(logging.INFO) + suite = unittest.TestLoader().loadTestsFromTestCase(PasswordPropertyTest) + unittest.TextTestRunner(verbosity=2).run(suite) + + import boto + |