]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix port_id filter not honored
authoropenstack <sylvain.afchain@enovance.com>
Fri, 26 Apr 2013 12:31:06 +0000 (14:31 +0200)
committerSylvain Afchain <sylvain.afchain@enovance.com>
Wed, 1 May 2013 16:20:58 +0000 (18:20 +0200)
Add dict. to map API params to DB columns

Change-Id: I5f10eea77533e91afeb690e39301d7282e1b1620
Fixes: bug #1169706
quantum/db/l3_db.py
quantum/tests/unit/test_l3_plugin.py

index 953756ac720bc1b2aaa517e506c932571b5ac0e4..b5cc2c086f3f0a46de8ab398cea0592833229cad 100644 (file)
@@ -43,6 +43,11 @@ DEVICE_OWNER_ROUTER_INTF = l3_constants.DEVICE_OWNER_ROUTER_INTF
 DEVICE_OWNER_ROUTER_GW = l3_constants.DEVICE_OWNER_ROUTER_GW
 DEVICE_OWNER_FLOATINGIP = l3_constants.DEVICE_OWNER_FLOATINGIP
 
+# Maps API field to DB column
+# API parameter name and Database column names may differ.
+# Useful to keep the filtering between API and Database.
+API_TO_DB_COLUMN_MAP = {'port_id': 'fixed_port_id'}
+
 
 class Router(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
     """Represents a v2 quantum router."""
@@ -713,6 +718,11 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
                         page_reverse=False):
         marker_obj = self._get_marker_obj(context, 'floatingip', limit,
                                           marker)
+        if filters is not None:
+            for key, val in API_TO_DB_COLUMN_MAP.iteritems():
+                if key in filters:
+                    filters[val] = filters.pop(key)
+
         return self._get_collection(context, FloatingIP,
                                     self._make_floatingip_dict,
                                     filters=filters, fields=fields,
index 0152830fac510083b79b8d5e3b5461a68f02c832..47d7b74350e19f63e463c62dfe857dd8dbc1050d 100644 (file)
@@ -1328,6 +1328,15 @@ class L3NatDBTestCase(L3NatTestCaseBase):
                 self._delete('floatingips', fp2['floatingip']['id'])
                 self._delete('floatingips', fp3['floatingip']['id'])
 
+    def test_floatingip_list_with_port_id(self):
+        with self.floatingip_with_assoc() as fip:
+            port_id = fip['floatingip']['port_id']
+            res = self._list('floatingips',
+                             query_params="port_id=%s" % port_id)
+            self.assertEqual(len(res['floatingips']), 1)
+            res = self._list('floatingips', query_params="port_id=aaa")
+            self.assertEqual(len(res['floatingips']), 0)
+
     def test_floatingip_list_with_pagination(self):
         with contextlib.nested(self.subnet(cidr="10.0.0.0/24"),
                                self.subnet(cidr="11.0.0.0/24"),