Пример #1
0
    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
Пример #2
0
    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)
Пример #3
0
    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)