]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix adding identical metering rules on two labels
authorSylvain Afchain <sylvain.afchain@enovance.com>
Mon, 9 Sep 2013 11:02:19 +0000 (13:02 +0200)
committerSylvain Afchain <sylvain.afchain@enovance.com>
Mon, 23 Sep 2013 08:23:05 +0000 (10:23 +0200)
Fixes: Bug #1229075
Change-Id: Id86c83ec9c7af78fc08e662bb0a9202f0f759c0c

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

index 5d8f1e12cd7d400e2e63a40ea8f965b5c3c82a70..8bdaa7c0c23e9d66d58f476830a9718fa0dd1398 100644 (file)
@@ -144,9 +144,12 @@ class MeteringDbMixin(metering.MeteringPluginBase,
 
         return self._make_metering_label_rule_dict(metering_label_rule, fields)
 
-    def _validate_cidr(self, context, remote_ip_prefix, direction, excluded):
+    def _validate_cidr(self, context, label_id, remote_ip_prefix,
+                       direction, excluded):
         r_ips = self.get_metering_label_rules(context,
-                                              filters={'direction':
+                                              filters={'metering_label_id':
+                                                       label_id,
+                                                       'direction':
                                                        [direction],
                                                        'excluded':
                                                        [excluded]},
@@ -166,7 +169,8 @@ class MeteringDbMixin(metering.MeteringPluginBase,
             direction = m['direction']
             excluded = m['excluded']
 
-            self._validate_cidr(context, ip_prefix, direction, excluded)
+            self._validate_cidr(context, label_id, ip_prefix, direction,
+                                excluded)
             metering_db = MeteringLabelRule(id=uuidutils.generate_uuid(),
                                             metering_label_id=label_id,
                                             direction=direction,
index 69f98b2655e8423f45496d9307794c19395ed643..72319c057c5d22c1642ecca563311c360c88e19a 100644 (file)
@@ -263,6 +263,34 @@ class MeteringPluginDbTestCase(test_db_plugin.NeutronDbPluginV2TestCase,
                 self._test_list_resources('metering-label-rule',
                                           metering_label_rule)
 
+    def test_create_metering_label_rule_two_labels(self):
+        name1 = 'my label 1'
+        name2 = 'my label 2'
+        description = 'my metering label'
+
+        with self.metering_label(name1, description) as metering_label1:
+            metering_label_id1 = metering_label1['metering_label']['id']
+
+            with self.metering_label(name2, description) as metering_label2:
+                metering_label_id2 = metering_label2['metering_label']['id']
+
+                direction = 'egress'
+                remote_ip_prefix = '192.168.0.0/24'
+                excluded = True
+
+                with contextlib.nested(
+                    self.metering_label_rule(metering_label_id1,
+                                             direction,
+                                             remote_ip_prefix,
+                                             excluded),
+                    self.metering_label_rule(metering_label_id2,
+                                             direction,
+                                             remote_ip_prefix,
+                                             excluded)) as metering_label_rule:
+
+                    self._test_list_resources('metering-label-rule',
+                                              metering_label_rule)
+
 
 class TestMeteringDbXML(MeteringPluginDbTestCase):
     fmt = 'xml'