From 779ddd17c575b55612e59ae5a605a14689820b98 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 b98d76ba1..5a400dec4 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 7de5e1f08..b35d33119 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 591d1309f..1d1092b6a 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):