]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix network profile subtype validation in N1kv plugin
authorAbhishek Raut <abhraut@cisco.com>
Fri, 2 May 2014 01:16:33 +0000 (18:16 -0700)
committerAbhishek Raut <abhraut@cisco.com>
Fri, 2 May 2014 01:22:19 +0000 (18:22 -0700)
Network profile of type Trunk expects a subtype field for
creation. If a subtype is missing in the request body, plugin
should raise an exception. This patch fixes the validation logic
to detect missing subtype field.

Change-Id: I6b4fb533576a317f7d568b4a0fe4117b5464ffa6
Closes-Bug: 1315197

neutron/plugins/cisco/db/n1kv_db_v2.py
neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py

index 0d9fa212d1d77b4c2be28953d16a126b5ac67001..5e256bbef65bda6fb996b2092401e4fc8d6cd93d 100644 (file)
@@ -1210,7 +1210,7 @@ class NetworkProfile_db_mixin(object):
                 raise n_exc.InvalidInput(error_message=msg)
         if segment_type in [c_const.NETWORK_TYPE_TRUNK,
                             c_const.NETWORK_TYPE_OVERLAY]:
-            if "sub_type" not in net_p:
+            if not attributes.is_attr_set(net_p.get("sub_type")):
                 msg = _("Argument sub_type missing "
                         "for network profile")
                 LOG.exception(msg)
index 36910207630380dfc120bfee5f9aa8ceb14aa418..931ddf16e76193a705fc439913897dc7b675441b 100644 (file)
@@ -266,6 +266,8 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase):
             netp['network_profile']['sub_type'] = 'enhanced' or 'native_vxlan'
             netp['network_profile']['multicast_ip_range'] = ("224.1.1.1-"
                                                              "224.1.1.10")
+        elif segment_type == 'trunk':
+            netp['network_profile']['sub_type'] = 'vlan'
         return netp
 
     def test_create_network_profile_vlan(self):
@@ -280,6 +282,19 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase):
         res = net_p_req.get_response(self.ext_api)
         self.assertEqual(res.status_int, 201)
 
+    def test_create_network_profile_trunk(self):
+        data = self._prepare_net_profile_data('trunk')
+        net_p_req = self.new_create_request('network_profiles', data)
+        res = net_p_req.get_response(self.ext_api)
+        self.assertEqual(res.status_int, 201)
+
+    def test_create_network_profile_trunk_missing_subtype(self):
+        data = self._prepare_net_profile_data('trunk')
+        data['network_profile'].pop('sub_type')
+        net_p_req = self.new_create_request('network_profiles', data)
+        res = net_p_req.get_response(self.ext_api)
+        self.assertEqual(res.status_int, 400)
+
     def test_create_network_profile_overlay_unreasonable_seg_range(self):
         data = self._prepare_net_profile_data('overlay')
         data['network_profile']['segment_range'] = '10000-100000000001'