From 7f56455073405d5a3bba99a63c5812cf2f8cbd7b Mon Sep 17 00:00:00 2001 From: Abhijit Gadgil Date: Sun, 26 Feb 2017 14:51:43 +0530 Subject: [PATCH] #201 Fix Fixed if optional reserved_networks parameter was left empty --- .../neutron/neutron_network_service.py | 3 +- .../test_neutron_network_service.py | 34 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/package/cloudshell/cp/openstack/domain/services/neutron/neutron_network_service.py b/package/cloudshell/cp/openstack/domain/services/neutron/neutron_network_service.py index 73f035b..a81c482 100644 --- a/package/cloudshell/cp/openstack/domain/services/neutron/neutron_network_service.py +++ b/package/cloudshell/cp/openstack/domain/services/neutron/neutron_network_service.py @@ -160,7 +160,8 @@ def _get_unused_cidr(self, client, cp_resvd_cidrs, logger): # currently supports /24 subnets logger.debug("reserved CIDRs: {0}".format(cp_resvd_cidrs)) - blacklist_cidrs = map(lambda x: x.strip(), cp_resvd_cidrs.split(",")) + # Empty reserved_addresses generates a list with single empty string + blacklist_cidrs = filter(lambda x: len(x) > 0, map(lambda x: x.strip(), cp_resvd_cidrs.split(","))) current_subnets = client.list_subnets(fields=['cidr', 'id'])['subnets'] current_subnets_cidrs = map(lambda x: unicode(x.get('cidr')), current_subnets) diff --git a/package/tests/test_cp/test_openstack/test_domain/test_services/test_neutron/test_neutron_network_service.py b/package/tests/test_cp/test_openstack/test_domain/test_services/test_neutron/test_neutron_network_service.py index e30add3..c8b8e86 100644 --- a/package/tests/test_cp/test_openstack/test_domain/test_services/test_neutron/test_neutron_network_service.py +++ b/package/tests/test_cp/test_openstack/test_domain/test_services/test_neutron/test_neutron_network_service.py @@ -86,7 +86,7 @@ def test_valid_cidr_returned(self): logger=self.mock_logger) self.assertEqual(result, '10.0.2.0/24') - def none_cidr_returned(self): + def test_none_cidr_returned(self): mock_client = Mock() test_neutron_network_service.neutron_client.Client = Mock(return_value=mock_client) mock_client.create_subnet = Mock(return_value={'subnet': 'subnet success'}) @@ -94,13 +94,43 @@ def none_cidr_returned(self): mock_return_subnets = {'subnets': [{'cidr': '10.0.0.0/24', 'id': 'test-id-1'}, {'cidr': '10.0.1.0/24', 'id': 'test-id-2'}]} - test_reserved_subnets = '10.0.0.0/8, 172.16.0.0/12 , 192.168.0.0/24' + test_reserved_subnets = '10.0.0.0/8, 172.16.0.0/12 , 192.168.0.0/16' mock_client.list_subnets = Mock(return_value=mock_return_subnets) result = self.network_service._get_unused_cidr(client=mock_client, cp_resvd_cidrs=test_reserved_subnets, logger=self.mock_logger) self.assertEqual(result, None) + def test_empty_reserved_networks(self): + mock_client = Mock() + test_neutron_network_service.neutron_client.Client = Mock(return_value=mock_client) + mock_client.create_subnet = Mock(return_value={'subnet': 'subnet success'}) + + mock_return_subnets = {'subnets': [{'cidr': '10.0.0.0/24', 'id': 'test-id-1'}, + {'cidr': '10.0.1.0/24', 'id': 'test-id-2'}]} + + test_reserved_subnets = '' + mock_client.list_subnets = Mock(return_value=mock_return_subnets) + result = self.network_service._get_unused_cidr(client=mock_client, + cp_resvd_cidrs=test_reserved_subnets, + logger=self.mock_logger) + self.assertEqual(result, '10.0.2.0/24') + + def test_reserved_networks_one_empty_entry(self): + mock_client = Mock() + test_neutron_network_service.neutron_client.Client = Mock(return_value=mock_client) + mock_client.create_subnet = Mock(return_value={'subnet': 'subnet success'}) + + mock_return_subnets = {'subnets': [{'cidr': '10.0.0.0/24', 'id': 'test-id-1'}, + {'cidr': '10.0.1.0/24', 'id': 'test-id-2'}]} + + test_reserved_subnets = '172.16.0.0/12,,192.168.0.0/16' + mock_client.list_subnets = Mock(return_value=mock_return_subnets) + result = self.network_service._get_unused_cidr(client=mock_client, + cp_resvd_cidrs=test_reserved_subnets, + logger=self.mock_logger) + self.assertEqual(result, '10.0.2.0/24') + def test_create_and_attach_subnet_to_net_success(self): test_net_id = 'test-net-id'