]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Neutron metering does not check overlap ip range
authorLiping Mao <limao@cisco.com>
Mon, 25 Aug 2014 15:30:21 +0000 (23:30 +0800)
committerLiping Mao <limao@cisco.com>
Tue, 16 Sep 2014 00:41:22 +0000 (08:41 +0800)
Neutron does not return "MeteringLabelRuleOverlaps" error, when the
remote ip ranges in the meter label rules are overlapped.

Change-Id: I4c2536a7d38b5f6d311db365c8c108d5367705a7
Closes-bug: #1361264

neutron/db/metering/metering_db.py
neutron/extensions/metering.py
neutron/tests/unit/db/metering/test_db_metering.py

index 36e5d0b44b7fc1dfeb8e0f4d8165d1af1a2b883f..16162a1043495f246442c62390989ca499a9517d 100644 (file)
@@ -150,7 +150,7 @@ class MeteringDbMixin(metering.MeteringPluginBase,
                        direction, excluded):
         r_ips = self.get_metering_label_rules(context,
                                               filters={'metering_label_id':
-                                                       label_id,
+                                                       [label_id],
                                                        'direction':
                                                        [direction],
                                                        'excluded':
index 2bb167dadda57ed424503153c9dd059abb3297aa..8273579db32940ec8911e6f858f260a184e18c28 100644 (file)
@@ -41,7 +41,7 @@ class MeteringLabelRuleNotFound(qexception.NotFound):
     message = _("Metering label rule %(rule_id)s does not exist")
 
 
-class MeteringLabelRuleOverlaps(qexception.NotFound):
+class MeteringLabelRuleOverlaps(qexception.Conflict):
     message = _("Metering label rule with remote_ip_prefix "
                 "%(remote_ip_prefix)s overlaps another")
 
index 8a217f544ce13af17bca55445d88cacbbe1515d0..7e7b21a5cc88d33962059fe346b4173351d1bbcb 100644 (file)
@@ -269,6 +269,29 @@ class TestMetering(MeteringPluginDbTestCase):
                 self._test_list_resources('metering-label-rule',
                                           metering_label_rule)
 
+    def test_create_overlap_metering_label_rules(self):
+        name = 'my label'
+        description = 'my metering label'
+
+        with self.metering_label(name, description) as metering_label:
+            metering_label_id = metering_label['metering_label']['id']
+
+            direction = 'egress'
+            remote_ip_prefix1 = '192.168.0.0/24'
+            remote_ip_prefix2 = '192.168.0.0/16'
+            excluded = True
+
+            with self.metering_label_rule(metering_label_id,
+                                          direction,
+                                          remote_ip_prefix1,
+                                          excluded):
+                res = self._create_metering_label_rule(self.fmt,
+                                                       metering_label_id,
+                                                       direction,
+                                                       remote_ip_prefix2,
+                                                       excluded)
+                self.assertEqual(webob.exc.HTTPConflict.code, res.status_int)
+
     def test_create_metering_label_rule_two_labels(self):
         name1 = 'my label 1'
         name2 = 'my label 2'