def test_type_enforcement(self): ml = ManagedList('test_config_domain', 'test_key1', 'test_name', 'test_description', TEST_ZK_HOSTS, TEST_AWS_KEYFILE, TEST_S3_BUCKET, data_type=int) self.assertTrue(ml.data_type is int) ml.clear() self.assertEqual([], ml.get_list()) self.assertEqual(2, ml.add_many([123, 456])) # reject operations with invalid values self.assertRaises(ValueError, ml.add, "xyz") self.assertRaises(ValueError, ml.add_many, [789, "101", "78a"]) # the previous two invalid operation should not change the list, even some of the values are valid self.assertEqual([123, 456], ml.get_list()) # accept `convertable' values self.assertEqual(0, ml.add("123")) # valid but already exists self.assertEqual(1, ml.add("789")) self.assertEqual([123, 456, 789], ml.get_list()) self.assertEqual(1, ml.add_many([789, "101"])) self.assertEqual([123, 456, 789, 101], ml.get_list()) # reject set_list if the new list contains invalid value self.assertRaises(ValueError, ml.set_list, [123, "xxx"]) self.assertEqual([123, 456, 789, 101], ml.get_list()) # set_list should be atomic self.assertRaises(ValueError, ml.remove, "xyz") self.assertEqual(1, ml.remove(123)) self.assertEqual(1, ml.remove("456")) self.assertEqual([789, 101], ml.get_list()) ml.clear() self.assertEqual([], ml.get_list()) ml = ManagedList('test_config_domain', 'test_key2', 'test_name', 'test_description', TEST_ZK_HOSTS, TEST_AWS_KEYFILE, TEST_S3_BUCKET, data_type=str) self.assertTrue(ml.data_type is str) ml.clear() # test str type self.assertEqual([], ml.get_list()) self.assertEqual(2, ml.add_many([123, "456"])) self.assertEqual(1, ml.add_many(["123", 789])) self.assertEqual(["123", "456", "789"], ml.get_list()) ml.set_list([123, 456, 789]) self.assertEqual( ["123", "456", "789"], ml.get_list()) # values should be converted to specified type
def test_singleton_metaclass(self): """Check ManagedDataStructure would return singleton instance for unique identifier of (list_domain, list_key).""" test_md = ManagedList(list_domain="test_singleton_domain", list_key="test_key1", list_name="", list_description="", zk_hosts=TEST_ZK_HOSTS, aws_keyfile=TEST_AWS_KEYFILE, s3_bucket=TEST_S3_BUCKET) test_md2 = ManagedList(list_domain="test_singleton_domain", list_key="test_key1", list_name="", list_description="", zk_hosts=TEST_ZK_HOSTS, aws_keyfile=TEST_AWS_KEYFILE, s3_bucket=TEST_S3_BUCKET) test_md3 = ManagedList(list_domain="test_singleton_domain", list_key="test_key2", list_name="", list_description="", zk_hosts=TEST_ZK_HOSTS, aws_keyfile=TEST_AWS_KEYFILE, s3_bucket=TEST_S3_BUCKET) test_md4 = ManagedList(list_domain="test_singleton_domain2", list_key="test_key1", list_name="", list_description="", zk_hosts=TEST_ZK_HOSTS, aws_keyfile=TEST_AWS_KEYFILE, s3_bucket=TEST_S3_BUCKET) self.assertEqual(test_md, test_md2) self.assertFalse(test_md == test_md3) self.assertFalse(test_md == test_md4) # Instance corresponding to the unique identifier of (list_domain, list_key) can only be # one type. with self.assertRaises(Exception): ManagedHashMap(list_domain="test_singleton_domain", list_key="test_key1", list_name="", list_description="", zk_hosts=TEST_ZK_HOSTS, aws_keyfile=TEST_AWS_KEYFILE, s3_bucket=TEST_S3_BUCKET)
def setUp(self): self.mock_zk_config_manager = mock.patch( 'kingpin.manageddata.managed_datastructures.ZKConfigManager', mock_zk_config_manager.MockZkConfigManager) self.mock_zk_config_manager.start() self.managed_list = ManagedList('test_config_domain', 'test_key', 'test_name', 'test_description', TEST_ZK_HOSTS, TEST_AWS_KEYFILE, TEST_S3_BUCKET)