From f238ed34afd0c255e309794b403b91044c46fd03 Mon Sep 17 00:00:00 2001 From: Roee Agiman Date: Tue, 19 Feb 2019 16:15:40 +0200 Subject: [PATCH] Added test_ports suite and a new test New suite added - test_ports.py. New test added - test_previously_used_port. The new test is making sure that a port is re-useable after being released from an older instance. Change-Id: I30443e54d8d286ae5fc8d6d998d8b4258a370fa1 --- neutron_tempest_plugin/scenario/test_ports.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 neutron_tempest_plugin/scenario/test_ports.py diff --git a/neutron_tempest_plugin/scenario/test_ports.py b/neutron_tempest_plugin/scenario/test_ports.py new file mode 100644 index 00000000..3b0408aa --- /dev/null +++ b/neutron_tempest_plugin/scenario/test_ports.py @@ -0,0 +1,80 @@ +# Copyright 2019 Red Hat, Inc. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from tempest.common import waiters +from tempest.lib.common.utils import data_utils +from tempest.lib import decorators + +from neutron_tempest_plugin import config +from neutron_tempest_plugin.scenario import base +from neutron_tempest_plugin.scenario import constants as const + +CONF = config.CONF + + +class PortsTest(base.BaseTempestTestCase): + credentials = ['primary'] + + @classmethod + def resource_setup(cls): + super(PortsTest, cls).resource_setup() + # setup basic topology for servers we can log into it + cls.router = cls.create_router_by_client() + cls.keypair = cls.create_keypair() + cls.secgroup = cls.create_security_group( + name=data_utils.rand_name("test_port_secgroup")) + cls.create_loginable_secgroup_rule( + secgroup_id=cls.secgroup['id']) + cls.create_pingable_secgroup_rule( + secgroup_id=cls.secgroup['id']) + cls.network = cls.create_network() + cls.subnet = cls.create_subnet(cls.network) + cls.create_router_interface(cls.router['id'], cls.subnet['id']) + cls.port = cls.create_port(cls.network, + name=data_utils.rand_name("port"), + security_groups=[cls.secgroup['id']]) + + def _create_instance_with_port(self, port): + """Create instance for port testing + + :param port (object): the port used + """ + servers, fips = ([], []) + server_args = { + 'flavor_ref': CONF.compute.flavor_ref, + 'image_ref': CONF.compute.image_ref, + 'key_name': self.keypair['name'], + 'networks': [{'port': port['id']}] + } + servers.append(self.create_server(**server_args)) + waiters.wait_for_server_status( + self.os_primary.servers_client, servers[0]['server']['id'], + const.SERVER_STATUS_ACTIVE) + fips.append(self.create_floatingip(port=port)) + return fips, servers + + @decorators.idempotent_id('5500797e-b8c2-4e07-a5e0-89fa4e814965') + def test_previously_used_port(self): + for i in range(2): + fips, servers = self._create_instance_with_port( + self.port) + self.check_connectivity(fips[0]['floating_ip_address'], + CONF.validation.image_ssh_user, + self.keypair['private_key']) + self.os_primary.servers_client.delete_server( + servers[0]['server']['id']) + waiters.wait_for_server_termination( + self.os_primary.servers_client, + servers[0]['server']['id']) + self._try_delete_resource(self.delete_floatingip, fips[0])