def test_use_resource(self): cur = self.db1.cursor() cur.execute(""" CREATE TABLE member_table_v ( hash CHAR(24), name TEXT, email VARCHAR(254), expiration_date DATE, resource VARCHAR(255)); """) cur.execute(""" INSERT INTO member_table_v (hash, name, email, expiration_date, resource) VALUES ( ?, 'John Smith', '*****@*****.**', ?, 'door' ), ( ?, 'John Smith', '*****@*****.**', ?, 'laser' ), ( ?, 'Crystal Meth', '*****@*****.**', ?, 'door' ); """, ( MemberDatabase.hash(b'test_data'), datetime.now() + timedelta(days = 1), MemberDatabase.hash(b'test_data'), datetime.now() + timedelta(days = 1), MemberDatabase.hash(b'othe_data'), datetime.now() + timedelta(days = 1), )) self.db1.commit() # Use laser resource member_db1a = MemberDatabase(self.db1, "?", "member_table_v") member_db1a.use_resource('laser') member_db2 = MemberDatabase(self.db2, "?", "member_table_v") member_db2.create() member_db2.mimic(member_db1a) self.assertTrue(member_db2.have_current(b'test_data')) self.assertFalse(member_db2.have_current(b'othe_data')) # Use door resource member_db1b = MemberDatabase(self.db1, "?", "member_table_v") member_db1b.use_resource('door') member_db3 = MemberDatabase(self.db3, "?", "member_table_v") member_db3.create() member_db3.mimic(member_db1b) self.assertTrue(member_db3.have_current(b'test_data')) self.assertTrue(member_db3.have_current(b'othe_data'))
def test_hash_does_not_collide(self): # Check that hash doesn't collide with 2000 unique random strings self.assertEqual(len(frozenset([MemberDatabase.hash(''.join(random.sample(string.ascii_lowercase + string.ascii_uppercase + string.digits, 10)).encode()) for i in range(0, 2000)])), 2000)
def test_hash_mutates(self): # Check that the hash isn't a nop self.assertNotEqual(MemberDatabase.hash("hello".encode()), "hello".encode())