From abba5574ca219ea3180edfa018ef36d98015394a Mon Sep 17 00:00:00 2001 From: ivan-zhu Date: Sat, 29 Dec 2012 16:34:27 +0800 Subject: [PATCH] Add API sample tests to FixedIPs extension Partially implements blueprint nova-api-samples Bug 1091739 Change-Id: Ie10fd85199ec10de29e99338c748f34cc04aeeb6 --- .../os-fixed-ips/fixedip-post-req.json | 3 + .../os-fixed-ips/fixedip-post-req.xml | 2 + .../os-fixed-ips/fixedips-get-resp.json | 8 ++ .../os-fixed-ips/fixedips-get-resp.xml | 7 ++ .../os-fixed-ips/fixedip-post-req.json.tpl | 3 + .../os-fixed-ips/fixedip-post-req.xml.tpl | 2 + .../os-fixed-ips/fixedips-get-resp.json.tpl | 8 ++ .../os-fixed-ips/fixedips-get-resp.xml.tpl | 7 ++ nova/tests/integrated/test_api_samples.py | 86 ++++++++++++++++++- 9 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 doc/api_samples/os-fixed-ips/fixedip-post-req.json create mode 100644 doc/api_samples/os-fixed-ips/fixedip-post-req.xml create mode 100644 doc/api_samples/os-fixed-ips/fixedips-get-resp.json create mode 100644 doc/api_samples/os-fixed-ips/fixedips-get-resp.xml create mode 100644 nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.json.tpl create mode 100644 nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.xml.tpl create mode 100644 nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.json.tpl create mode 100644 nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.xml.tpl diff --git a/doc/api_samples/os-fixed-ips/fixedip-post-req.json b/doc/api_samples/os-fixed-ips/fixedip-post-req.json new file mode 100644 index 000000000000..cf8ba0e0bdcf --- /dev/null +++ b/doc/api_samples/os-fixed-ips/fixedip-post-req.json @@ -0,0 +1,3 @@ +{ + "reserve": "None" +} \ No newline at end of file diff --git a/doc/api_samples/os-fixed-ips/fixedip-post-req.xml b/doc/api_samples/os-fixed-ips/fixedip-post-req.xml new file mode 100644 index 000000000000..e29b685be2e5 --- /dev/null +++ b/doc/api_samples/os-fixed-ips/fixedip-post-req.xml @@ -0,0 +1,2 @@ + +None \ No newline at end of file diff --git a/doc/api_samples/os-fixed-ips/fixedips-get-resp.json b/doc/api_samples/os-fixed-ips/fixedips-get-resp.json new file mode 100644 index 000000000000..d63c91559aa9 --- /dev/null +++ b/doc/api_samples/os-fixed-ips/fixedips-get-resp.json @@ -0,0 +1,8 @@ +{ + "fixed_ip": { + "address": "192.168.1.1", + "cidr": "192.168.1.0/24", + "host": "host", + "hostname": "openstack" + } +} \ No newline at end of file diff --git a/doc/api_samples/os-fixed-ips/fixedips-get-resp.xml b/doc/api_samples/os-fixed-ips/fixedips-get-resp.xml new file mode 100644 index 000000000000..a9676721f371 --- /dev/null +++ b/doc/api_samples/os-fixed-ips/fixedips-get-resp.xml @@ -0,0 +1,7 @@ + + + 192.168.1.0/24 + openstack + host +
192.168.1.1
+
\ No newline at end of file diff --git a/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.json.tpl b/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.json.tpl new file mode 100644 index 000000000000..85ae4890add0 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.json.tpl @@ -0,0 +1,3 @@ +{ + "reserve": "%(reserve)s" +} diff --git a/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.xml.tpl b/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.xml.tpl new file mode 100644 index 000000000000..3896b24eb6fe --- /dev/null +++ b/nova/tests/integrated/api_samples/os-fixed-ips/fixedip-post-req.xml.tpl @@ -0,0 +1,2 @@ + +%(reserve)s diff --git a/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.json.tpl b/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.json.tpl new file mode 100644 index 000000000000..a3d11475bfdd --- /dev/null +++ b/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.json.tpl @@ -0,0 +1,8 @@ +{ + "fixed_ip": { + "cidr": "%(cidr)s", + "hostname": "%(hostname)s", + "host": "%(host)s", + "address": "%(address)s" + } +} diff --git a/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.xml.tpl b/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.xml.tpl new file mode 100644 index 000000000000..3e9598f347be --- /dev/null +++ b/nova/tests/integrated/api_samples/os-fixed-ips/fixedips-get-resp.xml.tpl @@ -0,0 +1,7 @@ + + + %(cidr)s + %(hostname)s + %(host)s +
%(address)s
+
diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index a33b39da4d47..bfa5a7b146e6 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -30,6 +30,7 @@ from nova.compute import api from nova import context from nova import db from nova.db.sqlalchemy import models +from nova import exception from nova.network import api from nova.network.manager import NetworkManager from nova.openstack.common import cfg @@ -355,7 +356,6 @@ class ApiSamplesTrap(ApiSampleTestBase): do_not_approve_additions.append('os-config-drive') do_not_approve_additions.append('os-coverage') do_not_approve_additions.append('os-create-server-ext') - do_not_approve_additions.append('os-fixed-ips') do_not_approve_additions.append('os-flavor-access') do_not_approve_additions.append('os-flavor-extra-specs') do_not_approve_additions.append('os-flavor-rxtx') @@ -1490,6 +1490,90 @@ class AgentsXmlTest(AgentsJsonTest): ctype = "xml" +class FixedIpJsonTest(ApiSampleTestBase): + extension_name = "nova.api.openstack.compute.contrib.fixed_ips.Fixed_ips" + + def _get_flags(self): + f = super(FixedIpJsonTest, self)._get_flags() + f['osapi_compute_extension'] = CONF.osapi_compute_extension[:] + return f + + def setUp(self): + super(FixedIpJsonTest, self).setUp() + + fake_fixed_ips = [{'id': 1, + 'address': '192.168.1.1', + 'network_id': 1, + 'virtual_interface_id': 1, + 'instance_uuid': '1', + 'allocated': False, + 'leased': False, + 'reserved': False, + 'host': None}, + {'id': 2, + 'address': '192.168.1.2', + 'network_id': 1, + 'virtual_interface_id': 2, + 'instance_uuid': '2', + 'allocated': False, + 'leased': False, + 'reserved': False, + 'host': None}, + ] + + def fake_fixed_ip_get_by_address(context, address): + for fixed_ip in fake_fixed_ips: + if fixed_ip['address'] == address: + return fixed_ip + raise exception.FixedIpNotFoundForAddress(address=address) + + def fake_fixed_ip_get_by_address_detailed(context, address): + network = {'id': 1, + 'cidr': "192.168.1.0/24"} + host = {'host': "host", + 'hostname': 'openstack'} + for fixed_ip in fake_fixed_ips: + if fixed_ip['address'] == address: + return (fixed_ip, network, host) + raise exception.FixedIpNotFoundForAddress(address=address) + + def fake_fixed_ip_update(context, address, values): + fixed_ip = fake_fixed_ip_get_by_address(context, address) + if fixed_ip is None: + raise exception.FixedIpNotFoundForAddress(address=address) + else: + for key in values: + fixed_ip[key] = values[key] + + self.stubs.Set(db, "fixed_ip_get_by_address", + fake_fixed_ip_get_by_address) + self.stubs.Set(db, "fixed_ip_get_by_address_detailed", + fake_fixed_ip_get_by_address_detailed) + self.stubs.Set(db, "fixed_ip_update", fake_fixed_ip_update) + + def test_fixed_ip_reserve(self): + """Reserve a Fixed IP""" + project = {'reserve': None} + response = self._do_post('os-fixed-ips/192.168.1.1/action', + 'fixedip-post-req', + project) + self.assertEqual(response.status, 202) + + def test_get_fixed_ip(self): + """Return data about the given fixed ip.""" + response = self._do_get('os-fixed-ips/192.168.1.1') + self.assertEqual(response.status, 200) + project = {'cidr': '192.168.1.0/24', + 'hostname': 'openstack', + 'host': 'host', + 'address': '192.168.1.1'} + return self._verify_response('fixedips-get-resp', project, response) + + +class FixedIpXmlTest(FixedIpJsonTest): + ctype = "xml" + + class AggregatesSampleJsonTest(ServersSampleBase): extension_name = "nova.api.openstack.compute.contrib" + \ ".aggregates.Aggregates"