Ejemplo n.º 1
0
    def test_health_monitor_http(self, setup, os_actions, ssh_connect):
        """Check HTTP health monitor"""
        # Health check is carried out by HA proxy, so we don't need to
        # create OS health monitor
        loadbalancer = TestLBaaS.loadbalancer.copy()
        listener = TestLBaaS.listener.copy()
        pool = TestLBaaS.pool.copy()
        member1 = TestLBaaS.member1.copy()
        member2 = TestLBaaS.member2.copy()
        member3 = TestLBaaS.member3.copy()

        loadbalancer['name'] = "tft_lb_http"
        tft_lb = os_actions.create_loadbalancer(loadbalancer)
        vip = tft_lb['loadbalancer']['vip_address']

        listener['name'] = "tft_listener_http"
        listener['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener['protocol'] = "HTTP"
        listener['protocol_port'] = "80"
        tft_listener = os_actions.create_listener(listener)

        pool["name"] = "tft-pool-http"
        pool["listener_id"] = tft_listener['listener']['id']
        pool["lb_algorithm"] = "ROUND_ROBIN"
        pool["protocol"] = "HTTP"
        tft_pool = os_actions.create_lbaas_pool(pool)

        member1["protocol_port"] = "80"
        member2["protocol_port"] = "80"
        member3["protocol_port"] = "80"
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member1)
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member2)
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member3)

        # Establish SSH connection
        vm_c = ssh_connect(TestLBaaS.vm_client['floating_ip'])
        vm_1 = ssh_connect(TestLBaaS.vm1['floating_ip'])

        # Check LB
        member_num = 3
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)

        # Disable HTTP service on one pool member
        cmd = "sudo systemctl stop apache2 && systemctl status apache2"
        common.exec_command(vm_1, cmd)

        time.sleep(5)
        # Check LB with non-working member
        member_num = 2
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)
Ejemplo n.º 2
0
    def test_fip_lbaas(self, setup, config, os_actions, os_clients):
        """Assign Floating IP on LoadBalancer"""
        loadbalancer = TestLBaaS.loadbalancer.copy()
        listener = TestLBaaS.listener.copy()
        pool = TestLBaaS.pool.copy()
        member1 = TestLBaaS.member1.copy()
        member2 = TestLBaaS.member2.copy()

        loadbalancer['name'] = utils.rand_name("lbaas_http")
        tft_lb = os_actions.create_loadbalancer(loadbalancer)

        listener['name'] = utils.rand_name("listener_http")
        listener['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener['protocol'] = "HTTP"
        listener['protocol_port'] = "80"
        tft_listener = os_actions.create_listener(listener)

        pool["name"] = utils.rand_name("pool_http")
        pool["listener_id"] = tft_listener['listener']['id']
        pool["lb_algorithm"] = "ROUND_ROBIN"
        pool["protocol"] = "HTTP"
        tft_pool = os_actions.create_lbaas_pool(pool)

        member1["protocol_port"] = "80"
        member2["protocol_port"] = "80"
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member1)
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member2)

        # Assign FIP on LB
        fip = os_actions._allocate_fip(config.os_ext_net_id)
        body = {"port_id": tft_lb['loadbalancer']['vip_port_id']}
        os_clients.neutron.update_floatingip(fip['floatingip']['id'],
                                             {'floatingip': body})

        # Wait for FIP:
        url = "http://{}".format(fip['floatingip']['floating_ip_address'])
        common.wait_for_http_status(url)

        # Check LB
        member_num = 2
        req_num = member_num * 3
        cmd = "curl {vip}/hostname" \
              "".format(vip=fip['floatingip']['floating_ip_address'])
        out = ""
        for i in range(req_num):
            out += os.popen(cmd).read()
        logger.info(out)
        utils.parser_lb_responses(out, req_num, member_num)
