Merge "Restore "Add scenario 'test_preserve_preexisting_port'""

This commit is contained in:
Jenkins 2015-03-20 15:26:06 +00:00 committed by Gerrit Code Review
commit 11cc57c0a6
3 changed files with 58 additions and 3 deletions

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