Improve trunk port test case

Change-Id: I5dfc061769894037f873a356948f075d4dc0267c
This commit is contained in:
Federico Ressi 2021-12-01 06:06:06 +01:00
parent 58961bedb9
commit bfed922829
1 changed files with 42 additions and 12 deletions

View File

@ -21,7 +21,9 @@ import testtools
import tobiko import tobiko
from tobiko import config from tobiko import config
from tobiko.openstack import neutron from tobiko.openstack import neutron
from tobiko.openstack import nova
from tobiko.openstack import stacks from tobiko.openstack import stacks
from tobiko.shell import ip
CONF = config.CONF CONF = config.CONF
@ -29,31 +31,59 @@ LOG = log.getLogger(__name__)
class RebootTrunkServerStackFixture(stacks.UbuntuServerStackFixture): class RebootTrunkServerStackFixture(stacks.UbuntuServerStackFixture):
pass
def validate_created_stack(self):
# (fressi) must wait cloud init to complete Nova
# server setup before shutting it down so that we ensure all
# network devices gets persistent after reboots
stack = super().validate_created_stack()
nova.activate_server(server=self.server_id)
self.wait_for_cloud_init_done()
return stack
@neutron.skip_if_missing_networking_extensions('trunk') @neutron.skip_if_missing_networking_extensions('trunk')
class RebootTrunkTest(testtools.TestCase): class RebootTrunkTest(testtools.TestCase):
"""Tests trunk functionality""" """Tests trunk functionality"""
stack = tobiko.required_fixture(RebootTrunkServerStackFixture) stack: RebootTrunkServerStackFixture = tobiko.required_fixture(
RebootTrunkServerStackFixture)
def setUp(self): def test_0_vlan_ip_addresses(self):
super().setUp() """Check Nova server VLAN port IP addresses"""
# (fressi) must wait cloud init to complete VM setup before
# shutting it down so that we ensure all IPs settings are
# permanent on VM
self.stack.ensure_server_status('ACTIVE') self.stack.ensure_server_status('ACTIVE')
self.stack.wait_for_cloud_init_done() expected = set(self.stack.list_vlan_fixed_ips())
for attempt in tobiko.retry():
actual = set(ip.list_ip_addresses(device=self.stack.vlan_device,
ssh_client=self.stack.ssh_client,
scope='global'))
unexpected = actual - expected
if unexpected:
self.fail("Unexpected IP address assigned to VLAN port: "
f"{unexpected}")
@pytest.mark.ovn_migration missing = expected - actual
def test_0_ping_vlan(self): if missing:
if attempt.is_last:
self.fail("IP addresses not assigned to VLAN port: "
f"{unexpected}")
else:
LOG.debug("IP addresses still not assigned to VLAN port: "
f"{unexpected}")
else:
break
else:
raise RuntimeError("Broken retry loop")
self.assertEqual(set(expected), set(actual))
def test_1_ping_vlan_port(self):
"""Check Nova server VLAN port is reachable""" """Check Nova server VLAN port is reachable"""
self.stack.ensure_server_status('ACTIVE')
self.stack.assert_vlan_is_reachable() self.stack.assert_vlan_is_reachable()
@pytest.mark.ovn_migration @pytest.mark.ovn_migration
def test_1_ping_vlan_after_reboot(self): def test_2_ping_vlan_port_after_restart(self):
"""Check Nova server VLAN port is reachable after restarting it""" """Check Nova server VLAN port is reachable after hard restart"""
self.stack.ensure_server_status('SHUTOFF') self.stack.ensure_server_status('SHUTOFF')
self.stack.assert_vlan_is_unreachable() self.stack.assert_vlan_is_unreachable()