diff --git a/kuryr/controllers.py b/kuryr/controllers.py index 621d76af..e0d40b89 100644 --- a/kuryr/controllers.py +++ b/kuryr/controllers.py @@ -512,8 +512,14 @@ def network_driver_create_network(): try: if neutron_uuid: networks = _get_networks_by_attrs(id=neutron_uuid) + specified_network = neutron_uuid else: networks = _get_networks_by_attrs(name=neutron_name) + specified_network = neutron_name + if not networks: + raise exceptions.KuryrException( + ("Specified network id/name({0}) does not " + "exist.").format(specified_network)) network_id = networks[0]['id'] except n_exceptions.NeutronClientException as ex: app.logger.error(_LE("Error happened during listing " diff --git a/kuryr/tests/unit/test_kuryr.py b/kuryr/tests/unit/test_kuryr.py index 6cbf1c50..f3108396 100644 --- a/kuryr/tests/unit/test_kuryr.py +++ b/kuryr/tests/unit/test_kuryr.py @@ -233,6 +233,86 @@ class TestKuryr(base.TestKuryrBase): decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json) + def test_network_driver_create_network_with_network_id_not_exist(self): + docker_network_id = hashlib.sha256( + utils.getrandbits(256)).hexdigest() + + self.mox.StubOutWithMock(app.neutron, "list_networks") + fake_neutron_net_id = str(uuid.uuid4()) + fake_existing_networks_response = { + "networks": [] + } + app.neutron.list_networks( + id=fake_neutron_net_id).AndReturn( + fake_existing_networks_response) + self.mox.ReplayAll() + network_request = { + 'NetworkID': docker_network_id, + 'IPv4Data': [{ + 'AddressSpace': 'foo', + 'Pool': '192.168.42.0/24', + }], + 'IPv6Data': [{ + 'AddressSpace': 'bar', + 'Pool': 'fe80::/64', + 'Gateway': 'fe80::f816:3eff:fe20:57c3/64', + }], + 'Options': { + constants.NETWORK_GENERIC_OPTIONS: { + constants.NEUTRON_UUID_OPTION: fake_neutron_net_id + } + } + } + response = self.app.post('/NetworkDriver.CreateNetwork', + content_type='application/json', + data=jsonutils.dumps(network_request)) + self.assertEqual(500, response.status_code) + decoded_json = jsonutils.loads(response.data) + self.assertIn('Err', decoded_json) + err_message = ("Specified network id/name({0}) does not " + "exist.").format(fake_neutron_net_id) + self.assertEqual({'Err': err_message}, decoded_json) + + def test_network_driver_create_network_with_network_name_not_exist(self): + docker_network_id = hashlib.sha256( + utils.getrandbits(256)).hexdigest() + + self.mox.StubOutWithMock(app.neutron, "list_networks") + fake_neutron_network_name = "fake_network" + fake_existing_networks_response = { + "networks": [] + } + app.neutron.list_networks( + name=fake_neutron_network_name).AndReturn( + fake_existing_networks_response) + self.mox.ReplayAll() + network_request = { + 'NetworkID': docker_network_id, + 'IPv4Data': [{ + 'AddressSpace': 'foo', + 'Pool': '192.168.42.0/24', + }], + 'IPv6Data': [{ + 'AddressSpace': 'bar', + 'Pool': 'fe80::/64', + 'Gateway': 'fe80::f816:3eff:fe20:57c3/64', + }], + 'Options': { + constants.NETWORK_GENERIC_OPTIONS: { + constants.NEUTRON_NAME_OPTION: fake_neutron_network_name + } + } + } + response = self.app.post('/NetworkDriver.CreateNetwork', + content_type='application/json', + data=jsonutils.dumps(network_request)) + self.assertEqual(500, response.status_code) + decoded_json = jsonutils.loads(response.data) + self.assertIn('Err', decoded_json) + err_message = ("Specified network id/name({0}) does not " + "exist.").format(fake_neutron_network_name) + self.assertEqual({'Err': err_message}, decoded_json) + def test_network_driver_delete_network(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest()