From ac8348853b23f890f5abf46cbbd1a3a7ca8e799e Mon Sep 17 00:00:00 2001 From: LiuYong Date: Tue, 31 May 2016 23:17:21 +0800 Subject: [PATCH] Implement '-F' option for 'net-ip-availability-*' command respond In respond to 'net-ip-availability-list' and 'net-ip-availability-show' commands, follow the '-F' or '--field' option when present Change-Id: I688d77167a401aa07771fee5a46323c416a546ee Closes-Bug: #1586908 --- .../network_ip_availability/plugin.py | 7 ++-- .../test_network_ip_availability.py | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) mode change 100644 => 100755 neutron/services/network_ip_availability/plugin.py mode change 100644 => 100755 neutron/tests/unit/extensions/test_network_ip_availability.py diff --git a/neutron/services/network_ip_availability/plugin.py b/neutron/services/network_ip_availability/plugin.py old mode 100644 new mode 100755 index 49a6e4db845..b3ccb5258c3 --- a/neutron/services/network_ip_availability/plugin.py +++ b/neutron/services/network_ip_availability/plugin.py @@ -15,6 +15,7 @@ from neutron_lib import exceptions +from neutron.db import _utils as db_utils import neutron.db.db_base_plugin_v2 as db_base_plugin_v2 import neutron.db.network_ip_availability_db as ip_availability_db @@ -42,14 +43,16 @@ class NetworkIPAvailabilityPlugin(ip_availability_db.IpAvailabilityMixin, def get_network_ip_availabilities(self, context, filters=None, fields=None): """Returns ip availability data for a collection of networks.""" - return super(NetworkIPAvailabilityPlugin, + net_ip_availabilities = super(NetworkIPAvailabilityPlugin, self).get_network_ip_availabilities(context, filters) + return [db_utils.resource_fields(net_ip_availability, fields) + for net_ip_availability in net_ip_availabilities] def get_network_ip_availability(self, context, id=None, fields=None): """Return ip availability data for a specific network id.""" filters = {'network_id': [id]} result = self.get_network_ip_availabilities(context, filters) if result: - return result[0] + return db_utils.resource_fields(result[0], fields) else: raise exceptions.NetworkNotFound(net_id=id) diff --git a/neutron/tests/unit/extensions/test_network_ip_availability.py b/neutron/tests/unit/extensions/test_network_ip_availability.py old mode 100644 new mode 100755 index 8e25e972d08..868d131e12b --- a/neutron/tests/unit/extensions/test_network_ip_availability.py +++ b/neutron/tests/unit/extensions/test_network_ip_availability.py @@ -59,6 +59,38 @@ class TestNetworkIPAvailabilityAPI( expected_used_ips=expected_used_ips, expected_total_ips=expected_total_ips) + def test_usages_query_list_with_fields_total_ips(self): + with self.network() as net: + with self.subnet(network=net): + # list by query fields: total_ips + params = 'fields=total_ips' + request = self.new_list_request(API_RESOURCE, params=params) + response = self.deserialize(self.fmt, + request.get_response(self.ext_api)) + self.assertIn(IP_AVAILS_KEY, response) + self.assertEqual(1, len(response[IP_AVAILS_KEY])) + availability = response[IP_AVAILS_KEY][0] + self.assertIn('total_ips', availability) + self.assertEqual(253, availability['total_ips']) + self.assertNotIn('network_id', availability) + + def test_usages_query_show_with_fields_total_ips(self): + with self.network() as net: + with self.subnet(network=net): + network = net['network'] + # Show by query fields: total_ips + params = ['total_ips'] + request = self.new_show_request(API_RESOURCE, + network['id'], + fields=params) + response = self.deserialize( + self.fmt, request.get_response(self.ext_api)) + self.assertIn(IP_AVAIL_KEY, response) + availability = response[IP_AVAIL_KEY] + self.assertIn('total_ips', availability) + self.assertEqual(253, availability['total_ips']) + self.assertNotIn('network_id', availability) + @staticmethod def _find_availability(availabilities, net_id): for ip_availability in availabilities: