diff --git a/doc/api_samples/os-multinic/multinic-add-fixed-ip-req.json b/doc/api_samples/os-multinic/multinic-add-fixed-ip-req.json index 2596f664e33b..aa1249e69a3c 100644 --- a/doc/api_samples/os-multinic/multinic-add-fixed-ip-req.json +++ b/doc/api_samples/os-multinic/multinic-add-fixed-ip-req.json @@ -1,5 +1,5 @@ { "addFixedIp": { - "networkId": 1 + "networkId": "e1882e38-38c2-4239-ade7-35d644cb963a" } } \ No newline at end of file diff --git a/doc/api_samples/os-multinic/multinic-remove-fixed-ip-req.json b/doc/api_samples/os-multinic/multinic-remove-fixed-ip-req.json index 8f0d030deffa..f93dab91f6e8 100644 --- a/doc/api_samples/os-multinic/multinic-remove-fixed-ip-req.json +++ b/doc/api_samples/os-multinic/multinic-remove-fixed-ip-req.json @@ -1,5 +1,5 @@ { - "removeFixedIp":{ + "removeFixedIp": { "address": "10.0.0.4" - } + } } diff --git a/nova/tests/fixtures.py b/nova/tests/fixtures.py index df29187f289e..c5721d1218d8 100644 --- a/nova/tests/fixtures.py +++ b/nova/tests/fixtures.py @@ -37,6 +37,7 @@ from nova import context from nova.db import migration from nova.db.sqlalchemy import api as session from nova import exception +from nova.network import model as network_model from nova import objects from nova.objects import base as obj_base from nova.objects import service as service_obj @@ -1046,6 +1047,55 @@ class NeutronFixture(fixtures.Fixture): 'tenant_id': tenant_id } + nw_info = [{ + "profile": {}, + "ovs_interfaceid": "b71f1699-42be-4515-930a-f3ef01f94aa7", + "preserve_on_delete": False, + "network": { + "bridge": "br-int", + "subnets": [{ + "ips": [{ + "meta": {}, + "version": 4, + "type": "fixed", + "floating_ips": [], + "address": "10.0.0.4" + }], + "version": 4, + "meta": {}, + "dns": [], + "routes": [], + "cidr": "10.0.0.0/26", + "gateway": { + "meta": {}, + "version": 4, + "type": "gateway", + "address": "10.0.0.1" + } + }], + "meta": { + "injected": False, + "tenant_id": tenant_id, + "mtu": 1500 + }, + "id": "e1882e38-38c2-4239-ade7-35d644cb963a", + "label": "public" + }, + "devname": "tapb71f1699-42", + "vnic_type": "normal", + "qbh_params": None, + "meta": {}, + "details": { + "port_filter": True, + "ovs_hybrid_plug": True + }, + "address": "fa:16:3e:47:94:4a", + "active": True, + "type": "ovs", + "id": "b71f1699-42be-4515-930a-f3ef01f94aa7", + "qbg_params": None + }] + def __init__(self, test, multiple_ports=False): super(NeutronFixture, self).__init__() self.test = test @@ -1068,6 +1118,14 @@ class NeutronFixture(fixtures.Fixture): self.test.stub_out( 'nova.network.neutronv2.api.API.migrate_instance_start', lambda *args, **kwargs: None) + self.test.stub_out( + 'nova.network.neutronv2.api.API.add_fixed_ip_to_instance', + lambda *args, **kwargs: network_model.NetworkInfo.hydrate( + NeutronFixture.nw_info)) + self.test.stub_out( + 'nova.network.neutronv2.api.API.remove_fixed_ip_from_instance', + lambda *args, **kwargs: network_model.NetworkInfo.hydrate( + NeutronFixture.nw_info)) self.test.stub_out( 'nova.network.neutronv2.api.API.migrate_instance_finish', lambda *args, **kwargs: None) diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-add-fixed-ip-req.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-add-fixed-ip-req.json.tpl index 596ac1707b57..34d4553baad8 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-add-fixed-ip-req.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-add-fixed-ip-req.json.tpl @@ -1,5 +1,5 @@ { "addFixedIp": { - "networkId": %(networkId)s + "networkId": "%(networkId)s" } } diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-remove-fixed-ip-req.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-remove-fixed-ip-req.json.tpl index 7367e1242ceb..49e2f04ec11d 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-remove-fixed-ip-req.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/os-multinic/multinic-remove-fixed-ip-req.json.tpl @@ -1,5 +1,5 @@ { - "removeFixedIp":{ + "removeFixedIp": { "address": "%(ip)s" - } + } } diff --git a/nova/tests/functional/api_sample_tests/test_multinic.py b/nova/tests/functional/api_sample_tests/test_multinic.py index dc2df7dff9e0..8793f1ddb372 100644 --- a/nova/tests/functional/api_sample_tests/test_multinic.py +++ b/nova/tests/functional/api_sample_tests/test_multinic.py @@ -13,27 +13,40 @@ # License for the specific language governing permissions and limitations # under the License. -from nova.tests.functional.api_sample_tests import test_servers +from nova.tests import fixtures +from nova.tests.functional.api_sample_tests import api_sample_base +from nova.tests.functional import integrated_helpers -class MultinicSampleJsonTest(test_servers.ServersSampleBase): +class MultinicSampleJsonTest(integrated_helpers.InstanceHelperMixin, + api_sample_base.ApiSampleTestBaseV21): ADMIN_API = True + USE_NEUTRON = True sample_dir = "os-multinic" - def _disable_instance_dns_manager(self): - # NOTE(markmc): it looks like multinic and instance_dns_manager are - # incompatible. See: - # https://bugs.launchpad.net/nova/+bug/1213251 - self.flags( - instance_dns_manager='nova.network.noop_dns_driver.NoopDNSDriver') - def setUp(self): - self._disable_instance_dns_manager() super(MultinicSampleJsonTest, self).setUp() - self.uuid = self._post_server() + self.neutron = fixtures.NeutronFixture(self) + self.useFixture(self.neutron) + server = self._boot_a_server( + extra_params={'networks': [{'port': self.neutron.port_1['id']}]}) + self.uuid = server['id'] + + def _boot_a_server(self, expected_status='ACTIVE', extra_params=None): + server = self._build_minimal_create_server_request( + self.api, 'MultinicSampleJsonTestServer') + if extra_params: + server.update(extra_params) + + created_server = self.api.post_server({'server': server}) + + # Wait for it to finish being created + found_server = self._wait_for_state_change(self.api, created_server, + expected_status) + return found_server def _add_fixed_ip(self): - subs = {"networkId": '1'} + subs = {"networkId": 'e1882e38-38c2-4239-ade7-35d644cb963a'} response = self._do_post('servers/%s/action' % (self.uuid), 'multinic-add-fixed-ip-req', subs) self.assertEqual(202, response.status_code)