[BGP] Port tests without FIP
Added NoFipPortTest class to test_port module. They are only executed when BGP is configured and expose_tenant_networks is enabled. These tests use a VM without FIP. The tests connect to the fixed IPs from its tenant networks. Change-Id: I458ab8f8ebe92a0f53bbd10675ae161450ffc0ff
This commit is contained in:
parent
a3116bf0e1
commit
3d0a48cd8e
@ -123,6 +123,7 @@ get_router = _router.get_router
|
||||
get_router_id = _router.get_router_id
|
||||
remove_router_interface = _router.remove_router_interface
|
||||
wait_for_master_and_backup_agents = _router.wait_for_master_and_backup_agents
|
||||
update_router = _router.update_router
|
||||
RouterType = _router.RouterType
|
||||
RouterIdType = _router.RouterIdType
|
||||
NoSuchRouter = _router.NoSuchRouter
|
||||
|
@ -182,6 +182,13 @@ def remove_router_interface(router: RouterIdType,
|
||||
raise tobiko.ObjectNotFound() from ex
|
||||
|
||||
|
||||
def update_router(router: RouterIdType, client=None, **params) -> RouterType:
|
||||
router_id = get_router_id(router)
|
||||
reply = _client.neutron_client(client).update_router(
|
||||
router_id, body={'router': params})
|
||||
return reply['router']
|
||||
|
||||
|
||||
class NoSuchRouter(tobiko.ObjectNotFound):
|
||||
message = "No such router found for {id!r}"
|
||||
|
||||
|
@ -37,6 +37,7 @@ Centos7ServerStackFixture = _centos.Centos7ServerStackFixture
|
||||
CirrosFlavorStackFixture = _cirros.CirrosFlavorStackFixture
|
||||
CirrosImageFixture = _cirros.CirrosImageFixture
|
||||
CirrosServerStackFixture = _cirros.CirrosServerStackFixture
|
||||
CirrosNoFipServerStackFixture = _cirros.CirrosNoFipServerStackFixture
|
||||
CirrosServerWithDefaultSecurityGroupStackFixture = (
|
||||
_cirros.CirrosServerWithDefaultSecurityGroupStackFixture)
|
||||
CirrosShellConnection = _cirros.CirrosShellConnection
|
||||
|
@ -22,6 +22,7 @@ from tobiko import config
|
||||
from tobiko.openstack import glance
|
||||
from tobiko.openstack import neutron
|
||||
from tobiko.openstack import heat
|
||||
from tobiko.openstack.stacks import _neutron
|
||||
from tobiko.openstack.stacks import _nova
|
||||
from tobiko.shell import sh
|
||||
from tobiko.shell import ssh
|
||||
@ -152,6 +153,11 @@ class ExtraDhcpOptsCirrosServerStackFixture(CirrosServerStackFixture):
|
||||
use_extra_dhcp_opts = True
|
||||
|
||||
|
||||
class CirrosNoFipServerStackFixture(ExtraDhcpOptsCirrosServerStackFixture):
|
||||
has_floating_ip = False
|
||||
network_stack = tobiko.required_fixture(_neutron.NetworkNoFipStackFixture)
|
||||
|
||||
|
||||
class MultiIPCirrosServerStackFixture(CirrosServerStackFixture):
|
||||
template = _hot.heat_template_file('nova/multi_ip_test_stack.yaml')
|
||||
expected_creted_status = {heat.CREATE_IN_PROGRESS, heat.CREATE_COMPLETE}
|
||||
|
@ -275,6 +275,15 @@ def ensure_router_interface(
|
||||
add_cleanup=add_cleanup)
|
||||
|
||||
|
||||
class RouterNoSnatStackFixture(RouterStackFixture):
|
||||
"""Extra Router configured with SNAT disabled"""
|
||||
def setup_fixture(self):
|
||||
super().setup_fixture()
|
||||
egi = neutron.get_router(self.router_id)['external_gateway_info']
|
||||
egi['enable_snat'] = False
|
||||
neutron.update_router(self.router_id, external_gateway_info=egi)
|
||||
|
||||
|
||||
@neutron.skip_if_missing_networking_extensions('subnet_allocation')
|
||||
class SubnetPoolFixture(tobiko.SharedFixture):
|
||||
"""Neutron Subnet Pool Fixture.
|
||||
@ -567,6 +576,11 @@ class NetworkStackFixture(heat.HeatStackFixture):
|
||||
predicate=fixture.is_router_distributed)
|
||||
|
||||
|
||||
class NetworkNoFipStackFixture(NetworkStackFixture):
|
||||
"""Extra Network Stack where VMs will not have FIPs"""
|
||||
gateway_stack = tobiko.required_fixture(RouterNoSnatStackFixture)
|
||||
|
||||
|
||||
@neutron.skip_if_missing_networking_extensions('net-mtu-writable')
|
||||
class NetworkWithNetMtuWriteStackFixture(NetworkStackFixture):
|
||||
|
||||
|
@ -38,19 +38,18 @@ def test_server_creation(stack=TestServerCreationStack):
|
||||
number_of_servers=0).first
|
||||
|
||||
|
||||
class NetworkNoFipStackFixture(_neutron.NetworkStackFixture):
|
||||
class TestNetworkNoFipStackFixture(_neutron.NetworkNoFipStackFixture):
|
||||
"""Neutron network where VMs will be created with no FIP"""
|
||||
def setup_fixture(self):
|
||||
super().setup_fixture()
|
||||
# this stack will be deleted at the end of the test
|
||||
tobiko.add_cleanup(NetworkNoFipStackFixture.cleanup_fixture, self)
|
||||
tobiko.add_cleanup(TestNetworkNoFipStackFixture.cleanup_fixture, self)
|
||||
|
||||
|
||||
class TestServerNoFipCreationStack(_cirros.CirrosServerStackFixture):
|
||||
class TestServerNoFipCreationStack(_cirros.CirrosNoFipServerStackFixture):
|
||||
"""Nova instance without FIP intended to be used for testing server
|
||||
creation"""
|
||||
has_floating_ip = False
|
||||
network_stack = tobiko.required_fixture(NetworkNoFipStackFixture)
|
||||
network_stack = tobiko.required_fixture(TestNetworkNoFipStackFixture)
|
||||
|
||||
|
||||
def test_server_creation_no_fip():
|
||||
|
@ -302,9 +302,9 @@ class OpenStackTopology(tobiko.SharedFixture):
|
||||
neutron.METADATA_AGENT: 'devstack@q-meta',
|
||||
neutron.OVN_METADATA_AGENT: 'devstack@q-ovn-metadata-agent',
|
||||
neutron.NEUTRON_OVN_METADATA_AGENT: 'devstack@q-ovn-metadata-agent',
|
||||
neutron.OVN_CONTROLLER: 'ovn-controller'
|
||||
# TODO(eolivare): ovn_bgp_agent on devstack?
|
||||
# TODO(eolivare): frr on devstack?
|
||||
neutron.OVN_CONTROLLER: 'ovn-controller',
|
||||
neutron.OVN_BGP_AGENT: 'ovn-bgp-agent',
|
||||
neutron.FRR: 'frr'
|
||||
}
|
||||
agent_to_container_name_mappings: typing.Dict[str, str] = {}
|
||||
|
||||
|
@ -31,6 +31,7 @@ from tobiko.shell import sh
|
||||
from tobiko.openstack import neutron
|
||||
from tobiko.openstack import stacks
|
||||
from tobiko.openstack import topology
|
||||
from tobiko.tripleo import overcloud
|
||||
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
@ -159,6 +160,24 @@ class ExtraDhcpOptsPortTest(PortTest):
|
||||
re.MULTILINE))
|
||||
|
||||
|
||||
@overcloud.skip_unless_ovn_bgp_agent
|
||||
class NoFipPortTest(ExtraDhcpOptsPortTest):
|
||||
stack = tobiko.required_fixture(stacks.CirrosNoFipServerStackFixture)
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
try:
|
||||
node = topology.find_openstack_node(group='networker')
|
||||
except topology.NoSuchOpenStackTopologyNodeGroup:
|
||||
node = topology.find_openstack_node(group='controller')
|
||||
expose_tenant_networks = topology.get_config_setting(
|
||||
'bgp-agent.conf', node.ssh_client, 'expose_tenant_networks')
|
||||
if expose_tenant_networks is None or (
|
||||
expose_tenant_networks.lower() != 'true'):
|
||||
tobiko.skip_test('BGP expose_tenant_networks is disabled')
|
||||
|
||||
|
||||
@neutron.skip_unless_is_ovn()
|
||||
class ExtraDhcpOptsPortLoggingTest(testtools.TestCase):
|
||||
|
||||
|
@ -342,6 +342,8 @@ skip_unless_ovn_using_ha = tobiko.skip_unless(
|
||||
'OVN does not use HA DB model', is_ovn_using_ha)
|
||||
|
||||
|
||||
# TODO(eolivare): make this method work with devstack
|
||||
@_undercloud.skip_if_missing_undercloud
|
||||
def is_ovn_bgp_agent_running():
|
||||
return (len(tripleo.get_overcloud_nodes_running_service(
|
||||
topology.get_agent_service_name(neutron.OVN_BGP_AGENT))) > 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user