From a26496abc41d273441d5505f9254327dbdbedbc8 Mon Sep 17 00:00:00 2001 From: Basavaraj Lamani Date: Thu, 3 Jan 2019 16:53:52 +0530 Subject: [PATCH] test case added to test reserved ip addresses are not assigned to server Change-Id: I02039c1f15dddad8b1d4862811f186f16d67a097 --- .../fixed_ips/test_fixed_ips_negative.py | 36 ++++----- .../networks/functional/test_networks_ips.py | 74 +++++++++++++++++++ 2 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 cloudroast/networking/networks/functional/test_networks_ips.py diff --git a/cloudroast/networking/networks/functional/fixed_ips/test_fixed_ips_negative.py b/cloudroast/networking/networks/functional/fixed_ips/test_fixed_ips_negative.py index 1aca2405..63c1313f 100644 --- a/cloudroast/networking/networks/functional/fixed_ips/test_fixed_ips_negative.py +++ b/cloudroast/networking/networks/functional/fixed_ips/test_fixed_ips_negative.py @@ -88,7 +88,7 @@ class TestFixedIPsMultiple(NetworkingComputeFixture): """ self._add_fixed_ips_network(self.server, self.pub_net_id, number_fixed_ips=self.FIXED_IPS_TO_ADD) - self._remove_all_ips(self.server, self.pub_net_id, + self._remove_all_ips_re_add_ips(self.server, self.pub_net_id, self.ini_ips_count) @tags('admin', 'negative') @@ -98,7 +98,7 @@ class TestFixedIPsMultiple(NetworkingComputeFixture): """ self._add_fixed_ips_network(self.server, self.pri_net_id, number_fixed_ips=self.FIXED_IPS_TO_ADD) - self._remove_all_ips(self.server, self.pri_net_id, + self._remove_all_ips_re_add_ips(self.server, self.pri_net_id, self.ini_ips_count) @tags('admin', 'negative') @@ -108,7 +108,7 @@ class TestFixedIPsMultiple(NetworkingComputeFixture): """ self._add_fixed_ips_network(self.server, self.iso_net_id, number_fixed_ips=self.FIXED_IPS_TO_ADD) - self._remove_all_ips(self.server, self.iso_net_id, + self._remove_all_ips_re_add_ips(self.server, self.iso_net_id, self.ini_ips_count) def _add_fixed_ips_network(self, server, network, number_fixed_ips): @@ -116,10 +116,10 @@ class TestFixedIPsMultiple(NetworkingComputeFixture): for _ in range(number_fixed_ips): self.servers_client.add_fixed_ip(server.id, network) - def _remove_all_ips(self, server, port_type, ini_ips_count): + def _remove_all_ips_re_add_ips(self, server, port_type, ini_ips_count): """ - Tries to remove all network IPs from a server and verifies - that the last IP of a network can NOT be removed + Tries to remove all network IPs from a server and re-adds + the ip based on port_type """ persona_args = {"server": self.server, "keypair": self.keypair, "pnet": True, "snet": True, "inet": True, @@ -147,17 +147,13 @@ class TestFixedIPsMultiple(NetworkingComputeFixture): removed_ip_response = self.servers_client.\ remove_fixed_ip(self.server.id, ip_to_remove) ip_count -= 1 - if ip_count >= 1: - self.assertEqual(removed_ip_response.status_code, - NeutronResponseCodes.REMOVE_FIXED_IP, - msg=self.rem_msg.format( - port_type, self.server.id, - removed_ip_response)) - else: - msg = ('Tried to remove last IP of {0} network in server {1} ' - 'Unexpected Response: {2}'. - format(port_type, server.id, - removed_ip_response.status_code)) - self.assertEqual(removed_ip_response.status_code, - NeutronResponseCodes.REMOVE_FIXED_IP, msg) - self.assertServerPersonaFixedIps(self.server_persona) + self.assertEqual(removed_ip_response.status_code, + NeutronResponseCodes.REMOVE_FIXED_IP, + msg=self.rem_msg.format( + port_type, self.server.id, + removed_ip_response)) + self.assertServerPersonaFixedIps(self.server_persona) + # Re-adding ip's to the server and verifying fixed ip's count + self._add_fixed_ips_network(server, port_type, + number_fixed_ips=self.FIXED_IPS_TO_ADD) + self.assertServerPersonaFixedIps(self.server_persona) diff --git a/cloudroast/networking/networks/functional/test_networks_ips.py b/cloudroast/networking/networks/functional/test_networks_ips.py new file mode 100644 index 00000000..0b469343 --- /dev/null +++ b/cloudroast/networking/networks/functional/test_networks_ips.py @@ -0,0 +1,74 @@ +""" +Copyright 2018 Rackspace + +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 cafe.drivers.unittest.decorators import tags +from cloudcafe.networking.networks.common.constants \ + import IPExcludePolicies +from cloudcafe.networking.networks.personas import ServerPersona +from cloudroast.networking.networks.fixtures import NetworkingComputeFixture + + +class TestNetworkIPs(NetworkingComputeFixture): + """ + Test Networks functionality + """ + NAMES_PREFIX = "networks_ips" + + @classmethod + def setUpClass(cls): + """ + Class setUp - creating the test network and server + """ + super(TestNetworkIPs, cls).setUpClass() + network_name = 'network_{0}'.format(cls.NAMES_PREFIX) + cls.network = cls.create_server_network(name=network_name, ipv4=True) + cls.delete_networks.append(cls.network.id) + keypair_name = 'key_{0}'.format(cls.NAMES_PREFIX) + cls.keypair = cls.create_keypair(name=keypair_name) + cls.delete_keypairs.append(cls.keypair.name) + svr_name = 'svr_{0}'.format(cls.NAMES_PREFIX) + network_ids = [cls.public_network_id, cls.service_network_id, + cls.network.id] + cls.server = cls.create_test_server( + name=svr_name, key_name=cls.keypair.name, + network_ids=network_ids, active_server=True) + cls.server_persona = ServerPersona( + server=cls.server, pnet=True, snet=True, inet=True, + network=cls.network, keypair=cls.keypair, ssh_username='root') + + @tags('smoke', 'positive', 'ip_policies') + def test_server_ips(self): + """ + Verifying Melange does NOT hands out reserved addresses to servers. + This test case assumes that we are using /24 subnet. + """ + # Get and verify server addresses + pub_ip = self.server_persona.pnet_fix_ipv4 + pri_ip = self.server_persona.snet_fix_ipv4 + iso_ip = self.server_persona.inet_fix_ipv4 + + # Verify the IPv4 addresses do NOT end with a reserved address + for ip, label, exclude in [(pub_ip, 'public', + IPExcludePolicies.publicnet), + (pri_ip, 'private', + IPExcludePolicies.servicenet), + (iso_ip, 'isolated', + IPExcludePolicies.isolatednet)]: + result = ip[0].split('.') + msg = ('Unexpected {0} IPv4 {1} address at Server {2}. Addresses ' + 'ending with {3} are reserved.').format( + label, ip[0], self.server.id, exclude) + # This test case assumes that we are using /24 subnet. + self.assertNotIn(result[-1], exclude, msg)