Fix network profile subtype validation in N1kv plugin

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
(cherry picked from commit 1dd0bdc06d)
This commit is contained in:
Abhishek Raut 2014-05-01 18:16:33 -07:00 committed by Ihar Hrachyshka
parent 6ec9b6dc0f
commit 86e4b80b87
2 changed files with 16 additions and 1 deletions

View File

@ -1208,7 +1208,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)

View File

@ -264,6 +264,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):
@ -278,6 +280,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'