def test_expires(self): """ Ensure the expires argument is handled and checked appropriately. * If it's not passed the expires metadata defaults to 0.0. * It must be a number (int or float). * It must be > 0 * The "expires" metadata must == timestamp + passed in expires arg. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) self.assertEqual(0.0, signed_item['_p4p2p']['expires']) signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY, 'foo') self.assertEqual(0.0, signed_item['_p4p2p']['expires']) signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY, 123) self.assertEqual(signed_item['_p4p2p']['timestamp'] + 123, signed_item['_p4p2p']['expires']) signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY, 123.456) self.assertEqual(signed_item['_p4p2p']['timestamp'] + 123.456, signed_item['_p4p2p']['expires']) signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY, -1) self.assertEqual(0.0, signed_item['_p4p2p']['expires'])
def test_original_item_unaffected(self): """ Ensure the item (dict) passed into the function is not changed. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) self.assertNotIn('_p4p2p', item) self.assertEqual(2, len(item)) self.assertIn('foo', item) self.assertIn('baz', item) self.assertEqual(item['foo'], 'bar') self.assertEqual(item['baz'], [1, 2, 3])
def test_signed_item_is_verifiable(self): """ Check that the resulting item is able to be verified. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) self.assertTrue(verify_item(signed_item))
def test_good_item(self): """ The good case should pass. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) self.assertTrue(verify_item(signed_item))
def test_modified_item(self): """ The content of the item does not match the hash / signature. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) signed_item['_p4p2p']['public_key'] = BAD_PUBLIC_KEY self.assertFalse(verify_item(item))
def test_expected_metadata(self): """ Ensure the item (dict) returned from the function contains the expected metadata. """ item = { 'foo': 'bar', 'baz': [1, 2, 3] } signed_item = get_signed_item(item, PUBLIC_KEY, PRIVATE_KEY) self.assertIn('_p4p2p', signed_item) metadata = signed_item['_p4p2p'] self.assertIn('timestamp', metadata) self.assertIsInstance(metadata['timestamp'], float) self.assertIn('expires', metadata) self.assertIsInstance(metadata['expires'], float) self.assertIn('version', metadata) self.assertIsInstance(metadata['version'], str) self.assertIn('public_key', metadata) self.assertIsInstance(metadata['public_key'], str) self.assertIn('signature', metadata) self.assertIsInstance(metadata['signature'], str) self.assertEqual(5, len(metadata))