diff options
author | Takashi NATSUME <natsume.takashi@lab.ntt.co.jp> | 2015-12-25 11:55:05 +0900 |
---|---|---|
committer | Takashi NATSUME <natsume.takashi@lab.ntt.co.jp> | 2016-01-27 02:45:22 +0000 |
commit | f194a5abadfaf996c305e9c12aabdd53443773fb (patch) | |
tree | 20d5e69a468d39980d48da56156512ef460487a4 | |
parent | f9aa277c62a05648e030dfeaf21d653ec6a388f3 (diff) | |
download | python-novaclient-f194a5abadfaf996c305e9c12aabdd53443773fb.tar.gz |
Add return-request-id-to-caller function(2/5)
Add return-request-id-to-caller function to
resources and resource managers in the following files.
The methods in the resource class and resource manager return
a wrapper class that has 'request_ids' property.
The caller can get request ids of the callee via the property.
* novaclient/v2/agents.py
* novaclient/v2/aggregates.py
* novaclient/v2/availability_zones.py
* novaclient/v2/certs.py
* novaclient/v2/cloudpipe.py
* novaclient/v2/fixed_ips.py
* novaclient/v2/flavor_access.py
* novaclient/v2/flavors.py
* novaclient/v2/floating_ip_dns.py
* novaclient/v2/floating_ip_pools.py
* novaclient/v2/floating_ips_bulk.py
* novaclient/v2/floating_ips.py
* novaclient/v2/fping.py
* novaclient/v2/hosts.py
* novaclient/v2/hypervisors.py
* novaclient/v2/images.py
Co-authored-by: Ankit Agrawal <ankit11.agrawal@nttdata.com>
Change-Id: Ic624d532f1a468dd45105bbb5aa6d8a730984338
Implements: blueprint return-request-id-to-caller
32 files changed, 328 insertions, 93 deletions
diff --git a/novaclient/tests/unit/fixture_data/aggregates.py b/novaclient/tests/unit/fixture_data/aggregates.py index ed743ed1..96c3d207 100644 --- a/novaclient/tests/unit/fixture_data/aggregates.py +++ b/novaclient/tests/unit/fixture_data/aggregates.py @@ -49,4 +49,5 @@ class Fixture(base.Fixture): json=get_aggregates_1, headers=self.json_headers) - self.requests.register_uri('DELETE', self.url(1), status_code=202) + self.requests.register_uri('DELETE', self.url(1), status_code=202, + headers=self.json_headers) diff --git a/novaclient/tests/unit/fixture_data/floatingips.py b/novaclient/tests/unit/fixture_data/floatingips.py index f5ad1c10..6ddc9e36 100644 --- a/novaclient/tests/unit/fixture_data/floatingips.py +++ b/novaclient/tests/unit/fixture_data/floatingips.py @@ -83,10 +83,11 @@ class DNSFixture(base.Fixture): headers=self.json_headers, status_code=205) - self.requests.register_uri('DELETE', self.url('testdomain')) + self.requests.register_uri('DELETE', self.url('testdomain'), + headers=self.json_headers) url = self.url('testdomain', 'entries', 'testname') - self.requests.register_uri('DELETE', url) + self.requests.register_uri('DELETE', url, headers=self.json_headers) def put_dns_testdomain_entries_testname(request, context): body = jsonutils.loads(request.body) diff --git a/novaclient/tests/unit/fixture_data/hosts.py b/novaclient/tests/unit/fixture_data/hosts.py index 160eb398..7c9b3be8 100644 --- a/novaclient/tests/unit/fixture_data/hosts.py +++ b/novaclient/tests/unit/fixture_data/hosts.py @@ -36,7 +36,7 @@ class BaseFixture(base.Fixture): ] } - headers = {'Content-Type': 'application/json'} + headers = self.json_headers self.requests.register_uri('GET', self.url('host'), json=get_os_hosts_host, diff --git a/novaclient/tests/unit/fixture_data/hypervisors.py b/novaclient/tests/unit/fixture_data/hypervisors.py index 62952f08..229dfd75 100644 --- a/novaclient/tests/unit/fixture_data/hypervisors.py +++ b/novaclient/tests/unit/fixture_data/hypervisors.py @@ -27,7 +27,7 @@ class V1(base.Fixture): ] } - self.headers = {'Content-Type': 'application/json'} + self.headers = self.json_headers self.requests.register_uri('GET', self.url(), json=get_os_hypervisors, diff --git a/novaclient/tests/unit/fixture_data/images.py b/novaclient/tests/unit/fixture_data/images.py index 0eb8a14f..9498b8e3 100644 --- a/novaclient/tests/unit/fixture_data/images.py +++ b/novaclient/tests/unit/fixture_data/images.py @@ -30,7 +30,7 @@ class V1(base.Fixture): ] } - headers = {'Content-Type': 'application/json'} + headers = self.json_headers self.requests.register_uri('GET', self.url(), json=get_images, @@ -78,7 +78,8 @@ class V1(base.Fixture): headers=headers) for u in (1, '1/metadata/test_key'): - self.requests.register_uri('DELETE', self.url(u), status_code=204) + self.requests.register_uri('DELETE', self.url(u), status_code=204, + headers=headers) class V3(V1): diff --git a/novaclient/tests/unit/v2/fakes.py b/novaclient/tests/unit/v2/fakes.py index ceb6672e..668ee95c 100644 --- a/novaclient/tests/unit/v2/fakes.py +++ b/novaclient/tests/unit/v2/fakes.py @@ -809,7 +809,7 @@ class FakeHTTPClient(base_client.HTTPClient): if k not in ['id', 'name']: del flavor[k] - return (200, {}, flavors) + return (200, FAKE_RESPONSE_HEADERS, flavors) def get_flavors_detail(self, **kw): flavors = {'flavors': [ @@ -852,12 +852,12 @@ class FakeHTTPClient(base_client.HTTPClient): if not v['os-flavor-access:is_public'] ] - return (200, {}, flavors) + return (200, FAKE_RESPONSE_HEADERS, flavors) def get_flavors_1(self, **kw): return ( 200, - {}, + FAKE_RESPONSE_HEADERS, {'flavor': self.get_flavors_detail(is_public='None')[2]['flavors'][0]} ) @@ -874,7 +874,7 @@ class FakeHTTPClient(base_client.HTTPClient): # Diablo has no ephemeral return ( 200, - {}, + FAKE_RESPONSE_HEADERS, {'flavor': { 'id': 3, 'name': '256 MB Server', @@ -896,7 +896,7 @@ class FakeHTTPClient(base_client.HTTPClient): # Alphanumeric flavor id are allowed. return ( 200, - {}, + FAKE_RESPONSE_HEADERS, {'flavor': self.get_flavors_detail(is_public='None')[2]['flavors'][3]} ) @@ -910,15 +910,15 @@ class FakeHTTPClient(base_client.HTTPClient): ) def delete_flavors_flavordelete(self, **kw): - return (202, {}, None) + return (202, FAKE_RESPONSE_HEADERS, None) def delete_flavors_2(self, **kw): - return (202, {}, None) + return (202, FAKE_RESPONSE_HEADERS, None) def post_flavors(self, body, **kw): return ( 202, - {}, + FAKE_RESPONSE_HEADERS, {'flavor': self.get_flavors_detail(is_public='None')[2]['flavors'][0]} ) @@ -952,7 +952,7 @@ class FakeHTTPClient(base_client.HTTPClient): required=['k1']) return ( 200, - {}, + FAKE_RESPONSE_HEADERS, {'extra_specs': {"k1": "v1"}}) def post_flavors_4_os_extra_specs(self, body, **kw): @@ -960,7 +960,7 @@ class FakeHTTPClient(base_client.HTTPClient): return ( 200, - {}, + FAKE_RESPONSE_HEADERS, body) def delete_flavors_1_os_extra_specs_k1(self, **kw): @@ -975,12 +975,13 @@ class FakeHTTPClient(base_client.HTTPClient): def get_flavors_2_os_flavor_access(self, **kw): return ( - 200, {}, + 200, FAKE_RESPONSE_HEADERS, {'flavor_access': [{'flavor_id': '2', 'tenant_id': 'proj1'}, {'flavor_id': '2', 'tenant_id': 'proj2'}]}) def post_flavors_2_action(self, body, **kw): - return (202, {}, self.get_flavors_2_os_flavor_access()[2]) + return (202, FAKE_RESPONSE_HEADERS, + self.get_flavors_2_os_flavor_access()[2]) # # Floating IPs diff --git a/novaclient/tests/unit/v2/test_agents.py b/novaclient/tests/unit/v2/test_agents.py index e7fa7d6e..8cf67c1a 100644 --- a/novaclient/tests/unit/v2/test_agents.py +++ b/novaclient/tests/unit/v2/test_agents.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import agents as data from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import agents @@ -50,7 +51,8 @@ class AgentsTest(utils.FixturedTestCase): ] } - headers = {'Content-Type': 'application/json'} + headers = {'Content-Type': 'application/json', + 'x-openstack-request-id': fakes.FAKE_REQUEST_ID} self.requests.register_uri('GET', self.data_fixture.url(), json=get_os_agents, headers=headers) @@ -59,6 +61,7 @@ class AgentsTest(utils.FixturedTestCase): self.stub_hypervisors() ags = self.cs.agents.list() self.assert_called('GET', '/os-agents') + self.assert_request_id(ags, fakes.FAKE_REQUEST_ID_LIST) for a in ags: self.assertIsInstance(a, agents.Agent) self.assertEqual('kvm', a.hypervisor) @@ -67,6 +70,7 @@ class AgentsTest(utils.FixturedTestCase): self.stub_hypervisors('xen') ags = self.cs.agents.list('xen') self.assert_called('GET', '/os-agents?hypervisor=xen') + self.assert_request_id(ags, fakes.FAKE_REQUEST_ID_LIST) for a in ags: self.assertIsInstance(a, agents.Agent) self.assertEqual('xen', a.hypervisor) @@ -76,6 +80,7 @@ class AgentsTest(utils.FixturedTestCase): '/xxx/xxx/xxx', 'add6bb58e139be103324d04d82d8f546', 'xen') + self.assert_request_id(ag, fakes.FAKE_REQUEST_ID_LIST) body = {'agent': {'url': '/xxx/xxx/xxx', 'hypervisor': 'xen', 'md5hash': 'add6bb58e139be103324d04d82d8f546', @@ -86,7 +91,8 @@ class AgentsTest(utils.FixturedTestCase): self.assertEqual(1, ag._info.copy()['id']) def test_agents_delete(self): - self.cs.agents.delete('1') + ret = self.cs.agents.delete('1') + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-agents/1') def _build_example_update_body(self): @@ -99,6 +105,7 @@ class AgentsTest(utils.FixturedTestCase): ag = self.cs.agents.update('1', '8.0', '/yyy/yyyy/yyyy', 'add6bb58e139be103324d04d82d8f546') + self.assert_request_id(ag, fakes.FAKE_REQUEST_ID_LIST) body = self._build_example_update_body() self.assert_called('PUT', '/os-agents/1', body) self.assertEqual(1, ag.id) diff --git a/novaclient/tests/unit/v2/test_aggregates.py b/novaclient/tests/unit/v2/test_aggregates.py index 97a3ffc2..1de12823 100644 --- a/novaclient/tests/unit/v2/test_aggregates.py +++ b/novaclient/tests/unit/v2/test_aggregates.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import aggregates as data from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import aggregates @@ -28,6 +29,7 @@ class AggregatesTest(utils.FixturedTestCase): def test_list_aggregates(self): result = self.cs.aggregates.list() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-aggregates') for aggregate in result: self.assertIsInstance(aggregate, aggregates.Aggregate) @@ -35,24 +37,29 @@ class AggregatesTest(utils.FixturedTestCase): def test_create_aggregate(self): body = {"aggregate": {"name": "test", "availability_zone": "nova1"}} aggregate = self.cs.aggregates.create("test", "nova1") + self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates', body) self.assertIsInstance(aggregate, aggregates.Aggregate) def test_get(self): aggregate = self.cs.aggregates.get("1") + self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-aggregates/1') self.assertIsInstance(aggregate, aggregates.Aggregate) aggregate2 = self.cs.aggregates.get(aggregate) + self.assert_request_id(aggregate2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-aggregates/1') self.assertIsInstance(aggregate2, aggregates.Aggregate) def test_get_details(self): aggregate = self.cs.aggregates.get_details("1") + self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-aggregates/1') self.assertIsInstance(aggregate, aggregates.Aggregate) aggregate2 = self.cs.aggregates.get_details(aggregate) + self.assert_request_id(aggregate2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-aggregates/1') self.assertIsInstance(aggregate2, aggregates.Aggregate) @@ -62,10 +69,12 @@ class AggregatesTest(utils.FixturedTestCase): body = {"aggregate": values} result1 = aggregate.update(values) + self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-aggregates/1', body) self.assertIsInstance(result1, aggregates.Aggregate) result2 = self.cs.aggregates.update(2, values) + self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-aggregates/2', body) self.assertIsInstance(result2, aggregates.Aggregate) @@ -75,6 +84,7 @@ class AggregatesTest(utils.FixturedTestCase): body = {"aggregate": values} result3 = self.cs.aggregates.update(aggregate, values) + self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-aggregates/1', body) self.assertIsInstance(result3, aggregates.Aggregate) @@ -84,14 +94,17 @@ class AggregatesTest(utils.FixturedTestCase): body = {"add_host": {"host": "host1"}} result1 = aggregate.add_host(host) + self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result1, aggregates.Aggregate) result2 = self.cs.aggregates.add_host("2", host) + self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/2/action', body) self.assertIsInstance(result2, aggregates.Aggregate) result3 = self.cs.aggregates.add_host(aggregate, host) + self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result3, aggregates.Aggregate) @@ -101,14 +114,17 @@ class AggregatesTest(utils.FixturedTestCase): body = {"remove_host": {"host": "host1"}} result1 = aggregate.remove_host(host) + self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result1, aggregates.Aggregate) result2 = self.cs.aggregates.remove_host("2", host) + self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/2/action', body) self.assertIsInstance(result2, aggregates.Aggregate) result3 = self.cs.aggregates.remove_host(aggregate, host) + self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result3, aggregates.Aggregate) @@ -118,24 +134,30 @@ class AggregatesTest(utils.FixturedTestCase): body = {"set_metadata": {"metadata": metadata}} result1 = aggregate.set_metadata(metadata) + self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result1, aggregates.Aggregate) result2 = self.cs.aggregates.set_metadata(2, metadata) + self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/2/action', body) self.assertIsInstance(result2, aggregates.Aggregate) result3 = self.cs.aggregates.set_metadata(aggregate, metadata) + self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-aggregates/1/action', body) self.assertIsInstance(result3, aggregates.Aggregate) def test_delete_aggregate(self): aggregate = self.cs.aggregates.list()[0] - aggregate.delete() + result1 = aggregate.delete() + self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-aggregates/1') - self.cs.aggregates.delete('1') + result2 = self.cs.aggregates.delete('1') + self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-aggregates/1') - self.cs.aggregates.delete(aggregate) + result3 = self.cs.aggregates.delete(aggregate) + self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-aggregates/1') diff --git a/novaclient/tests/unit/v2/test_availability_zone.py b/novaclient/tests/unit/v2/test_availability_zone.py index a7d6d82e..ac2bf0f2 100644 --- a/novaclient/tests/unit/v2/test_availability_zone.py +++ b/novaclient/tests/unit/v2/test_availability_zone.py @@ -19,6 +19,7 @@ import six from novaclient.tests.unit.fixture_data import availability_zones as data from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import availability_zones @@ -45,6 +46,7 @@ class AvailabilityZoneTest(utils.FixturedTestCase): def test_list_availability_zone(self): zones = self.cs.availability_zones.list(detailed=False) + self.assert_request_id(zones, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-availability-zone') for zone in zones: @@ -65,6 +67,7 @@ class AvailabilityZoneTest(utils.FixturedTestCase): def test_detail_availability_zone(self): zones = self.cs.availability_zones.list(detailed=True) + self.assert_request_id(zones, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-availability-zone/detail') for zone in zones: diff --git a/novaclient/tests/unit/v2/test_certs.py b/novaclient/tests/unit/v2/test_certs.py index 6ec2258f..d0e89958 100644 --- a/novaclient/tests/unit/v2/test_certs.py +++ b/novaclient/tests/unit/v2/test_certs.py @@ -14,6 +14,7 @@ from novaclient.tests.unit.fixture_data import certs as data from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import certs @@ -27,10 +28,12 @@ class CertsTest(utils.FixturedTestCase): def test_create_cert(self): cert = self.cs.certs.create() + self.assert_request_id(cert, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-certificates') self.assertIsInstance(cert, self.cert_type) def test_get_root_cert(self): cert = self.cs.certs.get() + self.assert_request_id(cert, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-certificates/root') self.assertIsInstance(cert, self.cert_type) diff --git a/novaclient/tests/unit/v2/test_cloudpipe.py b/novaclient/tests/unit/v2/test_cloudpipe.py index 59b18c36..10a44d7c 100644 --- a/novaclient/tests/unit/v2/test_cloudpipe.py +++ b/novaclient/tests/unit/v2/test_cloudpipe.py @@ -16,6 +16,7 @@ import six from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import cloudpipe as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import cloudpipe @@ -28,6 +29,7 @@ class CloudpipeTest(utils.FixturedTestCase): def test_list_cloudpipes(self): cp = self.cs.cloudpipe.list() + self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-cloudpipe') for c in cp: self.assertIsInstance(c, cloudpipe.Cloudpipe) @@ -35,12 +37,14 @@ class CloudpipeTest(utils.FixturedTestCase): def test_create(self): project = "test" cp = self.cs.cloudpipe.create(project) + self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST) body = {'cloudpipe': {'project_id': project}} self.assert_called('POST', '/os-cloudpipe', body) self.assertIsInstance(cp, six.string_types) def test_update(self): - self.cs.cloudpipe.update("192.168.1.1", 2345) + cp = self.cs.cloudpipe.update("192.168.1.1", 2345) + self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST) body = {'configure_project': {'vpn_ip': "192.168.1.1", 'vpn_port': 2345}} self.assert_called('PUT', '/os-cloudpipe/configure-project', body) diff --git a/novaclient/tests/unit/v2/test_fixed_ips.py b/novaclient/tests/unit/v2/test_fixed_ips.py index 02ba39b6..d7d74bf2 100644 --- a/novaclient/tests/unit/v2/test_fixed_ips.py +++ b/novaclient/tests/unit/v2/test_fixed_ips.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import fixedips as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes class FixedIpsTest(utils.FixturedTestCase): @@ -27,6 +28,7 @@ class FixedIpsTest(utils.FixturedTestCase): def test_get_fixed_ip(self): info = self.cs.fixed_ips.get(fixed_ip='192.168.1.1') + self.assert_request_id(info, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-fixed-ips/192.168.1.1') self.assertEqual('192.168.1.0/24', info.cidr) self.assertEqual('192.168.1.1', info.address) @@ -35,10 +37,12 @@ class FixedIpsTest(utils.FixturedTestCase): def test_reserve_fixed_ip(self): body = {"reserve": None} - self.cs.fixed_ips.reserve(fixed_ip='192.168.1.1') + fixedip = self.cs.fixed_ips.reserve(fixed_ip='192.168.1.1') + self.assert_request_id(fixedip, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-fixed-ips/192.168.1.1/action', body) def test_unreserve_fixed_ip(self): body = {"unreserve": None} - self.cs.fixed_ips.unreserve(fixed_ip='192.168.1.1') + fixedip = self.cs.fixed_ips.unreserve(fixed_ip='192.168.1.1') + self.assert_request_id(fixedip, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-fixed-ips/192.168.1.1/action', body) diff --git a/novaclient/tests/unit/v2/test_flavor_access.py b/novaclient/tests/unit/v2/test_flavor_access.py index 7d1bca18..c6cafdf8 100644 --- a/novaclient/tests/unit/v2/test_flavor_access.py +++ b/novaclient/tests/unit/v2/test_flavor_access.py @@ -26,6 +26,7 @@ class FlavorAccessTest(utils.TestCase): def test_list_access_by_flavor_private(self): kwargs = {'flavor': cs.flavors.get(2)} r = cs.flavor_access.list(**kwargs) + self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) cs.assert_called('GET', '/flavors/2/os-flavor-access') for a in r: self.assertIsInstance(a, flavor_access.FlavorAccess) @@ -34,6 +35,7 @@ class FlavorAccessTest(utils.TestCase): flavor = cs.flavors.get(2) tenant = 'proj2' r = cs.flavor_access.add_tenant_access(flavor, tenant) + self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) body = { "addTenantAccess": { @@ -49,6 +51,7 @@ class FlavorAccessTest(utils.TestCase): flavor = cs.flavors.get(2) tenant = 'proj2' r = cs.flavor_access.remove_tenant_access(flavor, tenant) + self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) body = { "removeTenantAccess": { diff --git a/novaclient/tests/unit/v2/test_flavors.py b/novaclient/tests/unit/v2/test_flavors.py index ff564b26..70eb8e40 100644 --- a/novaclient/tests/unit/v2/test_flavors.py +++ b/novaclient/tests/unit/v2/test_flavors.py @@ -15,6 +15,7 @@ import mock +from novaclient import base from novaclient import exceptions from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes @@ -35,45 +36,53 @@ class FlavorsTest(utils.TestCase): def test_list_flavors(self): fl = self.cs.flavors.list() + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail') for flavor in fl: self.assertIsInstance(flavor, self.flavor_type) def test_list_flavors_undetailed(self): fl = self.cs.flavors.list(detailed=False) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors') for flavor in fl: self.assertIsInstance(flavor, self.flavor_type) def test_list_flavors_with_marker_limit(self): - self.cs.flavors.list(marker=1234, limit=4) + fl = self.cs.flavors.list(marker=1234, limit=4) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail?limit=4&marker=1234') def test_list_flavors_with_sort_key_dir(self): - self.cs.flavors.list(sort_key='id', sort_dir='asc') + fl = self.cs.flavors.list(sort_key='id', sort_dir='asc') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail?sort_dir=asc&sort_key=id') def test_list_flavors_is_public_none(self): fl = self.cs.flavors.list(is_public=None) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail?is_public=None') for flavor in fl: self.assertIsInstance(flavor, self.flavor_type) def test_list_flavors_is_public_false(self): fl = self.cs.flavors.list(is_public=False) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail?is_public=False') for flavor in fl: self.assertIsInstance(flavor, self.flavor_type) def test_list_flavors_is_public_true(self): fl = self.cs.flavors.list(is_public=True) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail') for flavor in fl: self.assertIsInstance(flavor, self.flavor_type) def test_get_flavor_details(self): f = self.cs.flavors.get(1) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/1') self.assertIsInstance(f, self.flavor_type) self.assertEqual(256, f.ram) @@ -83,6 +92,7 @@ class FlavorsTest(utils.TestCase): def test_get_flavor_details_alphanum_id(self): f = self.cs.flavors.get('aa1') + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/aa1') self.assertIsInstance(f, self.flavor_type) self.assertEqual(128, f.ram) @@ -92,6 +102,7 @@ class FlavorsTest(utils.TestCase): def test_get_flavor_details_diablo(self): f = self.cs.flavors.get(3) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/3') self.assertIsInstance(f, self.flavor_type) self.assertEqual(256, f.ram) @@ -101,10 +112,12 @@ class FlavorsTest(utils.TestCase): def test_find(self): f = self.cs.flavors.find(ram=256) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('GET', '/flavors/detail') self.assertEqual('256 MB Server', f.name) f = self.cs.flavors.find(disk=0) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual('128 MB Server', f.name) self.assertRaises(exceptions.NotFound, self.cs.flavors.find, @@ -129,6 +142,7 @@ class FlavorsTest(utils.TestCase): def test_create(self): f = self.cs.flavors.create("flavorcreate", 512, 1, 10, 1234, ephemeral=10, is_public=False) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) body = self._create_body("flavorcreate", 512, 1, 10, 10, 1234, 0, 1.0, False) @@ -141,6 +155,7 @@ class FlavorsTest(utils.TestCase): f = self.cs.flavors.create("flavorcreate", 512, 1, 10, flavor_id, ephemeral=10, is_public=False) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) body = self._create_body("flavorcreate", 512, 1, 10, 10, flavor_id, 0, 1.0, False) @@ -150,6 +165,7 @@ class FlavorsTest(utils.TestCase): def test_create_ephemeral_ispublic_defaults(self): f = self.cs.flavors.create("flavorcreate", 512, 1, 10, 1234) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) body = self._create_body("flavorcreate", 512, 1, 10, 0, 1234, 0, 1.0, True) @@ -181,22 +197,26 @@ class FlavorsTest(utils.TestCase): ephemeral=0, rxtx_factor=1.0, is_public='invalid') def test_delete(self): - self.cs.flavors.delete("flavordelete") + ret = self.cs.flavors.delete("flavordelete") + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('DELETE', '/flavors/flavordelete') def test_delete_with_flavor_instance(self): f = self.cs.flavors.get(2) - self.cs.flavors.delete(f) + ret = self.cs.flavors.delete(f) + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('DELETE', '/flavors/2') def test_delete_with_flavor_instance_method(self): f = self.cs.flavors.get(2) - f.delete() + ret = f.delete() + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('DELETE', '/flavors/2') def test_set_keys(self): f = self.cs.flavors.get(1) - f.set_keys({'k1': 'v1'}) + fk = f.set_keys({'k1': 'v1'}) + self.assert_request_id(fk, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('POST', '/flavors/1/os-extra_specs', {"extra_specs": {'k1': 'v1'}}) @@ -206,7 +226,8 @@ class FlavorsTest(utils.TestCase): f = self.cs.flavors.get(4) for key in valid_keys: - f.set_keys({key: 'v4'}) + fk = f.set_keys({key: 'v4'}) + self.assert_request_id(fk, fakes.FAKE_REQUEST_ID_LIST) self.cs.assert_called('POST', '/flavors/4/os-extra_specs', {"extra_specs": {key: 'v4'}}) @@ -221,7 +242,10 @@ class FlavorsTest(utils.TestCase): def test_unset_keys(self, mock_delete): f = self.cs.flavors.get(1) keys = ['k1', 'k2'] - f.unset_keys(keys) + mock_delete.return_value = base.TupleWithMeta( + (), fakes.FAKE_REQUEST_ID_LIST) + fu = f.unset_keys(keys) + self.assert_request_id(fu, fakes.FAKE_REQUEST_ID_LIST) mock_delete.assert_has_calls([ mock.call("/flavors/1/os-extra_specs/k1"), mock.call("/flavors/1/os-extra_specs/k2") diff --git a/novaclient/tests/unit/v2/test_floating_ip_dns.py b/novaclient/tests/unit/v2/test_floating_ip_dns.py index ec20e56c..8d9f912e 100644 --- a/novaclient/tests/unit/v2/test_floating_ip_dns.py +++ b/novaclient/tests/unit/v2/test_floating_ip_dns.py @@ -14,6 +14,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import floatingips as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import floating_ip_dns @@ -25,6 +26,7 @@ class FloatingIPDNSDomainTest(utils.FixturedTestCase): def test_dns_domains(self): domainlist = self.cs.dns_domains.domains() + self.assert_request_id(domainlist, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual(2, len(domainlist)) for entry in domainlist: @@ -34,17 +36,20 @@ class FloatingIPDNSDomainTest(utils.FixturedTestCase): self.assertEqual('example.com', domainlist[1].domain) def test_create_private_domain(self): - self.cs.dns_domains.create_private(self.testdomain, 'test_avzone') + pd = self.cs.dns_domains.create_private(self.testdomain, 'test_avzone') + self.assert_request_id(pd, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-floating-ip-dns/%s' % self.testdomain) def test_create_public_domain(self): - self.cs.dns_domains.create_public(self.testdomain, 'test_project') + pd = self.cs.dns_domains.create_public(self.testdomain, 'test_project') + self.assert_request_id(pd, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-floating-ip-dns/%s' % self.testdomain) def test_delete_domain(self): - self.cs.dns_domains.delete(self.testdomain) + ret = self.cs.dns_domains.delete(self.testdomain) + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-floating-ip-dns/%s' % self.testdomain) @@ -61,6 +66,7 @@ class FloatingIPDNSEntryTest(utils.FixturedTestCase): def test_get_dns_entries_by_ip(self): entries = self.cs.dns_entries.get_for_ip(self.testdomain, ip=self.testip) + self.assert_request_id(entries, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual(2, len(entries)) for entry in entries: @@ -73,19 +79,22 @@ class FloatingIPDNSEntryTest(utils.FixturedTestCase): def test_get_dns_entry_by_name(self): entry = self.cs.dns_entries.get(self.testdomain, self.testname) + self.assert_request_id(entry, fakes.FAKE_REQUEST_ID_LIST) self.assertIsInstance(entry, floating_ip_dns.FloatingIPDNSEntry) self.assertEqual(entry.name, self.testname) def test_create_entry(self): - self.cs.dns_entries.create(self.testdomain, - self.testname, - self.testip, - self.testtype) + entry = self.cs.dns_entries.create(self.testdomain, + self.testname, + self.testip, + self.testtype) + self.assert_request_id(entry, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-floating-ip-dns/%s/entries/%s' % (self.testdomain, self.testname)) def test_delete_entry(self): - self.cs.dns_entries.delete(self.testdomain, self.testname) + ret = self.cs.dns_entries.delete(self.testdomain, self.testname) + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-floating-ip-dns/%s/entries/%s' % (self.testdomain, self.testname)) diff --git a/novaclient/tests/unit/v2/test_floating_ip_pools.py b/novaclient/tests/unit/v2/test_floating_ip_pools.py index a138fc28..7eac3df5 100644 --- a/novaclient/tests/unit/v2/test_floating_ip_pools.py +++ b/novaclient/tests/unit/v2/test_floating_ip_pools.py @@ -17,6 +17,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import floatingips as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import floating_ip_pools @@ -27,6 +28,7 @@ class TestFloatingIPPools(utils.FixturedTestCase): def test_list_floating_ips(self): fl = self.cs.floating_ip_pools.list() + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-floating-ip-pools') for f in fl: self.assertIsInstance(f, floating_ip_pools.FloatingIPPool) diff --git a/novaclient/tests/unit/v2/test_floating_ips.py b/novaclient/tests/unit/v2/test_floating_ips.py index a9111394..f038ecc9 100644 --- a/novaclient/tests/unit/v2/test_floating_ips.py +++ b/novaclient/tests/unit/v2/test_floating_ips.py @@ -17,6 +17,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import floatingips as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import floating_ips @@ -27,27 +28,33 @@ class FloatingIPsTest(utils.FixturedTestCase): def test_list_floating_ips(self): fips = self.cs.floating_ips.list() + self.assert_request_id(fips, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-floating-ips') for fip in fips: self.assertIsInstance(fip, floating_ips.FloatingIP) def test_delete_floating_ip(self): fl = self.cs.floating_ips.list()[0] - fl.delete() + ret = fl.delete() + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-floating-ips/1') - self.cs.floating_ips.delete(1) + ret = self.cs.floating_ips.delete(1) + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-floating-ips/1') - self.cs.floating_ips.delete(fl) + ret = self.cs.floating_ips.delete(fl) + self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/os-floating-ips/1') def test_create_floating_ip(self): fl = self.cs.floating_ips.create() + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-floating-ips') self.assertIsNone(fl.pool) self.assertIsInstance(fl, floating_ips.FloatingIP) def test_create_floating_ip_with_pool(self): fl = self.cs.floating_ips.create('nova') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/os-floating-ips') self.assertEqual('nova', fl.pool) self.assertIsInstance(fl, floating_ips.FloatingIP) diff --git a/novaclient/tests/unit/v2/test_floating_ips_bulk.py b/novaclient/tests/unit/v2/test_floating_ips_bulk.py index e5cefb6e..37eb2fa1 100644 --- a/novaclient/tests/unit/v2/test_floating_ips_bulk.py +++ b/novaclient/tests/unit/v2/test_floating_ips_bulk.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import floatingips as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import floating_ips @@ -26,18 +27,21 @@ class FloatingIPsBulkTest(utils.FixturedTestCase): def test_list_floating_ips_bulk(self): fl = self.cs.floating_ips_bulk.list() + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-floating-ips-bulk') for f in fl: self.assertIsInstance(f, floating_ips.FloatingIP) def test_list_floating_ips_bulk_host_filter(self): fl = self.cs.floating_ips_bulk.list('testHost') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-floating-ips-bulk/testHost') for f in fl: self.assertIsInstance(f, floating_ips.FloatingIP) def test_create_floating_ips_bulk(self): fl = self.cs.floating_ips_bulk.create('192.168.1.0/30') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) body = {'floating_ips_bulk_create': {'ip_range': '192.168.1.0/30'}} self.assert_called('POST', '/os-floating-ips-bulk', body) self.assertEqual(fl.ip_range, @@ -46,6 +50,7 @@ class FloatingIPsBulkTest(utils.FixturedTestCase): def test_create_floating_ips_bulk_with_pool_and_host(self): fl = self.cs.floating_ips_bulk.create('192.168.1.0/30', 'poolTest', 'interfaceTest') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) body = {'floating_ips_bulk_create': { 'ip_range': '192.168.1.0/30', 'pool': 'poolTest', 'interface': 'interfaceTest'}} @@ -59,6 +64,7 @@ class FloatingIPsBulkTest(utils.FixturedTestCase): def test_delete_floating_ips_bulk(self): fl = self.cs.floating_ips_bulk.delete('192.168.1.0/30') + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) body = {'ip_range': '192.168.1.0/30'} self.assert_called('PUT', '/os-floating-ips-bulk/delete', body) self.assertEqual(fl.floating_ips_bulk_delete, body['ip_range']) diff --git a/novaclient/tests/unit/v2/test_fping.py b/novaclient/tests/unit/v2/test_fping.py index 0dd7cd30..ed3416d9 100644 --- a/novaclient/tests/unit/v2/test_fping.py +++ b/novaclient/tests/unit/v2/test_fping.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import fping as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import fping @@ -26,10 +27,12 @@ class FpingTest(utils.FixturedTestCase): def test_fping_repr(self): r = self.cs.fping.get(1) + self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual("<Fping: 1>", repr(r)) def test_list_fpings(self): fl = self.cs.fping.list() + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-fping') for f in fl: self.assertIsInstance(f, fping.Fping) @@ -38,24 +41,28 @@ class FpingTest(utils.FixturedTestCase): def test_list_fpings_all_tenants(self): fl = self.cs.fping.list(all_tenants=True) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) for f in fl: self.assertIsInstance(f, fping.Fping) self.assert_called('GET', '/os-fping?all_tenants=1') def test_list_fpings_exclude(self): fl = self.cs.fping.list(exclude=['1']) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) for f in fl: self.assertIsInstance(f, fping.Fping) self.assert_called('GET', '/os-fping?exclude=1') def test_list_fpings_include(self): fl = self.cs.fping.list(include=['1']) + self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST) for f in fl: self.assertIsInstance(f, fping.Fping) self.assert_called('GET', '/os-fping?include=1') def test_get_fping(self): f = self.cs.fping.get(1) + self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-fping/1') self.assertIsInstance(f, fping.Fping) self.assertEqual("fake-project", f.project_id) diff --git a/novaclient/tests/unit/v2/test_hosts.py b/novaclient/tests/unit/v2/test_hosts.py index 8f77e01b..70527ce8 100644 --- a/novaclient/tests/unit/v2/test_hosts.py +++ b/novaclient/tests/unit/v2/test_hosts.py @@ -14,6 +14,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import hosts as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import hosts @@ -24,12 +25,14 @@ class HostsTest(utils.FixturedTestCase): def test_describe_resource(self): hs = self.cs.hosts.get('host') + self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hosts/host') for h in hs: self.assertIsInstance(h, hosts.Host) def test_list_host(self): hs = self.cs.hosts.list() + self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hosts') for h in hs: self.assertIsInstance(h, hosts.Host) @@ -37,6 +40,7 @@ class HostsTest(utils.FixturedTestCase): def test_list_host_with_zone(self): hs = self.cs.hosts.list('nova') + self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hosts?zone=nova') for h in hs: self.assertIsInstance(h, hosts.Host) @@ -46,6 +50,7 @@ class HostsTest(utils.FixturedTestCase): host = self.cs.hosts.get('sample_host')[0] values = {"status": "enabled"} result = host.update(values) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-hosts/sample_host', values) self.assertIsInstance(result, hosts.Host) @@ -53,6 +58,7 @@ class HostsTest(utils.FixturedTestCase): host = self.cs.hosts.get('sample_host')[0] values = {"maintenance_mode": "enable"} result = host.update(values) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-hosts/sample_host', values) self.assertIsInstance(result, hosts.Host) @@ -61,24 +67,28 @@ class HostsTest(utils.FixturedTestCase): values = {"status": "enabled", "maintenance_mode": "enable"} result = host.update(values) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('PUT', '/os-hosts/sample_host', values) self.assertIsInstance(result, hosts.Host) def test_host_startup(self): host = self.cs.hosts.get('sample_host')[0] - host.startup() + resp, result = host.startup() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called( 'GET', '/os-hosts/sample_host/startup') def test_host_reboot(self): host = self.cs.hosts.get('sample_host')[0] - host.reboot() + resp, result = host.reboot() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called( 'GET', '/os-hosts/sample_host/reboot') def test_host_shutdown(self): host = self.cs.hosts.get('sample_host')[0] - host.shutdown() + resp, result = host.shutdown() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called( 'GET', '/os-hosts/sample_host/shutdown') diff --git a/novaclient/tests/unit/v2/test_hypervisors.py b/novaclient/tests/unit/v2/test_hypervisors.py index b297c124..a522b853 100644 --- a/novaclient/tests/unit/v2/test_hypervisors.py +++ b/novaclient/tests/unit/v2/test_hypervisors.py @@ -16,6 +16,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import hypervisors as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes class HypervisorsTest(utils.FixturedTestCase): @@ -33,6 +34,7 @@ class HypervisorsTest(utils.FixturedTestCase): dict(id=5678, hypervisor_hostname='hyper2')] result = self.cs.hypervisors.list(False) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors') for idx, hyper in enumerate(result): @@ -76,6 +78,7 @@ class HypervisorsTest(utils.FixturedTestCase): disk_available_least=100)] result = self.cs.hypervisors.list() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/detail') for idx, hyper in enumerate(result): @@ -87,6 +90,7 @@ class HypervisorsTest(utils.FixturedTestCase): dict(id=5678, hypervisor_hostname='hyper2')] result = self.cs.hypervisors.search('hyper') + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/hyper/search') for idx, hyper in enumerate(result): @@ -107,6 +111,7 @@ class HypervisorsTest(utils.FixturedTestCase): ] result = self.cs.hypervisors.search('hyper', True) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/hyper/servers') for idx, hyper in enumerate(result): @@ -133,6 +138,7 @@ class HypervisorsTest(utils.FixturedTestCase): disk_available_least=100) result = self.cs.hypervisors.get(1234) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/1234') self.compare_to_expected(expected, result) @@ -144,6 +150,7 @@ class HypervisorsTest(utils.FixturedTestCase): uptime="fake uptime") result = self.cs.hypervisors.uptime(1234) + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/1234/uptime') self.compare_to_expected(expected, result) @@ -165,12 +172,14 @@ class HypervisorsTest(utils.FixturedTestCase): ) result = self.cs.hypervisors.statistics() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/statistics') self.compare_to_expected(expected, result) def test_hypervisor_statistics_data_model(self): result = self.cs.hypervisor_stats.statistics() + self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/os-hypervisors/statistics') # Test for Bug #1370415, the line below used to raise AttributeError diff --git a/novaclient/tests/unit/v2/test_images.py b/novaclient/tests/unit/v2/test_images.py index f4a6ef86..2c90e2df 100644 --- a/novaclient/tests/unit/v2/test_images.py +++ b/novaclient/tests/unit/v2/test_images.py @@ -14,6 +14,7 @@ from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import images as data from novaclient.tests.unit import utils +from novaclient.tests.unit.v2 import fakes from novaclient.v2 import images @@ -24,6 +25,7 @@ class ImagesTest(utils.FixturedTestCase): def test_list_images(self): il = self.cs.images.list() + self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/images/detail') for i in il: self.assertIsInstance(i, images.Image) @@ -31,39 +33,47 @@ class ImagesTest(utils.FixturedTestCase): def test_list_images_undetailed(self): il = self.cs.images.list(detailed=False) + self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/images') for i in il: self.assertIsInstance(i, images.Image) def test_list_images_with_marker_limit(self): - self.cs.images.list(marker=1234, limit=4) + il = self.cs.images.list(marker=1234, limit=4) + self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/images/detail?limit=4&marker=1234') def test_get_image_details(self): i = self.cs.images.get(1) + self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('GET', '/images/1') self.assertIsInstance(i, images.Image) self.assertEqual(1, i.id) self.assertEqual('CentOS 5.2', i.name) def test_delete_image(self): - self.cs.images.delete(1) + i = self.cs.images.delete(1) + self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/images/1') def test_delete_meta(self): - self.cs.images.delete_meta(1, {'test_key': 'test_value'}) + i = self.cs.images.delete_meta(1, {'test_key': 'test_value'}) + self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('DELETE', '/images/1/metadata/test_key') def test_set_meta(self): - self.cs.images.set_meta(1, {'test_key': 'test_value'}) + i = self.cs.images.set_meta(1, {'test_key': 'test_value'}) + self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST) self.assert_called('POST', '/images/1/metadata', {"metadata": {'test_key': 'test_value'}}) def test_find(self): i = self.cs.images.find(name="CentOS 5.2") + self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual(1, i.id) self.assert_called('GET', '/images/1') iml = self.cs.images.findall(status='SAVING') + self.assert_request_id(iml, fakes.FAKE_REQUEST_ID_LIST) self.assertEqual(1, len(iml)) self.assertEqual('My Server Backup', iml[0].name) diff --git a/novaclient/v2/agents.py b/novaclient/v2/agents.py index b5372cbd..0a6c223e 100644 --- a/novaclient/v2/agents.py +++ b/novaclient/v2/agents.py @@ -63,5 +63,10 @@ class AgentsManager(base.ManagerWithFind): return self._create('/os-agents', body, 'agent') def delete(self, id): - """Deletes an existing agent build.""" - self._delete('/os-agents/%s' % id) + """ + Deletes an existing agent build. + + :param id: The agent's id to delete + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self._delete('/os-agents/%s' % id) diff --git a/novaclient/v2/aggregates.py b/novaclient/v2/aggregates.py index 29d90c0d..9d4dff82 100644 --- a/novaclient/v2/aggregates.py +++ b/novaclient/v2/aggregates.py @@ -38,7 +38,12 @@ class Aggregate(base.Resource): return self.manager.set_metadata(self, metadata) def delete(self): - self.manager.delete(self) + """ + Delete the own aggregate. + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self) class AggregateManager(base.ManagerWithFind): @@ -91,5 +96,10 @@ class AggregateManager(base.ManagerWithFind): body, "aggregate") def delete(self, aggregate): - """Delete the specified aggregate.""" - self._delete('/os-aggregates/%s' % (base.getid(aggregate))) + """ + Delete the specified aggregate. + + :param aggregate: The aggregate to delete + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self._delete('/os-aggregates/%s' % (base.getid(aggregate))) diff --git a/novaclient/v2/cloudpipe.py b/novaclient/v2/cloudpipe.py index 80991452..cf8040b1 100644 --- a/novaclient/v2/cloudpipe.py +++ b/novaclient/v2/cloudpipe.py @@ -25,7 +25,12 @@ class Cloudpipe(base.Resource): return "<Cloudpipe: %s>" % self.project_id def delete(self): - self.manager.delete(self) + """ + Delete the own cloudpipe instance + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self) class CloudpipeManager(base.ManagerWithFind): @@ -52,8 +57,9 @@ class CloudpipeManager(base.ManagerWithFind): :param address: IP address :param port: Port number + :returns: An instance of novaclient.base.TupleWithMeta """ body = {'configure_project': {'vpn_ip': address, 'vpn_port': port}} - self._update("/os-cloudpipe/configure-project", body) + return self._update("/os-cloudpipe/configure-project", body) diff --git a/novaclient/v2/fixed_ips.py b/novaclient/v2/fixed_ips.py index 7d1377ac..232ac6fd 100644 --- a/novaclient/v2/fixed_ips.py +++ b/novaclient/v2/fixed_ips.py @@ -40,16 +40,20 @@ class FixedIPsManager(base.Manager): """Reserve a Fixed IP. :param fixed_ip: Fixed IP address to reserve + :returns: An instance of novaclient.base.TupleWithMeta """ body = {"reserve": None} - self.api.client.post('/os-fixed-ips/%s/action' % base.getid(fixed_ip), - body=body) + resp, body = self.api.client.post('/os-fixed-ips/%s/action' % + base.getid(fixed_ip), body=body) + return self.convert_into_with_meta(body, resp) def unreserve(self, fixed_ip): """Unreserve a Fixed IP. :param fixed_ip: Fixed IP address to unreserve + :returns: An instance of novaclient.base.TupleWithMeta """ body = {"unreserve": None} - self.api.client.post('/os-fixed-ips/%s/action' % base.getid(fixed_ip), - body=body) + resp, body = self.api.client.post('/os-fixed-ips/%s/action' % + base.getid(fixed_ip), body=body) + return self.convert_into_with_meta(body, resp) diff --git a/novaclient/v2/flavor_access.py b/novaclient/v2/flavor_access.py index 4e6fcd4c..73855ee9 100644 --- a/novaclient/v2/flavor_access.py +++ b/novaclient/v2/flavor_access.py @@ -62,7 +62,9 @@ class FlavorAccessManager(base.ManagerWithFind): body = {action: info} self.run_hooks('modify_body_for_action', body, **kwargs) url = '/flavors/%s/action' % base.getid(flavor) - _resp, body = self.api.client.post(url, body=body) + resp, body = self.api.client.post(url, body=body) - return [self.resource_class(self, res) - for res in body['flavor_access']] + items = [self.resource_class(self, res) + for res in body['flavor_access']] + + return base.ListWithMeta(items, resp) diff --git a/novaclient/v2/flavors.py b/novaclient/v2/flavors.py index 3ce54580..43801d17 100644 --- a/novaclient/v2/flavors.py +++ b/novaclient/v2/flavors.py @@ -43,10 +43,14 @@ class Flavor(base.Resource): return self._info.get("os-flavor-access:is_public", 'N/A') def get_keys(self): - """Get extra specs from a flavor.""" - _resp, body = self.manager.api.client.get( + """ + Get extra specs from a flavor. + + :returns: An instance of novaclient.base.DictWithMeta + """ + resp, body = self.manager.api.client.get( "/flavors/%s/os-extra_specs" % base.getid(self)) - return body["extra_specs"] + return self.manager.convert_into_with_meta(body["extra_specs"], resp) def set_keys(self, metadata): """Set extra specs on a flavor. @@ -64,14 +68,23 @@ class Flavor(base.Resource): """Unset extra specs on a flavor. :param keys: A list of keys to be unset + :returns: An instance of novaclient.base.TupleWithMeta """ + result = base.TupleWithMeta((), None) for k in keys: - self.manager._delete( + ret = self.manager._delete( "/flavors/%s/os-extra_specs/%s" % (base.getid(self), k)) + result.append_request_ids(ret.request_ids) + + return result def delete(self): - """Delete this flavor.""" - self.manager.delete(self) + """ + Delete this flavor. + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self) class FlavorManager(base.ManagerWithFind): @@ -130,8 +143,9 @@ class FlavorManager(base.ManagerWithFind): """Delete a specific flavor. :param flavor: The ID of the :class:`Flavor` to get. + :returns: An instance of novaclient.base.TupleWithMeta """ - self._delete("/flavors/%s" % base.getid(flavor)) + return self._delete("/flavors/%s" % base.getid(flavor)) def _build_body(self, name, ram, vcpus, disk, id, swap, ephemeral, rxtx_factor, is_public): diff --git a/novaclient/v2/floating_ip_dns.py b/novaclient/v2/floating_ip_dns.py index 41df0f62..d6ccb8d5 100644 --- a/novaclient/v2/floating_ip_dns.py +++ b/novaclient/v2/floating_ip_dns.py @@ -30,21 +30,38 @@ def _quote_domain(domain): class FloatingIPDNSDomain(base.Resource): def delete(self): - self.manager.delete(self.domain) + """ + Delete the own Floating IP DNS domain. + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self.domain) def create(self): + """ + Create a Floating IP DNS domain. + + :returns: An instance of novaclient.base.DictWithMeta + """ if self.scope == 'public': - self.manager.create_public(self.domain, self.project) + return self.manager.create_public(self.domain, self.project) else: - self.manager.create_private(self.domain, self.availability_zone) + return self.manager.create_private(self.domain, + self.availability_zone) def get(self): + """ + Get the own Floating IP DNS domain. + + :returns: An instance of novaclient.base.TupleWithMeta or + novaclient.base.ListWithMeta + """ entries = self.manager.domains() for entry in entries: if entry.get('domain') == self.domain: return entry - return None + return base.TupleWithMeta((), entries.request_ids) class FloatingIPDNSDomainManager(base.Manager): @@ -70,16 +87,32 @@ class FloatingIPDNSDomainManager(base.Manager): body, 'domain_entry') def delete(self, fqdomain): - """Delete the specified domain.""" - self._delete("/os-floating-ip-dns/%s" % _quote_domain(fqdomain)) + """ + Delete the specified domain. + + :param fqdomain: The domain to delete + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self._delete("/os-floating-ip-dns/%s" % _quote_domain(fqdomain)) class FloatingIPDNSEntry(base.Resource): def delete(self): - self.manager.delete(self.name, self.domain) + """ + Delete the own Floating IP DNS entry. + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self.name, self.domain) def create(self): - self.manager.create(self.domain, self.name, self.ip, self.dns_type) + """ + Create a Floating IP DNS entry. + + :returns: :class:`FloatingIPDNSEntry` + """ + return self.manager.create(self.domain, self.name, self.ip, + self.dns_type) def get(self): return self.manager.get(self.domain, self.name) @@ -116,6 +149,10 @@ class FloatingIPDNSEntryManager(base.Manager): (_quote_domain(domain), name), body, "dns_entry") def delete(self, domain, name): - """Delete entry specified by name and domain.""" - self._delete("/os-floating-ip-dns/%s/entries/%s" % - (_quote_domain(domain), name)) + """ + Delete entry specified by name and domain. + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self._delete("/os-floating-ip-dns/%s/entries/%s" % + (_quote_domain(domain), name)) diff --git a/novaclient/v2/floating_ips.py b/novaclient/v2/floating_ips.py index e3bc525b..b25bb33f 100644 --- a/novaclient/v2/floating_ips.py +++ b/novaclient/v2/floating_ips.py @@ -19,8 +19,12 @@ from novaclient import base class FloatingIP(base.Resource): def delete(self): - """Delete this floating IP""" - self.manager.delete(self) + """ + Delete this floating IP + + :returns: An instance of novaclient.base.TupleWithMeta + """ + return self.manager.delete(self) class FloatingIPManager(base.ManagerWithFind): @@ -38,8 +42,9 @@ class FloatingIPManager(base.ManagerWithFind): """Delete (deallocate) a floating IP for a tenant :param floating_ip: The floating IP address to delete. + :returns: An instance of novaclient.base.TupleWithMeta """ - self._delete("/os-floating-ips/%s" % base.getid(floating_ip)) + return self._delete("/os-floating-ips/%s" % base.getid(floating_ip)) def get(self, floating_ip): """Retrieve a floating IP""" diff --git a/novaclient/v2/hosts.py b/novaclient/v2/hosts.py index 0f979973..ff78fb30 100644 --- a/novaclient/v2/hosts.py +++ b/novaclient/v2/hosts.py @@ -69,9 +69,18 @@ class HostManager(base.ManagerWithFind): return self._update("/os-hosts/%s" % host, values) def host_action(self, host, action): - """Perform an action on a host.""" + """ + Perform an action on a host. + + :param host: The host to perform an action + :param actiob: The action to perform + :returns: A Response object and an instance of + novaclient.base.DictWithMeta + """ url = '/os-hosts/{0}/{1}'.format(host, action) - return self.api.client.get(url) + resp, body = self.api.client.get(url) + # For compatibility, return Response object as a first return value + return resp, self.convert_into_with_meta(body, resp) def list(self, zone=None): url = '/os-hosts' diff --git a/novaclient/v2/images.py b/novaclient/v2/images.py index 32001b46..39e9dc06 100644 --- a/novaclient/v2/images.py +++ b/novaclient/v2/images.py @@ -33,8 +33,10 @@ class Image(base.Resource): def delete(self): """ Delete this image. + + :returns: An instance of novaclient.base.TupleWithMeta """ - self.manager.delete(self) + return self.manager.delete(self) class ImageManager(base.ManagerWithFind): @@ -81,8 +83,9 @@ class ImageManager(base.ManagerWithFind): that you didn't create. :param image: The :class:`Image` (or its ID) to delete. + :returns: An instance of novaclient.base.TupleWithMeta """ - self._delete("/images/%s" % base.getid(image)) + return self._delete("/images/%s" % base.getid(image)) def set_meta(self, image, metadata): """ @@ -101,6 +104,12 @@ class ImageManager(base.ManagerWithFind): :param image: The :class:`Image` to delete metadata :param keys: A list of metadata keys to delete from the image + :returns: An instance of novaclient.base.TupleWithMeta """ + result = base.TupleWithMeta((), None) for k in keys: - self._delete("/images/%s/metadata/%s" % (base.getid(image), k)) + ret = self._delete("/images/%s/metadata/%s" % + (base.getid(image), k)) + result.append_request_ids(ret.request_ids) + + return result |