Restore "Add scenario 'test_preserve_preexisting_port'"
This reverts commit 8ec99feafebd5ee67a0f4c34bcd5a30d8d42ed97 The neutron job on stable/icehouse was running more tests than what the neutron-icehouse compat job was running against tempest changes on master, that's why we didn't catch this when the change on master to add the test was under review. Note that stable/juno neutron jobs were not running these tests either because the router extension isn't enabled. The difference was we didn't have change I7c80e3bfe4962c3e8c94736af21ff215cd98f7f3 on stable/icehouse or stable/juno in devstack before the new test merged, which broke stable/icehouse. Now that devstack is fixed on stable and will run these scenario tests we add a 'preserve_ports' config flag to compute-feature-enabled so it can be toggled from devstack. For stable branches we won't run the test since the code doesn't work in Nova on stable (and won't be backported). For master devstack, we'll set preserve_ports=True so the test does get run. We can remove the option after juno-eol happens. Devstack change: I214baa3b861e29bedf6bb7b50534ac2286676dd1 Related-Bug: #1431724 Change-Id: I95469e4c2f4aa2bc4e6342860a9c222fb4fa7e16
This commit is contained in:
parent
2a5ac8207a
commit
17940737da
@ -422,6 +422,11 @@
|
||||
# Does the test environment have the ec2 api running? (boolean value)
|
||||
#ec2_api = true
|
||||
|
||||
# Does Nova preserve preexisting ports from Neutron when deleting an
|
||||
# instance? This should be set to True if testing Kilo+ Nova. (boolean
|
||||
# value)
|
||||
#preserve_ports = false
|
||||
|
||||
|
||||
[dashboard]
|
||||
|
||||
|
@ -351,7 +351,13 @@ ComputeFeaturesGroup = [
|
||||
'images of running instances?'),
|
||||
cfg.BoolOpt('ec2_api',
|
||||
default=True,
|
||||
help='Does the test environment have the ec2 api running?')
|
||||
help='Does the test environment have the ec2 api running?'),
|
||||
# TODO(mriedem): Remove preserve_ports once juno-eol happens.
|
||||
cfg.BoolOpt('preserve_ports',
|
||||
default=False,
|
||||
help='Does Nova preserve preexisting ports from Neutron '
|
||||
'when deleting an instance? This should be set to True '
|
||||
'if testing Kilo+ Nova.')
|
||||
]
|
||||
|
||||
|
||||
|
@ -101,13 +101,19 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
self.servers = []
|
||||
|
||||
def _setup_network_and_servers(self, **kwargs):
|
||||
boot_with_port = kwargs.pop('boot_with_port', False)
|
||||
self.security_group = \
|
||||
self._create_security_group(tenant_id=self.tenant_id)
|
||||
self.network, self.subnet, self.router = self.create_networks(**kwargs)
|
||||
self.check_networks()
|
||||
|
||||
self.port_id = None
|
||||
if boot_with_port:
|
||||
# create a port on the network and boot with that
|
||||
self.port_id = self._create_port(self.network['id']).id
|
||||
|
||||
name = data_utils.rand_name('server-smoke')
|
||||
server = self._create_server(name, self.network)
|
||||
server = self._create_server(name, self.network, self.port_id)
|
||||
self._check_tenant_network_connectivity()
|
||||
|
||||
floating_ip = self.create_floating_ip(server)
|
||||
@ -141,7 +147,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
self.assertIn(self.router.id,
|
||||
seen_router_ids)
|
||||
|
||||
def _create_server(self, name, network):
|
||||
def _create_server(self, name, network, port_id=None):
|
||||
keypair = self.create_keypair()
|
||||
self.keypairs[keypair['name']] = keypair
|
||||
security_groups = [{'name': self.security_group['name']}]
|
||||
@ -152,6 +158,8 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
'key_name': keypair['name'],
|
||||
'security_groups': security_groups,
|
||||
}
|
||||
if port_id is not None:
|
||||
create_kwargs['networks'][0]['port'] = port_id
|
||||
server = self.create_server(name=name, create_kwargs=create_kwargs)
|
||||
self.servers.append(server)
|
||||
return server
|
||||
@ -605,3 +613,39 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
self.check_public_network_connectivity(
|
||||
should_connect=True, msg="after updating "
|
||||
"admin_state_up of instance port to True")
|
||||
|
||||
@test.idempotent_id('759462e1-8535-46b0-ab3a-33aa45c55aaa')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.preserve_ports,
|
||||
'Preserving ports on instance delete may not be '
|
||||
'supported in the version of Nova being tested.')
|
||||
@test.attr(type='smoke')
|
||||
@test.services('compute', 'network')
|
||||
def test_preserve_preexisting_port(self):
|
||||
"""Tests that a pre-existing port provided on server boot is not
|
||||
deleted if the server is deleted.
|
||||
|
||||
Nova should unbind the port from the instance on delete if the port was
|
||||
not created by Nova as part of the boot request.
|
||||
"""
|
||||
# Setup the network, create a port and boot the server from that port.
|
||||
self._setup_network_and_servers(boot_with_port=True)
|
||||
_, server = self.floating_ip_tuple
|
||||
self.assertIsNotNone(self.port_id,
|
||||
'Server should have been created from a '
|
||||
'pre-existing port.')
|
||||
# Assert the port is bound to the server.
|
||||
port_list = self._list_ports(device_id=server['id'],
|
||||
network_id=self.network['id'])
|
||||
self.assertEqual(1, len(port_list),
|
||||
'There should only be one port created for '
|
||||
'server %s.' % server['id'])
|
||||
self.assertEqual(self.port_id, port_list[0]['id'])
|
||||
# Delete the server.
|
||||
self.servers_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'])
|
||||
# Assert the port still exists on the network but is unbound from
|
||||
# the deleted server.
|
||||
port = self.network_client.show_port(self.port_id)['port']
|
||||
self.assertEqual(self.network['id'], port['network_id'])
|
||||
self.assertEqual('', port['device_id'])
|
||||
self.assertEqual('', port['device_owner'])
|
||||
|
Loading…
x
Reference in New Issue
Block a user