Пример #1
0
 def test_invalid_region(self):
     try:
         self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')
     except ValueError:
         pass
Пример #2
0
class DimensionDataTests(unittest.TestCase):
    def setUp(self):
        DimensionData.connectionCls.conn_classes = (None,
                                                    DimensionDataMockHttp)
        DimensionDataMockHttp.type = None
        self.driver = DimensionData(*DIMENSIONDATA_PARAMS)

    def test_invalid_region(self):
        try:
            self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')
        except ValueError:
            pass

    def test_invalid_creds(self):
        DimensionDataMockHttp.type = 'UNAUTHORIZED'
        try:
            self.driver.list_balancers()
            self.assertTrue(False)
            # Above command should have thrown an InvalidCredsException
        except InvalidCredsError:
            pass

    def test_create_balancer(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []
        members.append(Member(id=None, ip='1.2.3.4', port=80))

        balancer = self.driver.create_balancer(name='test',
                                               port=80,
                                               protocol='http',
                                               algorithm=Algorithm.ROUND_ROBIN,
                                               members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'],
                         '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_with_defaults(self):
        self.driver.ex_set_current_network_domain('1234')

        balancer = self.driver.create_balancer(name='test',
                                               port=None,
                                               protocol=None,
                                               algorithm=None,
                                               members=None)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'],
                         '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_no_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = None

        balancer = self.driver.create_balancer(name='test',
                                               port=80,
                                               protocol='http',
                                               algorithm=Algorithm.ROUND_ROBIN,
                                               members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'],
                         '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_empty_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []

        balancer = self.driver.create_balancer(name='test',
                                               port=80,
                                               protocol='http',
                                               algorithm=Algorithm.ROUND_ROBIN,
                                               members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'],
                         '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_list_balancers(self):
        bal = self.driver.list_balancers()
        self.assertEqual(bal[0].name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal[0].id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal[0].port, '8899')
        self.assertEqual(bal[0].ip, '165.180.12.22')
        self.assertEqual(bal[0].state, State.RUNNING)

    def test_balancer_list_members(self):
        extra = {
            'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            'network_domain_id': '1234'
        }
        balancer = LoadBalancer(id='234',
                                name='test',
                                state=State.RUNNING,
                                ip='1.2.3.4',
                                port=1234,
                                driver=self.driver,
                                extra=extra)
        members = self.driver.balancer_list_members(balancer)
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].port, 9889)

    def test_balancer_attach_member(self):
        extra = {
            'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            'network_domain_id': '1234'
        }
        balancer = LoadBalancer(id='234',
                                name='test',
                                state=State.RUNNING,
                                ip='1.2.3.4',
                                port=1234,
                                driver=self.driver,
                                extra=extra)
        member = Member(id=None,
                        ip='112.12.2.2',
                        port=80,
                        balancer=balancer,
                        extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')

    def test_balancer_detach_member(self):
        extra = {
            'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            'network_domain_id': '1234'
        }
        balancer = LoadBalancer(id='234',
                                name='test',
                                state=State.RUNNING,
                                ip='1.2.3.4',
                                port=1234,
                                driver=self.driver,
                                extra=extra)
        member = Member(id='3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0',
                        ip='112.12.2.2',
                        port=80,
                        balancer=balancer,
                        extra=None)
        result = self.driver.balancer_detach_member(balancer, member)
        self.assertEqual(result, True)

    def test_destroy_balancer(self):
        extra = {
            'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            'network_domain_id': '1234'
        }
        balancer = LoadBalancer(id='234',
                                name='test',
                                state=State.RUNNING,
                                ip='1.2.3.4',
                                port=1234,
                                driver=self.driver,
                                extra=extra)
        response = self.driver.destroy_balancer(balancer)
        self.assertEqual(response, True)

    def test_set_get_network_domain_id(self):
        self.driver.ex_set_current_network_domain('1234')
        nwd = self.driver.ex_get_current_network_domain()
        self.assertEqual(nwd, '1234')

    def test_ex_create_pool_member(self):
        pool = DimensionDataPool(id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                                 name='test',
                                 description='test',
                                 status=State.RUNNING)
        node = DimensionDataVIPNode(id='2344',
                                    name='test',
                                    status=State.RUNNING,
                                    ip='123.23.3.2')
        member = self.driver.ex_create_pool_member(pool=pool,
                                                   node=node,
                                                   port=80)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.ip, '123.23.3.2')

    def test_ex_create_node(self):
        node = self.driver.ex_create_node(network_domain_id='12345',
                                          name='test',
                                          ip='123.12.32.2',
                                          ex_description='',
                                          connection_limit=25000,
                                          connection_rate_limit=2000)
        self.assertEqual(node.name, 'myProductionNode.1')
        self.assertEqual(node.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')

    def test_ex_create_pool(self, ):
        pool = self.driver.ex_create_pool(network_domain_id='1234',
                                          name='test',
                                          balancer_method='ROUND_ROBIN',
                                          ex_description='test',
                                          service_down_action='NONE',
                                          slow_ramp_time=30)
        self.assertEqual(pool.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(pool.name, 'test')
        self.assertEqual(pool.status, State.RUNNING)

    def test_ex_create_virtual_listener(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=80,
            pool=DimensionDataPool(id='1234',
                                   name='test',
                                   description='test',
                                   status=State.RUNNING))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_unusual_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=8900,
            pool=DimensionDataPool(id='1234',
                                   name='test',
                                   description='test',
                                   status=State.RUNNING))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_get_balancer(self):
        bal = self.driver.get_balancer('6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal.id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.port, '8899')
        self.assertEqual(bal.ip, '165.180.12.22')
        self.assertEqual(bal.state, State.RUNNING)

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()
        self.assertNotEqual(0, len(protocols))

    def test_ex_get_nodes(self):
        nodes = self.driver.ex_get_nodes()
        self.assertEqual(2, len(nodes))
        self.assertEqual(nodes[0].name, 'ProductionNode.1')
        self.assertEqual(nodes[0].id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(nodes[0].ip, '10.10.10.101')

    def test_ex_get_pools(self):
        pools = self.driver.ex_get_pools()
        self.assertNotEqual(0, len(pools))
        self.assertEqual(pools[0].name, 'myDevelopmentPool.1')
        self.assertEqual(pools[0].id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_get_pool(self):
        pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(pool.name, 'myDevelopmentPool.1')
        self.assertEqual(pool.id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_destroy_pool(self):
        response = self.driver.ex_destroy_pool(
            pool=DimensionDataPool(id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                                   name='test',
                                   description='test',
                                   status=State.RUNNING))
        self.assertTrue(response)

    def test_get_pool_members(self):
        members = self.driver.ex_get_pool_members(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].name, '10.0.3.13')
        self.assertEqual(members[0].status, 'NORMAL')
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].port, 9889)
        self.assertEqual(members[0].node_id,
                         '3c207269-e75e-11e4-811f-005056806999')

    def test_get_pool_member(self):
        member = self.driver.ex_get_pool_member(
            '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.status, 'NORMAL')
        self.assertEqual(member.ip, '10.0.3.13')
        self.assertEqual(member.port, 9889)

    def test_ex_destroy_pool_member(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='3c207269-e75e-11e4-811f-005056806999'),
            destroy_node=False)
        self.assertTrue(response)

    def test_ex_destroy_pool_member_with_node(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='34de6ed6-46a4-4dae-a753-2f8d3840c6f9'),
            destroy_node=True)
        self.assertTrue(response)
Пример #3
0
 def setUp(self):
     DimensionData.connectionCls.conn_classes = (None,
                                                 DimensionDataMockHttp)
     DimensionDataMockHttp.type = None
     self.driver = DimensionData(*DIMENSIONDATA_PARAMS)
Пример #4
0
 def test_invalid_region(self):
     with self.assertRaises(ValueError):
         self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')
Пример #5
0
 def _get_lb_driver(self, region):
     api_user = self.config['api_user']
     api_pass = self.config['api_password']
     driver = DimensionDataLBDriver(api_user, api_pass, region=region)
     return driver
 def setUp(self):
     DimensionData.connectionCls.active_api_version = '2.4'
     DimensionData.connectionCls.conn_class = DimensionDataMockHttp
     DimensionDataMockHttp.type = None
     self.driver = DimensionData(*DIMENSIONDATA_PARAMS)
 def test_invalid_region(self):
     with self.assertRaises(ValueError):
         self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')
class DimensionData_v2_3_Tests(unittest.TestCase):

    def setUp(self):
        DimensionData.connectionCls.active_api_version = '2.3'
        DimensionData.connectionCls.conn_classes = (None, DimensionDataMockHttp)
        DimensionDataMockHttp.type = None
        self.driver = DimensionData(*DIMENSIONDATA_PARAMS)

    def test_invalid_region(self):
        with self.assertRaises(ValueError):
            self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')

    def test_invalid_creds(self):
        DimensionDataMockHttp.type = 'UNAUTHORIZED'
        with self.assertRaises(InvalidCredsError):
            self.driver.list_balancers()

    def test_create_balancer(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []
        members.append(Member(
            id=None,
            ip='1.2.3.4',
            port=80))

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members,
            ex_listener_ip_address='5.6.7.8')
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')
        self.assertEqual(balancer.extra['listener_ip_address'], '5.6.7.8')

    def test_create_balancer_with_defaults(self):
        self.driver.ex_set_current_network_domain('1234')

        balancer = self.driver.create_balancer(
            name='test',
            port=None,
            protocol=None,
            algorithm=None,
            members=None)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, None)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_no_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = None

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_empty_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_list_balancers(self):
        bal = self.driver.list_balancers()
        self.assertEqual(bal[0].name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal[0].id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal[0].port, '8899')
        self.assertEqual(bal[0].ip, '165.180.12.22')
        self.assertEqual(bal[0].state, State.RUNNING)

    def test_balancer_list_members(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        members = self.driver.balancer_list_members(balancer)
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].port, 9889)

    def test_balancer_attach_member(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id=None,
            ip='112.12.2.2',
            port=80,
            balancer=balancer,
            extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')

    def test_balancer_attach_member_without_port(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id=None,
            ip='112.12.2.2',
            port=None,
            balancer=balancer,
            extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.port, None)

    def test_balancer_detach_member(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id='3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0',
            ip='112.12.2.2',
            port=80,
            balancer=balancer,
            extra=None)
        result = self.driver.balancer_detach_member(balancer, member)
        self.assertEqual(result, True)

    def test_destroy_balancer(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        response = self.driver.destroy_balancer(balancer)
        self.assertEqual(response, True)

    def test_set_get_network_domain_id(self):
        self.driver.ex_set_current_network_domain('1234')
        nwd = self.driver.ex_get_current_network_domain()
        self.assertEqual(nwd, '1234')

    def test_ex_create_pool_member(self):
        pool = DimensionDataPool(
            id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            name='test',
            description='test',
            status=State.RUNNING,
            health_monitor_id=None,
            load_balance_method=None,
            service_down_action=None,
            slow_ramp_time=None
        )
        node = DimensionDataVIPNode(
            id='2344',
            name='test',
            status=State.RUNNING,
            ip='123.23.3.2'
        )
        member = self.driver.ex_create_pool_member(
            pool=pool,
            node=node,
            port=80
        )
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.ip, '123.23.3.2')

    def test_ex_create_node(self):
        node = self.driver.ex_create_node(
            network_domain_id='12345',
            name='test',
            ip='123.12.32.2',
            ex_description='',
            connection_limit=25000,
            connection_rate_limit=2000)
        self.assertEqual(node.name, 'myProductionNode.1')
        self.assertEqual(node.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')

    def test_ex_create_pool(self, ):
        pool = self.driver.ex_create_pool(
            network_domain_id='1234',
            name='test',
            balancer_method='ROUND_ROBIN',
            ex_description='test',
            service_down_action='NONE',
            slow_ramp_time=30)
        self.assertEqual(pool.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(pool.name, 'test')
        self.assertEqual(pool.status, State.RUNNING)

    def test_ex_create_virtual_listener(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=80,
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_unusual_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=8900,
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_without_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_without_pool(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test')
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_get_balancer(self):
        bal = self.driver.get_balancer('6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal.id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.port, '8899')
        self.assertEqual(bal.ip, '165.180.12.22')
        self.assertEqual(bal.state, State.RUNNING)

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()
        self.assertNotEqual(0, len(protocols))

    def test_ex_get_nodes(self):
        nodes = self.driver.ex_get_nodes()
        self.assertEqual(2, len(nodes))
        self.assertEqual(nodes[0].name, 'ProductionNode.1')
        self.assertEqual(nodes[0].id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(nodes[0].ip, '10.10.10.101')

    def test_ex_get_node(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(node.name, 'ProductionNode.2')
        self.assertEqual(node.id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(node.ip, '10.10.10.101')

    def test_ex_update_node(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        node.connection_limit = '100'
        result = self.driver.ex_update_node(node)
        self.assertEqual(result.connection_limit, '100')

    def test_ex_destroy_node(self):
        result = self.driver.ex_destroy_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertTrue(result)

    def test_ex_set_node_state(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        result = self.driver.ex_set_node_state(node, False)
        self.assertEqual(result.connection_limit, '10000')

    def test_ex_get_pools(self):
        pools = self.driver.ex_get_pools()
        self.assertNotEqual(0, len(pools))
        self.assertEqual(pools[0].name, 'myDevelopmentPool.1')
        self.assertEqual(pools[0].id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_get_pool(self):
        pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(pool.name, 'myDevelopmentPool.1')
        self.assertEqual(pool.id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_update_pool(self):
        pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        pool.slow_ramp_time = '120'
        result = self.driver.ex_update_pool(pool)
        self.assertTrue(result)

    def test_ex_destroy_pool(self):
        response = self.driver.ex_destroy_pool(
            pool=DimensionDataPool(
                id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None))
        self.assertTrue(response)

    def test_get_pool_members(self):
        members = self.driver.ex_get_pool_members('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].name, '10.0.3.13')
        self.assertEqual(members[0].status, 'NORMAL')
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].port, 9889)
        self.assertEqual(members[0].node_id, '3c207269-e75e-11e4-811f-005056806999')

    def test_get_pool_member(self):
        member = self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.status, 'NORMAL')
        self.assertEqual(member.ip, '10.0.3.13')
        self.assertEqual(member.port, 9889)

    def test_set_pool_member_state(self):
        member = self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        result = self.driver.ex_set_pool_member_state(member, True)
        self.assertTrue(result)

    def test_ex_destroy_pool_member(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='3c207269-e75e-11e4-811f-005056806999'),
            destroy_node=False)
        self.assertTrue(response)

    def test_ex_destroy_pool_member_with_node(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='34de6ed6-46a4-4dae-a753-2f8d3840c6f9'),
            destroy_node=True)
        self.assertTrue(response)

    def test_ex_get_default_health_monitors(self):
        monitors = self.driver.ex_get_default_health_monitors(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(monitors), 6)
        self.assertEqual(monitors[0].id, '01683574-d487-11e4-811f-005056806999')
        self.assertEqual(monitors[0].name, 'CCDEFAULT.Http')
        self.assertFalse(monitors[0].node_compatible)
        self.assertTrue(monitors[0].pool_compatible)

    def test_ex_get_default_persistence_profiles(self):
        profiles = self.driver.ex_get_default_persistence_profiles(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(profiles), 4)
        self.assertEqual(profiles[0].id, 'a34ca024-f3db-11e4-b010-005056806999')
        self.assertEqual(profiles[0].name, 'CCDEFAULT.Cookie')
        self.assertEqual(profiles[0].fallback_compatible, False)
        self.assertEqual(len(profiles[0].compatible_listeners), 1)
        self.assertEqual(profiles[0].compatible_listeners[0].type, 'PERFORMANCE_LAYER_4')

    def test_ex_get_default_irules(self):
        irules = self.driver.ex_get_default_irules(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(irules), 4)
        self.assertEqual(irules[0].id, '2b20cb2c-ffdc-11e4-b010-005056806999')
        self.assertEqual(irules[0].name, 'CCDEFAULT.HttpsRedirect')
        self.assertEqual(len(irules[0].compatible_listeners), 1)
        self.assertEqual(irules[0].compatible_listeners[0].type, 'PERFORMANCE_LAYER_4')
class DimensionData_v2_4_Tests(unittest.TestCase):

    def setUp(self):
        DimensionData.connectionCls.active_api_version = '2.4'
        DimensionData.connectionCls.conn_class = DimensionDataMockHttp
        DimensionDataMockHttp.type = None
        self.driver = DimensionData(*DIMENSIONDATA_PARAMS)

    def test_invalid_region(self):
        with self.assertRaises(ValueError):
            self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')

    def test_invalid_creds(self):
        DimensionDataMockHttp.type = 'UNAUTHORIZED'
        with self.assertRaises(InvalidCredsError):
            self.driver.list_balancers()

    def test_create_balancer(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []
        members.append(Member(
            id=None,
            ip='1.2.3.4',
            port=80))

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members,
            ex_listener_ip_address='5.6.7.8')
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')
        self.assertEqual(balancer.extra['listener_ip_address'], '5.6.7.8')

    def test_create_balancer_with_defaults(self):
        self.driver.ex_set_current_network_domain('1234')

        balancer = self.driver.create_balancer(
            name='test',
            port=None,
            protocol=None,
            algorithm=None,
            members=None)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, None)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_no_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = None

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_create_balancer_empty_members(self):
        self.driver.ex_set_current_network_domain('1234')
        members = []

        balancer = self.driver.create_balancer(
            name='test',
            port=80,
            protocol='http',
            algorithm=Algorithm.ROUND_ROBIN,
            members=members)
        self.assertEqual(balancer.name, 'test')
        self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(balancer.ip, '165.180.12.22')
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra['pool_id'], '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(balancer.extra['network_domain_id'], '1234')

    def test_list_balancers(self):
        bal = self.driver.list_balancers()
        self.assertEqual(bal[0].name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal[0].id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal[0].port, '8899')
        self.assertEqual(bal[0].ip, '165.180.12.22')
        self.assertEqual(bal[0].state, State.RUNNING)

    def test_balancer_list_members(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        members = self.driver.balancer_list_members(balancer)
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].port, 9889)

    def test_balancer_attach_member(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id=None,
            ip='112.12.2.2',
            port=80,
            balancer=balancer,
            extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')

    def test_balancer_attach_member_without_port(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id=None,
            ip='112.12.2.2',
            port=None,
            balancer=balancer,
            extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.port, None)

    def test_balancer_detach_member(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        member = Member(
            id='3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0',
            ip='112.12.2.2',
            port=80,
            balancer=balancer,
            extra=None)
        result = self.driver.balancer_detach_member(balancer, member)
        self.assertEqual(result, True)

    def test_destroy_balancer(self):
        extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                 'network_domain_id': '1234'}
        balancer = LoadBalancer(
            id='234',
            name='test',
            state=State.RUNNING,
            ip='1.2.3.4',
            port=1234,
            driver=self.driver,
            extra=extra
        )
        response = self.driver.destroy_balancer(balancer)
        self.assertEqual(response, True)

    def test_set_get_network_domain_id(self):
        self.driver.ex_set_current_network_domain('1234')
        nwd = self.driver.ex_get_current_network_domain()
        self.assertEqual(nwd, '1234')

    def test_ex_create_pool_member(self):
        pool = DimensionDataPool(
            id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
            name='test',
            description='test',
            status=State.RUNNING,
            health_monitor_id=None,
            load_balance_method=None,
            service_down_action=None,
            slow_ramp_time=None
        )
        node = DimensionDataVIPNode(
            id='2344',
            name='test',
            status=State.RUNNING,
            ip='123.23.3.2'
        )
        member = self.driver.ex_create_pool_member(
            pool=pool,
            node=node,
            port=80
        )
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.ip, '123.23.3.2')

    def test_ex_create_node(self):
        node = self.driver.ex_create_node(
            network_domain_id='12345',
            name='test',
            ip='123.12.32.2',
            ex_description='',
            connection_limit=25000,
            connection_rate_limit=2000)
        self.assertEqual(node.name, 'myProductionNode.1')
        self.assertEqual(node.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')

    def test_ex_create_pool(self, ):
        pool = self.driver.ex_create_pool(
            network_domain_id='1234',
            name='test',
            balancer_method='ROUND_ROBIN',
            ex_description='test',
            service_down_action='NONE',
            slow_ramp_time=30)
        self.assertEqual(pool.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')
        self.assertEqual(pool.name, 'test')
        self.assertEqual(pool.status, State.RUNNING)

    def test_ex_create_virtual_listener(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=80,
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_unusual_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            port=8900,
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_without_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test',
            pool=DimensionDataPool(
                id='1234',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None
            ))
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_ex_create_virtual_listener_without_pool(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id='12345',
            name='test',
            ex_description='test')
        self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
        self.assertEqual(listener.name, 'test')

    def test_get_balancer(self):
        bal = self.driver.get_balancer('6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.name, 'myProduction.Virtual.Listener')
        self.assertEqual(bal.id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
        self.assertEqual(bal.port, '8899')
        self.assertEqual(bal.ip, '165.180.12.22')
        self.assertEqual(bal.state, State.RUNNING)

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()
        self.assertNotEqual(0, len(protocols))

    def test_ex_get_nodes(self):
        nodes = self.driver.ex_get_nodes()
        self.assertEqual(2, len(nodes))
        self.assertEqual(nodes[0].name, 'ProductionNode.1')
        self.assertEqual(nodes[0].id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(nodes[0].ip, '10.10.10.101')

    def test_ex_get_node(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(node.name, 'ProductionNode.2')
        self.assertEqual(node.id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertEqual(node.ip, '10.10.10.101')

    def test_ex_update_node(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        node.connection_limit = '100'
        result = self.driver.ex_update_node(node)
        self.assertEqual(result.connection_limit, '100')

    def test_ex_destroy_node(self):
        result = self.driver.ex_destroy_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        self.assertTrue(result)

    def test_ex_set_node_state(self):
        node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
        result = self.driver.ex_set_node_state(node, False)
        self.assertEqual(result.connection_limit, '10000')

    def test_ex_get_pools(self):
        pools = self.driver.ex_get_pools()
        self.assertNotEqual(0, len(pools))
        self.assertEqual(pools[0].name, 'myDevelopmentPool.1')
        self.assertEqual(pools[0].id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_get_pool(self):
        pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(pool.name, 'myDevelopmentPool.1')
        self.assertEqual(pool.id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')

    def test_ex_update_pool(self):
        pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        pool.slow_ramp_time = '120'
        result = self.driver.ex_update_pool(pool)
        self.assertTrue(result)

    def test_ex_destroy_pool(self):
        response = self.driver.ex_destroy_pool(
            pool=DimensionDataPool(
                id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
                name='test',
                description='test',
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None))
        self.assertTrue(response)

    def test_get_pool_members(self):
        members = self.driver.ex_get_pool_members('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(members[0].name, '10.0.3.13')
        self.assertEqual(members[0].status, 'NORMAL')
        self.assertEqual(members[0].ip, '10.0.3.13')
        self.assertEqual(members[0].port, 9889)
        self.assertEqual(members[0].node_id, '3c207269-e75e-11e4-811f-005056806999')

    def test_get_pool_member(self):
        member = self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        self.assertEqual(member.name, '10.0.3.13')
        self.assertEqual(member.status, 'NORMAL')
        self.assertEqual(member.ip, '10.0.3.13')
        self.assertEqual(member.port, 9889)

    def test_set_pool_member_state(self):
        member = self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
        result = self.driver.ex_set_pool_member_state(member, True)
        self.assertTrue(result)

    def test_ex_destroy_pool_member(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='3c207269-e75e-11e4-811f-005056806999'),
            destroy_node=False)
        self.assertTrue(response)

    def test_ex_destroy_pool_member_with_node(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id='',
                name='test',
                status=State.RUNNING,
                ip='1.2.3.4',
                port=80,
                node_id='34de6ed6-46a4-4dae-a753-2f8d3840c6f9'),
            destroy_node=True)
        self.assertTrue(response)

    def test_ex_get_default_health_monitors(self):
        monitors = self.driver.ex_get_default_health_monitors(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(monitors), 6)
        self.assertEqual(monitors[0].id, '01683574-d487-11e4-811f-005056806999')
        self.assertEqual(monitors[0].name, 'CCDEFAULT.Http')
        self.assertFalse(monitors[0].node_compatible)
        self.assertTrue(monitors[0].pool_compatible)

    def test_ex_get_default_persistence_profiles(self):
        profiles = self.driver.ex_get_default_persistence_profiles(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(profiles), 4)
        self.assertEqual(profiles[0].id, 'a34ca024-f3db-11e4-b010-005056806999')
        self.assertEqual(profiles[0].name, 'CCDEFAULT.Cookie')
        self.assertEqual(profiles[0].fallback_compatible, False)
        self.assertEqual(len(profiles[0].compatible_listeners), 1)
        self.assertEqual(profiles[0].compatible_listeners[0].type, 'PERFORMANCE_LAYER_4')

    def test_ex_get_default_irules(self):
        irules = self.driver.ex_get_default_irules(
            '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
        )
        self.assertEqual(len(irules), 4)
        self.assertEqual(irules[0].id, '2b20cb2c-ffdc-11e4-b010-005056806999')
        self.assertEqual(irules[0].name, 'CCDEFAULT.HttpsRedirect')
        self.assertEqual(len(irules[0].compatible_listeners), 1)
        self.assertEqual(irules[0].compatible_listeners[0].type, 'PERFORMANCE_LAYER_4')
Пример #10
0
 def test_invalid_region(self):
     try:
         self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region="blah")
     except ValueError:
         pass
Пример #11
0
 def setUp(self):
     DimensionData.connectionCls.conn_classes = (None, DimensionDataMockHttp)
     DimensionDataMockHttp.type = None
     self.driver = DimensionData(*DIMENSIONDATA_PARAMS)
Пример #12
0
class DimensionDataTests(unittest.TestCase):
    def setUp(self):
        DimensionData.connectionCls.conn_classes = (None, DimensionDataMockHttp)
        DimensionDataMockHttp.type = None
        self.driver = DimensionData(*DIMENSIONDATA_PARAMS)

    def test_invalid_region(self):
        try:
            self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region="blah")
        except ValueError:
            pass

    def test_invalid_creds(self):
        DimensionDataMockHttp.type = "UNAUTHORIZED"
        try:
            self.driver.list_balancers()
            self.assertTrue(False)
            # Above command should have thrown an InvalidCredsException
        except InvalidCredsError:
            pass

    def test_create_balancer(self):
        self.driver.ex_set_current_network_domain("1234")
        members = []
        members.append(Member(id=None, ip="1.2.3.4", port=80))

        balancer = self.driver.create_balancer(
            name="test", port=80, protocol="http", algorithm=Algorithm.ROUND_ROBIN, members=members
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_create_balancer_with_defaults(self):
        self.driver.ex_set_current_network_domain("1234")

        balancer = self.driver.create_balancer(name="test", port=None, protocol=None, algorithm=None, members=None)
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_create_balancer_no_members(self):
        self.driver.ex_set_current_network_domain("1234")
        members = None

        balancer = self.driver.create_balancer(
            name="test", port=80, protocol="http", algorithm=Algorithm.ROUND_ROBIN, members=members
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_create_balancer_empty_members(self):
        self.driver.ex_set_current_network_domain("1234")
        members = []

        balancer = self.driver.create_balancer(
            name="test", port=80, protocol="http", algorithm=Algorithm.ROUND_ROBIN, members=members
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_list_balancers(self):
        bal = self.driver.list_balancers()
        self.assertEqual(bal[0].name, "myProduction.Virtual.Listener")
        self.assertEqual(bal[0].id, "6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal[0].port, "8899")
        self.assertEqual(bal[0].ip, "165.180.12.22")
        self.assertEqual(bal[0].state, State.RUNNING)

    def test_balancer_list_members(self):
        extra = {"pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7", "network_domain_id": "1234"}
        balancer = LoadBalancer(
            id="234", name="test", state=State.RUNNING, ip="1.2.3.4", port=1234, driver=self.driver, extra=extra
        )
        members = self.driver.balancer_list_members(balancer)
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].ip, "10.0.3.13")
        self.assertEqual(members[0].id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(members[0].port, 9889)

    def test_balancer_attach_member(self):
        extra = {"pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7", "network_domain_id": "1234"}
        balancer = LoadBalancer(
            id="234", name="test", state=State.RUNNING, ip="1.2.3.4", port=1234, driver=self.driver, extra=extra
        )
        member = Member(id=None, ip="112.12.2.2", port=80, balancer=balancer, extra=None)
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")

    def test_balancer_detach_member(self):
        extra = {"pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7", "network_domain_id": "1234"}
        balancer = LoadBalancer(
            id="234", name="test", state=State.RUNNING, ip="1.2.3.4", port=1234, driver=self.driver, extra=extra
        )
        member = Member(
            id="3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0", ip="112.12.2.2", port=80, balancer=balancer, extra=None
        )
        result = self.driver.balancer_detach_member(balancer, member)
        self.assertEqual(result, True)

    def test_destroy_balancer(self):
        extra = {"pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7", "network_domain_id": "1234"}
        balancer = LoadBalancer(
            id="234", name="test", state=State.RUNNING, ip="1.2.3.4", port=1234, driver=self.driver, extra=extra
        )
        response = self.driver.destroy_balancer(balancer)
        self.assertEqual(response, True)

    def test_set_get_network_domain_id(self):
        self.driver.ex_set_current_network_domain("1234")
        nwd = self.driver.ex_get_current_network_domain()
        self.assertEqual(nwd, "1234")

    def test_ex_create_pool_member(self):
        pool = DimensionDataPool(
            id="4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            name="test",
            description="test",
            status=State.RUNNING,
            health_monitor_id=None,
            load_balance_method=None,
            service_down_action=None,
            slow_ramp_time=None,
        )
        node = DimensionDataVIPNode(id="2344", name="test", status=State.RUNNING, ip="123.23.3.2")
        member = self.driver.ex_create_pool_member(pool=pool, node=node, port=80)
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.name, "10.0.3.13")
        self.assertEqual(member.ip, "123.23.3.2")

    def test_ex_create_node(self):
        node = self.driver.ex_create_node(
            network_domain_id="12345",
            name="test",
            ip="123.12.32.2",
            ex_description="",
            connection_limit=25000,
            connection_rate_limit=2000,
        )
        self.assertEqual(node.name, "myProductionNode.1")
        self.assertEqual(node.id, "9e6b496d-5261-4542-91aa-b50c7f569c54")

    def test_ex_create_pool(self,):
        pool = self.driver.ex_create_pool(
            network_domain_id="1234",
            name="test",
            balancer_method="ROUND_ROBIN",
            ex_description="test",
            service_down_action="NONE",
            slow_ramp_time=30,
        )
        self.assertEqual(pool.id, "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(pool.name, "test")
        self.assertEqual(pool.status, State.RUNNING)

    def test_ex_create_virtual_listener(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345",
            name="test",
            ex_description="test",
            port=80,
            pool=DimensionDataPool(
                id="1234",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            ),
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_ex_create_virtual_listener_unusual_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345",
            name="test",
            ex_description="test",
            port=8900,
            pool=DimensionDataPool(
                id="1234",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            ),
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_get_balancer(self):
        bal = self.driver.get_balancer("6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal.name, "myProduction.Virtual.Listener")
        self.assertEqual(bal.id, "6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal.port, "8899")
        self.assertEqual(bal.ip, "165.180.12.22")
        self.assertEqual(bal.state, State.RUNNING)

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()
        self.assertNotEqual(0, len(protocols))

    def test_ex_get_nodes(self):
        nodes = self.driver.ex_get_nodes()
        self.assertEqual(2, len(nodes))
        self.assertEqual(nodes[0].name, "ProductionNode.1")
        self.assertEqual(nodes[0].id, "34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(nodes[0].ip, "10.10.10.101")

    def test_ex_get_node(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(node.name, "ProductionNode.2")
        self.assertEqual(node.id, "34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(node.ip, "10.10.10.101")

    def test_ex_update_node(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        node.connection_limit = "100"
        result = self.driver.ex_update_node(node)
        self.assertEqual(result.connection_limit, "100")

    def test_ex_destroy_node(self):
        result = self.driver.ex_destroy_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertTrue(result)

    def test_ex_set_node_state(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        result = self.driver.ex_set_node_state(node, False)
        self.assertEqual(result.connection_limit, "10000")

    def test_ex_get_pools(self):
        pools = self.driver.ex_get_pools()
        self.assertNotEqual(0, len(pools))
        self.assertEqual(pools[0].name, "myDevelopmentPool.1")
        self.assertEqual(pools[0].id, "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")

    def test_ex_get_pool(self):
        pool = self.driver.ex_get_pool("4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")
        self.assertEqual(pool.name, "myDevelopmentPool.1")
        self.assertEqual(pool.id, "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")

    def test_ex_update_pool(self):
        pool = self.driver.ex_get_pool("4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")
        pool.slow_ramp_time = "120"
        result = self.driver.ex_update_pool(pool)
        self.assertTrue(result)

    def test_ex_destroy_pool(self):
        response = self.driver.ex_destroy_pool(
            pool=DimensionDataPool(
                id="4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            )
        )
        self.assertTrue(response)

    def test_get_pool_members(self):
        members = self.driver.ex_get_pool_members("4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(members[0].name, "10.0.3.13")
        self.assertEqual(members[0].status, "NORMAL")
        self.assertEqual(members[0].ip, "10.0.3.13")
        self.assertEqual(members[0].port, 9889)
        self.assertEqual(members[0].node_id, "3c207269-e75e-11e4-811f-005056806999")

    def test_get_pool_member(self):
        member = self.driver.ex_get_pool_member("3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.name, "10.0.3.13")
        self.assertEqual(member.status, "NORMAL")
        self.assertEqual(member.ip, "10.0.3.13")
        self.assertEqual(member.port, 9889)

    def test_set_pool_member_state(self):
        member = self.driver.ex_get_pool_member("3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        result = self.driver.ex_set_pool_member_state(member, True)
        self.assertTrue(result)

    def test_ex_destroy_pool_member(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id="",
                name="test",
                status=State.RUNNING,
                ip="1.2.3.4",
                port=80,
                node_id="3c207269-e75e-11e4-811f-005056806999",
            ),
            destroy_node=False,
        )
        self.assertTrue(response)

    def test_ex_destroy_pool_member_with_node(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id="",
                name="test",
                status=State.RUNNING,
                ip="1.2.3.4",
                port=80,
                node_id="34de6ed6-46a4-4dae-a753-2f8d3840c6f9",
            ),
            destroy_node=True,
        )
        self.assertTrue(response)
 def setUp(self):
     DimensionData.connectionCls.active_api_version = '2.4'
     DimensionData.connectionCls.conn_class = DimensionDataMockHttp
     DimensionDataMockHttp.type = None
     self.driver = DimensionData(*DIMENSIONDATA_PARAMS)
Пример #14
0
class DimensionData_v2_3_Tests(unittest.TestCase):
    def setUp(self):
        DimensionData.connectionCls.active_api_version = "2.3"
        DimensionData.connectionCls.conn_class = DimensionDataMockHttp
        DimensionDataMockHttp.type = None
        self.driver = DimensionData(*DIMENSIONDATA_PARAMS)

    def test_invalid_region(self):
        with self.assertRaises(ValueError):
            self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region="blah")

    def test_invalid_creds(self):
        DimensionDataMockHttp.type = "UNAUTHORIZED"
        with self.assertRaises(InvalidCredsError):
            self.driver.list_balancers()

    def test_create_balancer(self):
        self.driver.ex_set_current_network_domain("1234")
        members = []
        members.append(Member(id=None, ip="1.2.3.4", port=80))

        balancer = self.driver.create_balancer(
            name="test",
            port=80,
            protocol="http",
            algorithm=Algorithm.ROUND_ROBIN,
            members=members,
            ex_listener_ip_address="5.6.7.8",
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(
            balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54"
        )
        self.assertEqual(balancer.extra["network_domain_id"], "1234")
        self.assertEqual(balancer.extra["listener_ip_address"], "5.6.7.8")

    def test_create_balancer_with_defaults(self):
        self.driver.ex_set_current_network_domain("1234")

        balancer = self.driver.create_balancer(
            name="test", port=None, protocol=None, algorithm=None, members=None
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertIsNone(balancer.port)
        self.assertEqual(
            balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54"
        )
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_create_balancer_no_members(self):
        self.driver.ex_set_current_network_domain("1234")
        members = None

        balancer = self.driver.create_balancer(
            name="test",
            port=80,
            protocol="http",
            algorithm=Algorithm.ROUND_ROBIN,
            members=members,
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(
            balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54"
        )
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_create_balancer_empty_members(self):
        self.driver.ex_set_current_network_domain("1234")
        members = []

        balancer = self.driver.create_balancer(
            name="test",
            port=80,
            protocol="http",
            algorithm=Algorithm.ROUND_ROBIN,
            members=members,
        )
        self.assertEqual(balancer.name, "test")
        self.assertEqual(balancer.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(balancer.ip, "165.180.12.22")
        self.assertEqual(balancer.port, 80)
        self.assertEqual(
            balancer.extra["pool_id"], "9e6b496d-5261-4542-91aa-b50c7f569c54"
        )
        self.assertEqual(balancer.extra["network_domain_id"], "1234")

    def test_list_balancers(self):
        bal = self.driver.list_balancers()
        self.assertEqual(bal[0].name, "myProduction.Virtual.Listener")
        self.assertEqual(bal[0].id, "6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal[0].port, "8899")
        self.assertEqual(bal[0].ip, "165.180.12.22")
        self.assertEqual(bal[0].state, State.RUNNING)

    def test_balancer_list_members(self):
        extra = {
            "pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            "network_domain_id": "1234",
        }
        balancer = LoadBalancer(
            id="234",
            name="test",
            state=State.RUNNING,
            ip="1.2.3.4",
            port=1234,
            driver=self.driver,
            extra=extra,
        )
        members = self.driver.balancer_list_members(balancer)
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].ip, "10.0.3.13")
        self.assertEqual(members[0].id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(members[0].port, 9889)

    def test_balancer_attach_member(self):
        extra = {
            "pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            "network_domain_id": "1234",
        }
        balancer = LoadBalancer(
            id="234",
            name="test",
            state=State.RUNNING,
            ip="1.2.3.4",
            port=1234,
            driver=self.driver,
            extra=extra,
        )
        member = Member(
            id=None, ip="112.12.2.2", port=80, balancer=balancer, extra=None
        )
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")

    def test_balancer_attach_member_without_port(self):
        extra = {
            "pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            "network_domain_id": "1234",
        }
        balancer = LoadBalancer(
            id="234",
            name="test",
            state=State.RUNNING,
            ip="1.2.3.4",
            port=1234,
            driver=self.driver,
            extra=extra,
        )
        member = Member(
            id=None, ip="112.12.2.2", port=None, balancer=balancer, extra=None
        )
        member = self.driver.balancer_attach_member(balancer, member)
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertIsNone(member.port)

    def test_balancer_detach_member(self):
        extra = {
            "pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            "network_domain_id": "1234",
        }
        balancer = LoadBalancer(
            id="234",
            name="test",
            state=State.RUNNING,
            ip="1.2.3.4",
            port=1234,
            driver=self.driver,
            extra=extra,
        )
        member = Member(
            id="3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0",
            ip="112.12.2.2",
            port=80,
            balancer=balancer,
            extra=None,
        )
        result = self.driver.balancer_detach_member(balancer, member)
        self.assertEqual(result, True)

    def test_destroy_balancer(self):
        extra = {
            "pool_id": "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            "network_domain_id": "1234",
        }
        balancer = LoadBalancer(
            id="234",
            name="test",
            state=State.RUNNING,
            ip="1.2.3.4",
            port=1234,
            driver=self.driver,
            extra=extra,
        )
        response = self.driver.destroy_balancer(balancer)
        self.assertEqual(response, True)

    def test_set_get_network_domain_id(self):
        self.driver.ex_set_current_network_domain("1234")
        nwd = self.driver.ex_get_current_network_domain()
        self.assertEqual(nwd, "1234")

    def test_ex_create_pool_member(self):
        pool = DimensionDataPool(
            id="4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
            name="test",
            description="test",
            status=State.RUNNING,
            health_monitor_id=None,
            load_balance_method=None,
            service_down_action=None,
            slow_ramp_time=None,
        )
        node = DimensionDataVIPNode(
            id="2344", name="test", status=State.RUNNING, ip="123.23.3.2"
        )
        member = self.driver.ex_create_pool_member(pool=pool, node=node, port=80)
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.name, "10.0.3.13")
        self.assertEqual(member.ip, "123.23.3.2")

    def test_ex_create_node(self):
        node = self.driver.ex_create_node(
            network_domain_id="12345",
            name="test",
            ip="123.12.32.2",
            ex_description="",
            connection_limit=25000,
            connection_rate_limit=2000,
        )
        self.assertEqual(node.name, "myProductionNode.1")
        self.assertEqual(node.id, "9e6b496d-5261-4542-91aa-b50c7f569c54")

    def test_ex_create_pool(
        self,
    ):
        pool = self.driver.ex_create_pool(
            network_domain_id="1234",
            name="test",
            balancer_method="ROUND_ROBIN",
            ex_description="test",
            service_down_action="NONE",
            slow_ramp_time=30,
        )
        self.assertEqual(pool.id, "9e6b496d-5261-4542-91aa-b50c7f569c54")
        self.assertEqual(pool.name, "test")
        self.assertEqual(pool.status, State.RUNNING)

    def test_ex_create_virtual_listener(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345",
            name="test",
            ex_description="test",
            port=80,
            pool=DimensionDataPool(
                id="1234",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            ),
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_ex_create_virtual_listener_unusual_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345",
            name="test",
            ex_description="test",
            port=8900,
            pool=DimensionDataPool(
                id="1234",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            ),
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_ex_create_virtual_listener_without_port(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345",
            name="test",
            ex_description="test",
            pool=DimensionDataPool(
                id="1234",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            ),
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_ex_create_virtual_listener_without_pool(self):
        listener = self.driver.ex_create_virtual_listener(
            network_domain_id="12345", name="test", ex_description="test"
        )
        self.assertEqual(listener.id, "8334f461-0df0-42d5-97eb-f4678eb26bea")
        self.assertEqual(listener.name, "test")

    def test_get_balancer(self):
        bal = self.driver.get_balancer("6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal.name, "myProduction.Virtual.Listener")
        self.assertEqual(bal.id, "6115469d-a8bb-445b-bb23-d23b5283f2b9")
        self.assertEqual(bal.port, "8899")
        self.assertEqual(bal.ip, "165.180.12.22")
        self.assertEqual(bal.state, State.RUNNING)

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()
        self.assertNotEqual(0, len(protocols))

    def test_ex_get_nodes(self):
        nodes = self.driver.ex_get_nodes()
        self.assertEqual(2, len(nodes))
        self.assertEqual(nodes[0].name, "ProductionNode.1")
        self.assertEqual(nodes[0].id, "34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(nodes[0].ip, "10.10.10.101")

    def test_ex_get_node(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(node.name, "ProductionNode.2")
        self.assertEqual(node.id, "34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertEqual(node.ip, "10.10.10.101")

    def test_ex_update_node(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        node.connection_limit = "100"
        result = self.driver.ex_update_node(node)
        self.assertEqual(result.connection_limit, "100")

    def test_ex_destroy_node(self):
        result = self.driver.ex_destroy_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        self.assertTrue(result)

    def test_ex_set_node_state(self):
        node = self.driver.ex_get_node("34de6ed6-46a4-4dae-a753-2f8d3840c6f9")
        result = self.driver.ex_set_node_state(node, False)
        self.assertEqual(result.connection_limit, "10000")

    def test_ex_get_pools(self):
        pools = self.driver.ex_get_pools()
        self.assertNotEqual(0, len(pools))
        self.assertEqual(pools[0].name, "myDevelopmentPool.1")
        self.assertEqual(pools[0].id, "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")

    def test_ex_get_pool(self):
        pool = self.driver.ex_get_pool("4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")
        self.assertEqual(pool.name, "myDevelopmentPool.1")
        self.assertEqual(pool.id, "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")

    def test_ex_update_pool(self):
        pool = self.driver.ex_get_pool("4d360b1f-bc2c-4ab7-9884-1f03ba2768f7")
        pool.slow_ramp_time = "120"
        result = self.driver.ex_update_pool(pool)
        self.assertTrue(result)

    def test_ex_destroy_pool(self):
        response = self.driver.ex_destroy_pool(
            pool=DimensionDataPool(
                id="4d360b1f-bc2c-4ab7-9884-1f03ba2768f7",
                name="test",
                description="test",
                status=State.RUNNING,
                health_monitor_id=None,
                load_balance_method=None,
                service_down_action=None,
                slow_ramp_time=None,
            )
        )
        self.assertTrue(response)

    def test_get_pool_members(self):
        members = self.driver.ex_get_pool_members(
            "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7"
        )
        self.assertEqual(2, len(members))
        self.assertEqual(members[0].id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(members[0].name, "10.0.3.13")
        self.assertEqual(members[0].status, "NORMAL")
        self.assertEqual(members[0].ip, "10.0.3.13")
        self.assertEqual(members[0].port, 9889)
        self.assertEqual(members[0].node_id, "3c207269-e75e-11e4-811f-005056806999")

    def test_get_pool_member(self):
        member = self.driver.ex_get_pool_member("3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.id, "3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        self.assertEqual(member.name, "10.0.3.13")
        self.assertEqual(member.status, "NORMAL")
        self.assertEqual(member.ip, "10.0.3.13")
        self.assertEqual(member.port, 9889)

    def test_set_pool_member_state(self):
        member = self.driver.ex_get_pool_member("3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0")
        result = self.driver.ex_set_pool_member_state(member, True)
        self.assertTrue(result)

    def test_ex_destroy_pool_member(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id="",
                name="test",
                status=State.RUNNING,
                ip="1.2.3.4",
                port=80,
                node_id="3c207269-e75e-11e4-811f-005056806999",
            ),
            destroy_node=False,
        )
        self.assertTrue(response)

    def test_ex_destroy_pool_member_with_node(self):
        response = self.driver.ex_destroy_pool_member(
            member=DimensionDataPoolMember(
                id="",
                name="test",
                status=State.RUNNING,
                ip="1.2.3.4",
                port=80,
                node_id="34de6ed6-46a4-4dae-a753-2f8d3840c6f9",
            ),
            destroy_node=True,
        )
        self.assertTrue(response)

    def test_ex_get_default_health_monitors(self):
        monitors = self.driver.ex_get_default_health_monitors(
            "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7"
        )
        self.assertEqual(len(monitors), 6)
        self.assertEqual(monitors[0].id, "01683574-d487-11e4-811f-005056806999")
        self.assertEqual(monitors[0].name, "CCDEFAULT.Http")
        self.assertFalse(monitors[0].node_compatible)
        self.assertTrue(monitors[0].pool_compatible)

    def test_ex_get_default_persistence_profiles(self):
        profiles = self.driver.ex_get_default_persistence_profiles(
            "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7"
        )
        self.assertEqual(len(profiles), 4)
        self.assertEqual(profiles[0].id, "a34ca024-f3db-11e4-b010-005056806999")
        self.assertEqual(profiles[0].name, "CCDEFAULT.Cookie")
        self.assertEqual(profiles[0].fallback_compatible, False)
        self.assertEqual(len(profiles[0].compatible_listeners), 1)
        self.assertEqual(
            profiles[0].compatible_listeners[0].type, "PERFORMANCE_LAYER_4"
        )

    def test_ex_get_default_irules(self):
        irules = self.driver.ex_get_default_irules(
            "4d360b1f-bc2c-4ab7-9884-1f03ba2768f7"
        )
        self.assertEqual(len(irules), 4)
        self.assertEqual(irules[0].id, "2b20cb2c-ffdc-11e4-b010-005056806999")
        self.assertEqual(irules[0].name, "CCDEFAULT.HttpsRedirect")
        self.assertEqual(len(irules[0].compatible_listeners), 1)
        self.assertEqual(irules[0].compatible_listeners[0].type, "PERFORMANCE_LAYER_4")