Ejemplo n.º 3
0
    def test_lbaas_tcp(self, setup, os_actions, ssh_connect):
        """Check loadbalancing of TCP traffic (SSH) using Least Connections
        algorithm"""
        loadbalancer = TestLBaaS.loadbalancer.copy()
        listener = TestLBaaS.listener.copy()
        pool = TestLBaaS.pool.copy()
        member1 = TestLBaaS.member1.copy()
        member2 = TestLBaaS.member2.copy()

        loadbalancer['name'] = "tft_lbaas_tcp"
        tft_lb = os_actions.create_loadbalancer(loadbalancer)
        vip = tft_lb['loadbalancer']['vip_address']

        listener['name'] = "tft_listener_tcp"
        listener['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener['protocol'] = "TCP"
        listener['protocol_port'] = "22"
        tft_listener = os_actions.create_listener(listener)

        pool["name"] = "tft_pool_tcp"
        pool["listener_id"] = tft_listener['listener']['id']
        pool["lb_algorithm"] = "LEAST_CONNECTIONS"
        pool["protocol"] = "TCP"
        tft_pool = os_actions.create_lbaas_pool(pool)

        member1["protocol_port"] = "22"
        member2["protocol_port"] = "22"
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member1)
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member2)

        # Establish SSH connection
        vm_c = ssh_connect(TestLBaaS.vm_client['floating_ip'])

        # Check LB
        member_num = 2
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_tcp.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)
Ejemplo n.º 4
0
    def test_multi_listeners(self, setup, os_actions, ssh_connect):
        """Check loadbalancer with several listeners"""
        loadbalancer = TestLBaaS.loadbalancer.copy()
        listener1 = TestLBaaS.listener.copy()
        listener2 = TestLBaaS.listener.copy()
        pool1 = TestLBaaS.pool.copy()
        pool2 = TestLBaaS.pool.copy()
        member1_1 = TestLBaaS.member1.copy()
        member1_2 = TestLBaaS.member2.copy()
        member2_1 = TestLBaaS.member1.copy()
        member2_2 = TestLBaaS.member2.copy()

        loadbalancer['name'] = "tft_loadbalancer"
        tft_lb = os_actions.create_loadbalancer(loadbalancer)
        vip = tft_lb['loadbalancer']['vip_address']

        listener1['name'] = "tft_listener_http"
        listener1['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener1['protocol'] = "HTTP"
        listener1['protocol_port'] = "80"
        tft_listener1 = os_actions.create_listener(listener1)

        pool1["name"] = "tft_pool_http"
        pool1["listener_id"] = tft_listener1['listener']['id']
        pool1["lb_algorithm"] = "ROUND_ROBIN"
        pool1["protocol"] = "HTTP"
        tft_pool1 = os_actions.create_lbaas_pool(pool1)

        listener2['name'] = "tft_listener_tcp"
        listener2['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener2['protocol'] = "TCP"
        listener2['protocol_port'] = "22"
        tft_listener2 = os_actions.create_listener(listener2)

        pool2["name"] = "tft_pool_tcp"
        pool2["listener_id"] = tft_listener2['listener']['id']
        pool2["lb_algorithm"] = "LEAST_CONNECTIONS"
        pool2["protocol"] = "TCP"
        tft_pool2 = os_actions.create_lbaas_pool(pool2)

        member1_1["protocol_port"] = "80"
        member1_2["protocol_port"] = "80"
        member2_1["protocol_port"] = "22"
        member2_2["protocol_port"] = "22"
        os_actions.create_lbaas_member(tft_pool1['pool']['id'], member1_1)
        os_actions.create_lbaas_member(tft_pool1['pool']['id'], member1_2)
        os_actions.create_lbaas_member(tft_pool2['pool']['id'], member2_1)
        os_actions.create_lbaas_member(tft_pool2['pool']['id'], member2_2)

        # Establish SSH connection
        vm_c = ssh_connect(TestLBaaS.vm_client['floating_ip'])

        member_num = 2
        req_num = member_num * 3

        # Check listener1
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)

        # Check listener2
        cmd = TestLBaaS.cmd_tcp.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)
Ejemplo n.º 5
0
    def test_scale_pool(self, setup, os_actions, os_clients, ssh_connect):
        """Check scaling of loadbalancer pool"""
        loadbalancer = TestLBaaS.loadbalancer.copy()
        listener = TestLBaaS.listener.copy()
        pool = TestLBaaS.pool.copy()
        member1 = TestLBaaS.member1.copy()
        member2 = TestLBaaS.member2.copy()
        member3 = TestLBaaS.member3.copy()

        loadbalancer['name'] = "tft_scale_pool"
        tft_lb = os_actions.create_loadbalancer(loadbalancer)
        vip = tft_lb['loadbalancer']['vip_address']

        listener['name'] = "tft_listener_http"
        listener['loadbalancer_id'] = tft_lb['loadbalancer']['id']
        listener['protocol'] = "HTTP"
        listener['protocol_port'] = "80"
        tft_listener = os_actions.create_listener(listener)

        pool["name"] = "tft_pool_http"
        pool["listener_id"] = tft_listener['listener']['id']
        pool["lb_algorithm"] = "ROUND_ROBIN"
        pool["protocol"] = "HTTP"
        tft_pool = os_actions.create_lbaas_pool(pool)

        member1["protocol_port"] = "80"
        member2["protocol_port"] = "80"
        member3["protocol_port"] = "80"
        member = os_clients.neutron.create_lbaas_member(
            tft_pool['pool']['id'], {"member": member1})
        logger.info("Member '{}' is added to pool '{}'"
                    "".format(member['member']['name'],
                              tft_pool['pool']['id']))

        # Establish SSH connection
        vm_c = ssh_connect(TestLBaaS.vm_client['floating_ip'])

        # Check LB
        member_num = 1
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)

        # Add pool members
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member2)
        os_actions.create_lbaas_member(tft_pool['pool']['id'], member3)

        time.sleep(5)
        # Check LB
        member_num = 3
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)

        # Remove pool members
        os_clients.neutron.delete_lbaas_member(member['member']['id'],
                                               tft_pool['pool']['id'])
        logger.info("Member '{}' is removed from pool '{}'"
                    "".format(member1['name'], tft_pool['pool']['id']))

        time.sleep(5)
        # Check LB
        member_num = 2
        req_num = member_num * 3
        cmd = TestLBaaS.cmd_http.format(num=req_num, vip=vip)
        out, err = common.exec_command(vm_c, cmd)
        utils.parser_lb_responses(out, req_num, member_num)