econd lb delete and observed session on first lb does not get elete

Change-Id: I64a824ce7963370a04504293f8bb230a39b2d860
This commit is contained in:
dkumbhar 2020-10-08 03:11:06 +00:00
parent 0ed26510e3
commit 6d1df1be72
3 changed files with 114 additions and 15 deletions

View File

@ -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')

View File

@ -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)

View File

@ -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)