commit 6d1df1be72b9a9b528ca0a3e53ffdf101e347ef0 Author: dkumbhar Date: Thu Oct 8 03:11:06 2020 +0000 econd lb delete and observed session on first lb does not get elete Change-Id: I64a824ce7963370a04504293f8bb230a39b2d860 diff --git a/vmware_nsx_tempest_plugin/services/nsxv_client.py b/vmware_nsx_tempest_plugin/services/nsxv_client.py index 86096da..c5e05d2 100644 --- a/vmware_nsx_tempest_plugin/services/nsxv_client.py +++ b/vmware_nsx_tempest_plugin/services/nsxv_client.py @@ -123,6 +123,30 @@ class VSMClient(object): data=jsonutils.dumps(body)) return response + def put(self, endpoint=None, body=None): + self.__set_url(endpoint=self.endpoint) + response = requests.put(self.url, headers=self.headers, + verify=self.verify, + data=jsonutils.dumps(body)) + return response + + def enable_ssh_on_edge(self, edge_name, edge_id): + edge_detail = self.get_edge(edge_name + '-' + edge_id) + self.__set_api_version('4.0') + data = {} + data['enabled'] = 'true' + data['rulePriority'] = 'high' + endpoint = "/edges/%s/autoconfiguration" % (edge_detail['id']) + self.__set_endpoint(endpoint) + self.put(body=data) + payload = {} + payload['userName'] = 'admin' + payload['password'] = 'Admin!23Admin' + payload['remoteAccess'] = 'true' + endpoint = "/edges/%s/clisettings" % (edge_detail['id']) + self.__set_endpoint(endpoint) + self.put(body=payload) + def get_all_vdn_scopes(self): """Retrieve existing network scopes""" self.__set_api_version('2.0') diff --git a/vmware_nsx_tempest_plugin/tests/nsxv/scenario/manager_topo_deployment.py b/vmware_nsx_tempest_plugin/tests/nsxv/scenario/manager_topo_deployment.py index 134cbdd..a1dd11f 100644 --- a/vmware_nsx_tempest_plugin/tests/nsxv/scenario/manager_topo_deployment.py +++ b/vmware_nsx_tempest_plugin/tests/nsxv/scenario/manager_topo_deployment.py @@ -349,8 +349,10 @@ class TopoDeployScenarioManager(manager.NetworkScenarioTest): client_mgr=client_mgr, tenant_id=tenant_id, namestart=name, distributed=distributed, router_type=router_type) - self._router_set_gateway(net_router['id'], external_network_id, - client=client_mgr.routers_client) + gw = self._router_set_gateway(net_router['id'], external_network_id, + client=client_mgr.routers_client) + net_router['_ext_ip'] = \ + gw['external_gateway_info']['external_fixed_ips'][0]['ip_address'] net_network, net_subnet = self.create_network_subnet( client_mgr=client_mgr, name=net_router['name'], tenant_id=tenant_id, cidr_offset=cidr_offset) diff --git a/vmware_nsx_tempest_plugin/tests/nsxv/scenario/test_lbaas_round_robin_ops.py b/vmware_nsx_tempest_plugin/tests/nsxv/scenario/test_lbaas_round_robin_ops.py index 25c115b..9192111 100644 --- a/vmware_nsx_tempest_plugin/tests/nsxv/scenario/test_lbaas_round_robin_ops.py +++ b/vmware_nsx_tempest_plugin/tests/nsxv/scenario/test_lbaas_round_robin_ops.py @@ -9,10 +9,12 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +import re import tempfile import time from tempest.common import utils +from tempest.common.utils.linux import remote_client from tempest.common import waiters from tempest import config from tempest.lib.common.utils import data_utils @@ -25,6 +27,7 @@ from vmware_nsx_tempest_plugin.services.lbaas import listeners_client from vmware_nsx_tempest_plugin.services.lbaas import load_balancers_client from vmware_nsx_tempest_plugin.services.lbaas import members_client from vmware_nsx_tempest_plugin.services.lbaas import pools_client +from vmware_nsx_tempest_plugin.services import nsxv_client from vmware_nsx_tempest_plugin.tests.nsxv.scenario import ( manager_topo_deployment as dmgr) @@ -60,6 +63,11 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): def resource_setup(cls): super(LBaasRoundRobinBaseTest, cls).resource_setup() cls.create_lbaas_clients(cls.manager) + if CONF.network.backend == "nsxv": + manager_ip = re.search(r"(\d{1,3}\.){3}\d{1,3}", + CONF.nsxv.manager_uri).group(0) + cls.vsm = nsxv_client.VSMClient( + manager_ip, CONF.nsxv.user, CONF.nsxv.password) @classmethod def create_lbaas_clients(cls, mgr): @@ -211,6 +219,18 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): secgroup=self.security_group, **rule) + def start_netcat_session(self, protocol_port=1212): + private_key = self.keypair['private_key'] + ssh_client1 = self.get_remote_client(self.server1_fip, + private_key=private_key) + ssh_client2 = self.get_remote_client(self.server2_fip, + private_key=private_key) + vip = self.loadbalancer['vip_address'] + cmd = ('nc -l -p %s &' % (protocol_port)) + ssh_client1.exec_command(cmd) + cmd = ('nc %s %s &' % (vip, protocol_port)) + ssh_client2.exec_command(cmd) + def start_web_servers(self, server_list=None): """Start predefined servers: @@ -280,7 +300,9 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): except Exception: return None - def create_project_lbaas(self): + def create_project_lbaas(self, member_count=2, + protocol_type='HTTP', + protocol_port=80): vip_subnet_id = self.subnet['id'] lb_name = data_utils.rand_name(self.namestart) self.loadbalancer = self.load_balancers_client.create_load_balancer( @@ -289,13 +311,13 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): self.wait_for_load_balancer_status(lb_id) self.listener = self.listeners_client.create_listener( - loadbalancer_id=lb_id, protocol=self.protocol_type, - protocol_port=self.protocol_port, name=lb_name)['listener'] + loadbalancer_id=lb_id, protocol=protocol_type, + protocol_port=protocol_port, name=lb_name)['listener'] self.wait_for_load_balancer_status(lb_id) self.pool = self.pools_client .create_pool( listener_id=self.listener['id'], - lb_algorithm=self.lb_algorithm, protocol=self.protocol_type, + lb_algorithm=self.lb_algorithm, protocol=protocol_type, name=lb_name)['pool'] self.wait_for_load_balancer_status(lb_id) pool_id = self.pool['id'] @@ -308,15 +330,27 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): self.wait_for_load_balancer_status(lb_id) self.members = [] - for server in [self.server1, self.server2]: - fip = server['_floating_ip'] - fixed_ip_address = fip['fixed_ip_address'] - member = self.members_client.create_member( - pool_id, subnet_id=vip_subnet_id, - address=fixed_ip_address, - protocol_port=self.protocol_port) - self.wait_for_load_balancer_status(lb_id) - self.members.append(member) + if member_count == 2: + for server in [self.server1, self.server2]: + fip = server['_floating_ip'] + fixed_ip_address = fip['fixed_ip_address'] + member = self.members_client.create_member( + pool_id, subnet_id=vip_subnet_id, + address=fixed_ip_address, + protocol_port=protocol_port, + protocol=protocol_type) + self.wait_for_load_balancer_status(lb_id) + self.members.append(member) + else: + for server in [self.server1]: + fip = server['_floating_ip'] + fixed_ip_address = fip['fixed_ip_address'] + member = self.members_client.create_member( + pool_id, subnet_id=vip_subnet_id, + address=fixed_ip_address, + protocol_port=protocol_port) + self.wait_for_load_balancer_status(lb_id) + self.members.append(member) # Currently the ovs-agent is not enforcing security groups on the # vip port - see https://bugs.launchpad.net/neutron/+bug/1163569 @@ -374,6 +408,14 @@ class LBaasRoundRobinBaseTest(dmgr.TopoDeployScenarioManager): else: self.http_cnt[response] = 1 + def verify_session_edge(self, vip): + remote_ip = self.router['_ext_ip'] + ssh_client = remote_client.RemoteClient(remote_ip, 'admin', + 'Admin!23Admin') + cmd = 'show flowtable topN 20 ' + output = ssh_client.exec_command(cmd) + self.assertTrue(vip in output) + class TestLBaasRoundRobinOps(LBaasRoundRobinBaseTest): @@ -396,3 +438,34 @@ class TestLBaasRoundRobinOps(LBaasRoundRobinBaseTest): self.start_web_servers(self.rr_server_list) self.create_project_lbaas() self.check_project_lbaas() + + @decorators.idempotent_id('188d2a5c-4938-448f-a80f-8e65f5cc49d7') + @utils.services('compute', 'network') + def test_lbaas_round_robin_ops_create_delete_second_lb(self): + self.create_lbaas_networks() + server_list = self.rr_server_list + fip1 = self.create_floatingip_for_server( + server_list[0], self.public_network_id, + client_mgr=self.manager) + server_list[0]['_floating_ip'] = fip1 + self.server1 = server_list[0] + fip2 = self.create_floatingip_for_server( + server_list[1], self.public_network_id, + client_mgr=self.manager) + server_list[1]['_floating_ip'] = fip2 + self.server2 = server_list[1] + self.server1_fip = fip1['floating_ip_address'] + self.server2_fip = fip2['floating_ip_address'] + self.create_project_lbaas(member_count=1, protocol_port=1212, + protocol_type='TCP') + self.start_netcat_session(protocol_port=1212) + vip = self.loadbalancer['vip_address'] + self.vsm.enable_ssh_on_edge(self.router['name'], self.router['id']) + self.verify_session_edge(vip) + vip_subnet_id = self.subnet['id'] + lb_name2 = data_utils.rand_name(self.namestart) + self.loadbalancer1 = self.load_balancers_client.create_load_balancer( + name=lb_name2, vip_subnet_id=vip_subnet_id)['loadbalancer'] + lb2_id = self.loadbalancer1['id'] + self.load_balancers_client.delete_load_balancer(lb2_id) + self.verify_session_edge(vip)