Esempio n. 1
0
 def setUp(self):
     RackspaceLBDriver.connectionCls.conn_classes = (None,
                                                     RackspaceLBMockHttp)
     RackspaceLBMockHttp.type = None
     self.driver = RackspaceLBDriver('user', 'key')
Esempio n. 2
0
class RackspaceLBTests(unittest.TestCase):
    def setUp(self):
        RackspaceLBDriver.connectionCls.conn_classes = (None,
                                                        RackspaceLBMockHttp)
        RackspaceLBMockHttp.type = None
        self.driver = RackspaceLBDriver('user', 'key')

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()

        self.assertEqual(len(protocols), 10)
        self.assertTrue('http' in protocols)

    def test_list_balancers(self):
        balancers = self.driver.list_balancers()

        self.assertEquals(len(balancers), 2)
        self.assertEquals(balancers[0].name, "test0")
        self.assertEquals(balancers[0].id, "8155")
        self.assertEquals(balancers[1].name, "test1")
        self.assertEquals(balancers[1].id, "8156")

    def test_create_balancer(self):
        balancer = self.driver.create_balancer(
            name='test2',
            port=80,
            algorithm=Algorithm.ROUND_ROBIN,
            members=(Member(None, '10.1.0.10',
                            80), Member(None, '10.1.0.11', 80)))

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_destroy_balancer(self):
        balancer = self.driver.list_balancers()[0]

        ret = self.driver.destroy_balancer(balancer)
        self.assertTrue(ret)

    def test_get_balancer(self):
        balancer = self.driver.get_balancer(balancer_id='8290')

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_balancer_list_members(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals(len(members), 2)
        self.assertEquals(
            set(['10.1.0.10:80', '10.1.0.11:80']),
            set(["%s:%s" % (member.ip, member.port) for member in members]))

    def test_balancer_attach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.attach_member(Member(None, ip='10.1.0.12',
                                               port='80'))

        self.assertEquals(member.ip, '10.1.0.12')
        self.assertEquals(member.port, 80)

    def test_balancer_detach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.list_members()[0]

        ret = balancer.detach_member(member)

        self.assertTrue(ret)
Esempio n. 3
0
 def setUp(self):
     RackspaceLBDriver.connectionCls.conn_classes = (None,
             RackspaceLBMockHttp)
     RackspaceLBMockHttp.type = None
     self.driver = RackspaceLBDriver('user', 'key')
Esempio n. 4
0
class RackspaceLBTests(unittest.TestCase):
    def setUp(self):
        RackspaceLBDriver.connectionCls.conn_classes = (None,
                                                        RackspaceLBMockHttp)
        RackspaceLBMockHttp.type = None
        self.driver = RackspaceLBDriver('user', 'key')
        self.driver.connection.poll_interval = 0.0

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()

        self.assertEqual(len(protocols), 10)
        self.assertTrue('http' in protocols)

    def test_list_supported_algorithms(self):
        algorithms = self.driver.list_supported_algorithms()

        self.assertTrue(Algorithm.RANDOM in algorithms)
        self.assertTrue(Algorithm.ROUND_ROBIN in algorithms)
        self.assertTrue(Algorithm.LEAST_CONNECTIONS in algorithms)
        self.assertTrue(Algorithm.WEIGHTED_ROUND_ROBIN in algorithms)
        self.assertTrue(Algorithm.WEIGHTED_LEAST_CONNECTIONS in algorithms)

    def test_ex_list_algorithms(self):
        algorithms = self.driver.ex_list_algorithm_names()

        self.assertTrue("RANDOM" in algorithms)
        self.assertTrue("ROUND_ROBIN" in algorithms)
        self.assertTrue("LEAST_CONNECTIONS" in algorithms)
        self.assertTrue("WEIGHTED_ROUND_ROBIN" in algorithms)
        self.assertTrue("WEIGHTED_LEAST_CONNECTIONS" in algorithms)

    def test_list_balancers(self):
        balancers = self.driver.list_balancers()

        self.assertEquals(len(balancers), 2)
        self.assertEquals(balancers[0].name, "test0")
        self.assertEquals(balancers[0].id, "8155")
        self.assertEquals(balancers[0].port, 80)
        self.assertEquals(balancers[0].ip, "1.1.1.25")
        self.assertEquals(balancers[1].name, "test1")
        self.assertEquals(balancers[1].id, "8156")

    def test_list_balancers_ex_member_address(self):
        RackspaceLBMockHttp.type = 'EX_MEMBER_ADDRESS'
        balancers = self.driver.list_balancers(ex_member_address='127.0.0.1')

        self.assertEquals(len(balancers), 3)
        self.assertEquals(balancers[0].name, "First Loadbalancer")
        self.assertEquals(balancers[0].id, "1")
        self.assertEquals(balancers[1].name, "Second Loadbalancer")
        self.assertEquals(balancers[1].id, "2")
        self.assertEquals(balancers[2].name, "Third Loadbalancer")
        self.assertEquals(balancers[2].id, "8")

    def test_create_balancer(self):
        balancer = self.driver.create_balancer(
            name='test2',
            port=80,
            algorithm=Algorithm.ROUND_ROBIN,
            members=(Member(None, '10.1.0.10',
                            80), Member(None, '10.1.0.11', 80)))

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_destroy_balancer(self):
        balancer = self.driver.list_balancers()[0]

        ret = self.driver.destroy_balancer(balancer)
        self.assertTrue(ret)

    def test_get_balancer(self):
        balancer = self.driver.get_balancer(balancer_id='8290')

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_get_balancer_extra_public_vips(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        self.assertEquals(balancer.extra["publicVips"], ['50.56.49.149'])

    def test_get_balancer_extra_private_vips(self):
        balancer = self.driver.get_balancer(balancer_id='18941')

        self.assertEquals(balancer.extra["privateVips"], ['10.183.252.175'])

    def test_get_balancer_extra_private_vips_empty(self):
        balancer = self.driver.get_balancer(balancer_id='18945')

        self.assertEquals(balancer.extra['privateVips'], [])

    def test_get_balancer_extra_public_source_ipv4(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        self.assertEquals(balancer.extra["ipv4PublicSource"], '184.106.100.25')

    def test_get_balancer_extra_public_source_ipv6(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        self.assertEquals(balancer.extra["ipv6PublicSource"],
                          '2001:4801:7901::6/64')

    def test_get_balancer_extra_private_source_ipv4(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        self.assertEquals(balancer.extra["ipv4PrivateSource"], '10.183.252.25')

    def test_get_balancer_extra_members(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.extra['members']
        self.assertEquals(3, len(members))
        self.assertEquals('10.1.0.11', members[0].ip)
        self.assertEquals('10.1.0.10', members[1].ip)
        self.assertEquals('10.1.0.9', members[2].ip)

    def test_get_balancer_extra_created(self):
        balancer = self.driver.get_balancer(balancer_id='8290')

        created_8290 = datetime.datetime(2011, 4, 7, 16, 27, 50)
        self.assertEquals(created_8290, balancer.extra['created'])

    def test_get_balancer_extra_updated(self):
        balancer = self.driver.get_balancer(balancer_id='8290')

        updated_8290 = datetime.datetime(2011, 4, 7, 16, 28, 12)
        self.assertEquals(updated_8290, balancer.extra['updated'])

    def test_get_balancer_algorithm(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        self.assertEquals(balancer.extra["algorithm"], Algorithm.RANDOM)

    def test_get_balancer_protocol(self):
        balancer = self.driver.get_balancer(balancer_id='94695')
        self.assertEquals(balancer.extra['protocol'], 'HTTP')

    def test_get_balancer_weighted_round_robin_algorithm(self):
        balancer = self.driver.get_balancer(balancer_id='94692')
        self.assertEquals(balancer.extra["algorithm"],
                          Algorithm.WEIGHTED_ROUND_ROBIN)

    def test_get_balancer_weighted_least_connections_algorithm(self):
        balancer = self.driver.get_balancer(balancer_id='94693')
        self.assertEquals(balancer.extra["algorithm"],
                          Algorithm.WEIGHTED_LEAST_CONNECTIONS)

    def test_get_balancer_unknown_algorithm(self):
        balancer = self.driver.get_balancer(balancer_id='94694')
        self.assertFalse('algorithm' in balancer.extra)

    def test_get_balancer_connect_health_monitor(self):
        balancer = self.driver.get_balancer(balancer_id='94695')
        balancer_health_monitor = balancer.extra["healthMonitor"]

        self.assertEquals(balancer_health_monitor.type, "CONNECT")
        self.assertEquals(balancer_health_monitor.delay, 10)
        self.assertEquals(balancer_health_monitor.timeout, 5)
        self.assertEquals(balancer_health_monitor.attempts_before_deactivation,
                          2)

    def test_get_balancer_http_health_monitor(self):
        balancer = self.driver.get_balancer(balancer_id='94696')
        balancer_health_monitor = balancer.extra["healthMonitor"]

        self.assertEquals(balancer_health_monitor.type, "HTTP")
        self.assertEquals(balancer_health_monitor.delay, 10)
        self.assertEquals(balancer_health_monitor.timeout, 5)
        self.assertEquals(balancer_health_monitor.attempts_before_deactivation,
                          2)
        self.assertEquals(balancer_health_monitor.path, "/")
        self.assertEquals(balancer_health_monitor.status_regex,
                          "^[234][0-9][0-9]$")
        self.assertEquals(balancer_health_monitor.body_regex, "Hello World!")

    def test_get_balancer_https_health_monitor(self):
        balancer = self.driver.get_balancer(balancer_id='94697')
        balancer_health_monitor = balancer.extra["healthMonitor"]

        self.assertEquals(balancer_health_monitor.type, "HTTPS")
        self.assertEquals(balancer_health_monitor.delay, 15)
        self.assertEquals(balancer_health_monitor.timeout, 12)
        self.assertEquals(balancer_health_monitor.attempts_before_deactivation,
                          5)
        self.assertEquals(balancer_health_monitor.path, "/test")
        self.assertEquals(balancer_health_monitor.status_regex,
                          "^[234][0-9][0-9]$")
        self.assertEquals(balancer_health_monitor.body_regex, "abcdef")

    def test_get_balancer_connection_throttle(self):
        balancer = self.driver.get_balancer(balancer_id='94695')
        balancer_connection_throttle = balancer.extra["connectionThrottle"]

        self.assertEquals(balancer_connection_throttle.min_connections, 50)
        self.assertEquals(balancer_connection_throttle.max_connections, 200)
        self.assertEquals(balancer_connection_throttle.max_connection_rate, 50)
        self.assertEquals(balancer_connection_throttle.rate_interval_seconds,
                          10)

    def test_get_session_persistence(self):
        balancer = self.driver.get_balancer(balancer_id='94695')
        self.assertEquals(balancer.extra["sessionPersistenceType"],
                          "HTTP_COOKIE")

    def test_get_connection_logging(self):
        balancer = self.driver.get_balancer(balancer_id='94695')
        self.assertEquals(balancer.extra["connectionLoggingEnabled"], True)

    def test_get_error_page(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        error_page = self.driver.ex_get_balancer_error_page(balancer)
        self.assertTrue("The service is temporarily unavailable" in error_page)

    def test_get_access_list(self):
        balancer = self.driver.get_balancer(balancer_id='18940')
        deny_rule, allow_rule = self.driver.ex_balancer_access_list(balancer)

        self.assertEquals(deny_rule.id, 2883)
        self.assertEquals(deny_rule.rule_type, RackspaceAccessRuleType.DENY)
        self.assertEquals(deny_rule.address, "0.0.0.0/0")

        self.assertEquals(allow_rule.id, 2884)
        self.assertEquals(allow_rule.address, "2001:4801:7901::6/64")
        self.assertEquals(allow_rule.rule_type, RackspaceAccessRuleType.ALLOW)

    def test_balancer_list_members(self):
        expected = set(['10.1.0.10:80', '10.1.0.11:80', '10.1.0.9:8080'])
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals(len(members), 3)
        self.assertEquals(
            expected,
            set(["%s:%s" % (member.ip, member.port) for member in members]))

    def test_balancer_members_extra_weight(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals(12, members[0].extra['weight'])
        self.assertEquals(8, members[1].extra['weight'])

    def test_balancer_members_extra_condition(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals(MemberCondition.ENABLED,
                          members[0].extra['condition'])
        self.assertEquals(MemberCondition.DISABLED,
                          members[1].extra['condition'])
        self.assertEquals(MemberCondition.DRAINING,
                          members[2].extra['condition'])

    def test_balancer_members_extra_status(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals('ONLINE', members[0].extra['status'])
        self.assertEquals('OFFLINE', members[1].extra['status'])
        self.assertEquals('DRAINING', members[2].extra['status'])

    def test_balancer_attach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.attach_member(Member(None, ip='10.1.0.12',
                                               port='80'))

        self.assertEquals(member.ip, '10.1.0.12')
        self.assertEquals(member.port, 80)

    def test_balancer_detach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.list_members()[0]

        ret = balancer.detach_member(member)
        self.assertTrue(ret)

    def test_update_balancer_protocol(self):
        balancer = LoadBalancer(id='3130',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        updated_balancer = self.driver.update_balancer(balancer,
                                                       protocol='HTTPS')
        self.assertEqual('HTTPS', updated_balancer.extra['protocol'])

    def test_update_balancer_port(self):
        balancer = LoadBalancer(id='3131',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        updated_balancer = self.driver.update_balancer(balancer, port=1337)
        self.assertEqual(1337, updated_balancer.port)

    def test_update_balancer_name(self):
        balancer = LoadBalancer(id='3132',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        updated_balancer = self.driver.update_balancer(balancer,
                                                       name='new_lb_name')
        self.assertEqual('new_lb_name', updated_balancer.name)

    def test_update_balancer_algorithm(self):
        balancer = LoadBalancer(id='3133',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        updated_balancer = self.driver.update_balancer(
            balancer, algorithm=Algorithm.ROUND_ROBIN)
        self.assertEqual(Algorithm.ROUND_ROBIN,
                         updated_balancer.extra['algorithm'])

    def test_update_balancer_bad_algorithm_exception(self):
        balancer = LoadBalancer(id='3134',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        try:
            self.driver.update_balancer(balancer,
                                        algorithm='HAVE_MERCY_ON_OUR_SERVERS')
        except LibcloudError:
            pass
        else:
            self.fail(
                'Should have thrown an exception with bad algorithm value')

    def test_ex_update_balancer_no_poll_protocol(self):
        balancer = LoadBalancer(id='3130',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        action_succeeded = self.driver.ex_update_balancer_no_poll(
            balancer, protocol='HTTPS')
        self.assertTrue(action_succeeded)

    def test_ex_update_balancer_no_poll_port(self):
        balancer = LoadBalancer(id='3131',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        action_succeeded = self.driver.ex_update_balancer_no_poll(balancer,
                                                                  port=1337)
        self.assertTrue(action_succeeded)

    def test_ex_update_balancer_no_poll_name(self):
        balancer = LoadBalancer(id='3132',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)

        action_succeeded = self.driver.ex_update_balancer_no_poll(
            balancer, name='new_lb_name')
        self.assertTrue(action_succeeded)

    def test_ex_update_balancer_no_poll_algorithm(self):
        balancer = LoadBalancer(id='3133',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        action_succeeded = self.driver.ex_update_balancer_no_poll(
            balancer, algorithm=Algorithm.ROUND_ROBIN)
        self.assertTrue(action_succeeded)

    def test_ex_update_balancer_no_poll_bad_algorithm_exception(self):
        balancer = LoadBalancer(id='3134',
                                name='LB_update',
                                state='PENDING_UPDATE',
                                ip='10.34.4.3',
                                port=80,
                                driver=self.driver)
        try:
            self.driver.update_balancer(balancer,
                                        algorithm='HAVE_MERCY_ON_OUR_SERVERS')
        except LibcloudError:
            pass
        else:
            self.fail('Should have thrown exception with bad algorithm value')
Esempio n. 5
0
class RackspaceLBTests(unittest.TestCase):

    def setUp(self):
        RackspaceLBDriver.connectionCls.conn_classes = (None,
                RackspaceLBMockHttp)
        RackspaceLBMockHttp.type = None
        self.driver = RackspaceLBDriver('user', 'key')

    def test_list_protocols(self):
        protocols = self.driver.list_protocols()

        self.assertEqual(len(protocols), 10)
        self.assertTrue('http' in protocols)

    def test_list_balancers(self):
        balancers = self.driver.list_balancers()

        self.assertEquals(len(balancers), 2)
        self.assertEquals(balancers[0].name, "test0")
        self.assertEquals(balancers[0].id, "8155")
        self.assertEquals(balancers[1].name, "test1")
        self.assertEquals(balancers[1].id, "8156")

    def test_create_balancer(self):
        balancer = self.driver.create_balancer(name='test2',
                port=80,
                algorithm=Algorithm.ROUND_ROBIN,
                members=(Member(None, '10.1.0.10', 80),
                    Member(None, '10.1.0.11', 80))
                )

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_destroy_balancer(self):
        balancer = self.driver.list_balancers()[0]

        ret = self.driver.destroy_balancer(balancer)
        self.assertTrue(ret)

    def test_get_balancer(self):
        balancer = self.driver.get_balancer(balancer_id='8290')

        self.assertEquals(balancer.name, 'test2')
        self.assertEquals(balancer.id, '8290')

    def test_balancer_list_members(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        members = balancer.list_members()

        self.assertEquals(len(members), 2)
        self.assertEquals(set(['10.1.0.10:80', '10.1.0.11:80']),
                set(["%s:%s" % (member.ip, member.port) for member in members]))

    def test_balancer_attach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.attach_member(Member(None, ip='10.1.0.12', port='80'))

        self.assertEquals(member.ip, '10.1.0.12')
        self.assertEquals(member.port, 80)

    def test_balancer_detach_member(self):
        balancer = self.driver.get_balancer(balancer_id='8290')
        member = balancer.list_members()[0]

        ret = balancer.detach_member(member)

        self.assertTrue(ret)