From 7f1bf373c2e9bd3583f8f6f39d4c6a6147316337 Mon Sep 17 00:00:00 2001 From: Steven Hillman Date: Tue, 8 Jul 2014 15:35:10 -0700 Subject: [PATCH] Send network name and uuid to subnet create Added the network segment name and uuid parameters to the infomation sent to Cisco N1kV during subnet creation to allow for proper association of the subnet and network segment. Change-Id: I375d49ec43f79360189ecf5de0583873b8039db9 Closes-Bug: 1332713 --- neutron/plugins/cisco/n1kv/n1kv_client.py | 2 ++ neutron/tests/unit/cisco/n1kv/fake_client.py | 10 +++++++++- neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py | 13 +++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/neutron/plugins/cisco/n1kv/n1kv_client.py b/neutron/plugins/cisco/n1kv/n1kv_client.py index b98d76ba1a..5a400dec48 100644 --- a/neutron/plugins/cisco/n1kv/n1kv_client.py +++ b/neutron/plugins/cisco/n1kv/n1kv_client.py @@ -313,6 +313,8 @@ class Client(object): 'dhcp': subnet['enable_dhcp'], 'dnsServersList': subnet['dns_nameservers'], 'networkAddress': network_address, + 'netSegmentName': subnet['network_id'], + 'id': subnet['id'], 'tenantId': subnet['tenant_id']} return self._post(self.ip_pool_path % subnet['id'], body=body) diff --git a/neutron/tests/unit/cisco/n1kv/fake_client.py b/neutron/tests/unit/cisco/n1kv/fake_client.py index 7de5e1f08a..b35d331197 100755 --- a/neutron/tests/unit/cisco/n1kv/fake_client.py +++ b/neutron/tests/unit/cisco/n1kv/fake_client.py @@ -26,7 +26,11 @@ _resource_metadata = {'port': ['id', 'macAddress', 'ipAddress', 'subnetId'], 'networkSegment', 'portProfile', 'portProfileId', 'tenantId', 'portId', 'macAddress', - 'ipAddress', 'subnetId']} + 'ipAddress', 'subnetId'], + 'subnet': ['addressRangeStart', 'addressRangeEnd', + 'ipAddressSubnet', 'description', 'gateway', + 'dhcp', 'dnsServersList', 'networkAddress', + 'netSegmentName', 'id', 'tenantId']} class TestClient(n1kv_client.Client): @@ -75,6 +79,10 @@ def _validate_resource(action, body=None): port_set = set(_resource_metadata['port']) if body_set - port_set: raise c_exc.VSMError(reason='Invalid Request') + elif 'subnet' in action: + subnet_set = set(_resource_metadata['subnet']) + if body_set - subnet_set: + raise c_exc.VSMError(reason='Invalid Request') else: return diff --git a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py index 591d1309f3..1d1092b6a8 100644 --- a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py +++ b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py @@ -696,6 +696,19 @@ class TestN1kvSubnets(test_plugin.TestSubnetsV2, def setUp(self): super(TestN1kvSubnets, self).setUp() + def test_create_subnet_with_invalid_parameters(self): + """Test subnet creation with invalid parameters sent to the VSM""" + with self.network() as network: + client_patch = mock.patch(n1kv_client.__name__ + ".Client", + new=fake_client.TestClientInvalidRequest) + client_patch.start() + data = {'subnet': {'network_id': network['network']['id'], + 'cidr': "10.0.0.0/24"}} + subnet_req = self.new_create_request('subnets', data) + subnet_resp = subnet_req.get_response(self.api) + # Subnet creation should fail due to invalid network name + self.assertEqual(subnet_resp.status_int, 400) + class TestN1kvL3Test(test_l3_plugin.L3NatExtensionTestCase):