Add return-request-id-to-caller function(3/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/keypairs.py
* novaclient/v2/limits.py
* novaclient/v2/networks.py
* novaclient/v2/quota_classes.py
* novaclient/v2/quotas.py
* novaclient/v2/security_group_default_rules.py
* novaclient/v2/security_group_rules.py
* novaclient/v2/security_groups.py
* novaclient/v2/server_groups.py
* novaclient/v2/services.py
* novaclient/v2/usage.py
* novaclient/v2/versions.py

Co-authored-by: Ankit Agrawal <ankit11.agrawal@nttdata.com>
Change-Id: I9203f70a0eef5686b590fbff35563f2cf8b6f586
Implements: blueprint return-request-id-to-caller
This commit is contained in:
Takashi NATSUME 2015-12-25 12:34:02 +09:00
parent 0799238648
commit 0414bab3d3
27 changed files with 249 additions and 99 deletions

View File

@ -24,7 +24,7 @@ class V1(base.Fixture):
super(V1, self).setUp() super(V1, self).setUp()
keypair = {'fingerprint': 'FAKE_KEYPAIR', 'name': 'test'} keypair = {'fingerprint': 'FAKE_KEYPAIR', 'name': 'test'}
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json={'keypairs': [keypair]}, json={'keypairs': [keypair]},
@ -34,7 +34,8 @@ class V1(base.Fixture):
json={'keypair': keypair}, json={'keypair': keypair},
headers=headers) headers=headers)
self.requests.register_uri('DELETE', self.url('test'), status_code=202) self.requests.register_uri('DELETE', self.url('test'), status_code=202,
headers=headers)
def post_os_keypairs(request, context): def post_os_keypairs(request, context):
body = jsonutils.loads(request.body) body = jsonutils.loads(request.body)

View File

@ -74,7 +74,7 @@ class Fixture(base.Fixture):
}, },
} }
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json=get_limits, json=get_limits,
headers=headers) headers=headers)

View File

@ -33,7 +33,7 @@ class Fixture(base.Fixture):
] ]
} }
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json=get_os_networks, json=get_os_networks,
@ -55,8 +55,10 @@ class Fixture(base.Fixture):
self.requests.register_uri('DELETE', self.requests.register_uri('DELETE',
self.url('networkdelete'), self.url('networkdelete'),
status_code=202) status_code=202,
headers=headers)
for u in ('add', 'networkdisassociate/action', 'networktest/action', for u in ('add', 'networkdisassociate/action', 'networktest/action',
'1/action', '2/action'): '1/action', '2/action'):
self.requests.register_uri('POST', self.url(u), status_code=202) self.requests.register_uri('POST', self.url(u), status_code=202,
headers=headers)

View File

@ -23,7 +23,7 @@ class V1(base.Fixture):
uuid = '97f4c221-bff4-4578-b030-0df4ef119353' uuid = '97f4c221-bff4-4578-b030-0df4ef119353'
uuid2 = '97f4c221bff44578b0300df4ef119353' uuid2 = '97f4c221bff44578b0300df4ef119353'
test_json = {'quota_set': self.test_quota('test')} test_json = {'quota_set': self.test_quota('test')}
self.headers = {'Content-Type': 'application/json'} self.headers = self.json_headers
for u in ('test', 'tenant-id', 'tenant-id/defaults', for u in ('test', 'tenant-id', 'tenant-id/defaults',
'%s/defaults' % uuid2): '%s/defaults' % uuid2):
@ -47,7 +47,8 @@ class V1(base.Fixture):
headers=self.headers) headers=self.headers)
for u in ('test', uuid2): for u in ('test', uuid2):
self.requests.register_uri('DELETE', self.url(u), status_code=202) self.requests.register_uri('DELETE', self.url(u), status_code=202,
headers=self.headers)
def test_quota(self, tenant_id='test'): def test_quota(self, tenant_id='test'):
return { return {

View File

@ -33,14 +33,15 @@ class Fixture(base.Fixture):
'cidr': '10.0.0.0/8' 'cidr': '10.0.0.0/8'
} }
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json={'security_group_rules': [rule]}, json={'security_group_rules': [rule]},
headers=headers) headers=headers)
for u in (1, 11, 12): for u in (1, 11, 12):
self.requests.register_uri('DELETE', self.url(u), status_code=202) self.requests.register_uri('DELETE', self.url(u), status_code=202,
headers=headers)
def post_rules(request, context): def post_rules(request, context):
body = jsonutils.loads(request.body) body = jsonutils.loads(request.body)

View File

@ -62,7 +62,7 @@ class Fixture(base.Fixture):
} }
get_groups = {'security_groups': [security_group_1, security_group_2]} get_groups = {'security_groups': [security_group_1, security_group_2]}
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json=get_groups, json=get_groups,
@ -73,7 +73,8 @@ class Fixture(base.Fixture):
json=get_group_1, json=get_group_1,
headers=headers) headers=headers)
self.requests.register_uri('DELETE', self.url(1), status_code=202) self.requests.register_uri('DELETE', self.url(1), status_code=202,
headers=headers)
def post_os_security_groups(request, context): def post_os_security_groups(request, context):
body = jsonutils.loads(request.body) body = jsonutils.loads(request.body)

View File

@ -52,7 +52,7 @@ class Fixture(base.Fixture):
} }
] ]
headers = {'Content-Type': 'application/json'} headers = self.json_headers
self.requests.register_uri('GET', self.url(), self.requests.register_uri('GET', self.url(),
json={'server_groups': server_groups}, json={'server_groups': server_groups},
@ -62,7 +62,8 @@ class Fixture(base.Fixture):
server_j = jsonutils.dumps({'server_group': server}) server_j = jsonutils.dumps({'server_group': server})
def _register(method, *args): def _register(method, *args):
self.requests.register_uri(method, self.url(*args), text=server_j) self.requests.register_uri(method, self.url(*args), text=server_j,
headers=headers)
_register('POST') _register('POST')
_register('POST', server['id']) _register('POST', server['id'])
@ -71,4 +72,4 @@ class Fixture(base.Fixture):
_register('POST', server['id'], '/action') _register('POST', server['id'], '/action')
self.requests.register_uri('DELETE', self.url(server['id']), self.requests.register_uri('DELETE', self.url(server['id']),
status_code=202) status_code=202, headers=headers)

View File

@ -151,7 +151,7 @@ class FakeHTTPClient(base_client.HTTPClient):
"http://nova-api:8774/v2.1/190a755eef2e4aac9f06aa6be9786385") "http://nova-api:8774/v2.1/190a755eef2e4aac9f06aa6be9786385")
def get_versions(self): def get_versions(self):
return (200, {}, { return (200, FAKE_RESPONSE_HEADERS, {
"versions": [ "versions": [
{"status": "SUPPORTED", "updated": "2011-01-21T11:33:21Z", {"status": "SUPPORTED", "updated": "2011-01-21T11:33:21Z",
"links": [{"href": "http://nova-api:8774/v2/", "links": [{"href": "http://nova-api:8774/v2/",
@ -208,7 +208,7 @@ class FakeHTTPClient(base_client.HTTPClient):
raise AssertionError( raise AssertionError(
"Unknown endpoint_type:%s" % self.endpoint_type) "Unknown endpoint_type:%s" % self.endpoint_type)
return (200, {}, versions[endpoint]) return (200, FAKE_RESPONSE_HEADERS, versions[endpoint])
# #
# agents # agents
@ -1402,7 +1402,7 @@ class FakeHTTPClient(base_client.HTTPClient):
# #
def get_os_quota_class_sets_test(self, **kw): def get_os_quota_class_sets_test(self, **kw):
return (200, {}, { return (200, FAKE_RESPONSE_HEADERS, {
'quota_class_set': { 'quota_class_set': {
'id': 'test', 'id': 'test',
'metadata_items': 1, 'metadata_items': 1,
@ -1589,7 +1589,7 @@ class FakeHTTPClient(base_client.HTTPClient):
# Tenant Usage # Tenant Usage
# #
def get_os_simple_tenant_usage(self, **kw): def get_os_simple_tenant_usage(self, **kw):
return (200, {}, return (200, FAKE_RESPONSE_HEADERS,
{six.u('tenant_usages'): [{ {six.u('tenant_usages'): [{
six.u('total_memory_mb_usage'): 25451.762807466665, six.u('total_memory_mb_usage'): 25451.762807466665,
six.u('total_vcpus_usage'): 49.71047423333333, six.u('total_vcpus_usage'): 49.71047423333333,
@ -1615,7 +1615,7 @@ class FakeHTTPClient(base_client.HTTPClient):
six.u('total_local_gb_usage'): 0.0}]}) six.u('total_local_gb_usage'): 0.0}]})
def get_os_simple_tenant_usage_tenantfoo(self, **kw): def get_os_simple_tenant_usage_tenantfoo(self, **kw):
return (200, {}, return (200, FAKE_RESPONSE_HEADERS,
{six.u('tenant_usage'): { {six.u('tenant_usage'): {
six.u('total_memory_mb_usage'): 25451.762807466665, six.u('total_memory_mb_usage'): 25451.762807466665,
six.u('total_vcpus_usage'): 49.71047423333333, six.u('total_vcpus_usage'): 49.71047423333333,
@ -1756,44 +1756,47 @@ class FakeHTTPClient(base_client.HTTPClient):
def get_os_services(self, **kw): def get_os_services(self, **kw):
host = kw.get('host', 'host1') host = kw.get('host', 'host1')
binary = kw.get('binary', 'nova-compute') binary = kw.get('binary', 'nova-compute')
return (200, {}, {'services': [{'binary': binary, return (200, FAKE_RESPONSE_HEADERS,
'host': host, {'services': [{'binary': binary,
'zone': 'nova', 'host': host,
'status': 'enabled', 'zone': 'nova',
'state': 'up', 'status': 'enabled',
'updated_at': datetime.datetime( 'state': 'up',
2012, 10, 29, 13, 42, 2)}, 'updated_at': datetime.datetime(
{'binary': binary, 2012, 10, 29, 13, 42, 2)},
'host': host, {'binary': binary,
'zone': 'nova', 'host': host,
'status': 'disabled', 'zone': 'nova',
'state': 'down', 'status': 'disabled',
'updated_at': datetime.datetime( 'state': 'down',
2012, 9, 18, 8, 3, 38)}, 'updated_at': datetime.datetime(
]}) 2012, 9, 18, 8, 3, 38)},
]})
def put_os_services_enable(self, body, **kw): def put_os_services_enable(self, body, **kw):
return (200, {}, {'service': {'host': body['host'], return (200, FAKE_RESPONSE_HEADERS,
'binary': body['binary'], {'service': {'host': body['host'],
'status': 'enabled'}}) 'binary': body['binary'],
'status': 'enabled'}})
def put_os_services_disable(self, body, **kw): def put_os_services_disable(self, body, **kw):
return (200, {}, {'service': {'host': body['host'], return (200, FAKE_RESPONSE_HEADERS,
'binary': body['binary'], {'service': {'host': body['host'],
'status': 'disabled'}}) 'binary': body['binary'],
'status': 'disabled'}})
def put_os_services_disable_log_reason(self, body, **kw): def put_os_services_disable_log_reason(self, body, **kw):
return (200, {}, {'service': { return (200, FAKE_RESPONSE_HEADERS, {'service': {
'host': body['host'], 'host': body['host'],
'binary': body['binary'], 'binary': body['binary'],
'status': 'disabled', 'status': 'disabled',
'disabled_reason': body['disabled_reason']}}) 'disabled_reason': body['disabled_reason']}})
def delete_os_services_1(self, **kw): def delete_os_services_1(self, **kw):
return (204, {}, None) return (204, FAKE_RESPONSE_HEADERS, None)
def put_os_services_force_down(self, body, **kw): def put_os_services_force_down(self, body, **kw):
return (200, {}, {'service': { return (200, FAKE_RESPONSE_HEADERS, {'service': {
'host': body['host'], 'host': body['host'],
'binary': body['binary'], 'binary': body['binary'],
'forced_down': False}}) 'forced_down': False}})

View File

@ -15,6 +15,7 @@ from novaclient import api_versions
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import keypairs as data from novaclient.tests.unit.fixture_data import keypairs as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import keypairs from novaclient.v2 import keypairs
@ -36,23 +37,28 @@ class KeypairsTest(utils.FixturedTestCase):
def test_get_keypair(self): def test_get_keypair(self):
kp = self.cs.keypairs.get('test') kp = self.cs.keypairs.get('test')
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/%s/test' % self.keypair_prefix) self.assert_called('GET', '/%s/test' % self.keypair_prefix)
self.assertIsInstance(kp, keypairs.Keypair) self.assertIsInstance(kp, keypairs.Keypair)
self.assertEqual('test', kp.name) self.assertEqual('test', kp.name)
def test_list_keypairs(self): def test_list_keypairs(self):
kps = self.cs.keypairs.list() kps = self.cs.keypairs.list()
self.assert_request_id(kps, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/%s' % self.keypair_prefix) self.assert_called('GET', '/%s' % self.keypair_prefix)
for kp in kps: for kp in kps:
self.assertIsInstance(kp, keypairs.Keypair) self.assertIsInstance(kp, keypairs.Keypair)
def test_delete_keypair(self): def test_delete_keypair(self):
kp = self.cs.keypairs.list()[0] kp = self.cs.keypairs.list()[0]
kp.delete() ret = kp.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix) self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
self.cs.keypairs.delete('test') ret = self.cs.keypairs.delete('test')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix) self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
self.cs.keypairs.delete(kp) ret = self.cs.keypairs.delete(kp)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix) self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
@ -64,6 +70,7 @@ class KeypairsV2TestCase(KeypairsTest):
def test_create_keypair(self): def test_create_keypair(self):
name = "foo" name = "foo"
kp = self.cs.keypairs.create(name) kp = self.cs.keypairs.create(name)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix, self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name}}) body={'keypair': {'name': name}})
self.assertIsInstance(kp, keypairs.Keypair) self.assertIsInstance(kp, keypairs.Keypair)
@ -72,6 +79,7 @@ class KeypairsV2TestCase(KeypairsTest):
name = "foo" name = "foo"
pub_key = "fake-public-key" pub_key = "fake-public-key"
kp = self.cs.keypairs.create(name, pub_key) kp = self.cs.keypairs.create(name, pub_key)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix, self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name, body={'keypair': {'name': name,
'public_key': pub_key}}) 'public_key': pub_key}})
@ -87,6 +95,7 @@ class KeypairsV22TestCase(KeypairsTest):
name = "foo" name = "foo"
key_type = "some_type" key_type = "some_type"
kp = self.cs.keypairs.create(name, key_type=key_type) kp = self.cs.keypairs.create(name, key_type=key_type)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix, self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name, body={'keypair': {'name': name,
'type': key_type}}) 'type': key_type}})
@ -96,6 +105,7 @@ class KeypairsV22TestCase(KeypairsTest):
name = "foo" name = "foo"
pub_key = "fake-public-key" pub_key = "fake-public-key"
kp = self.cs.keypairs.create(name, pub_key) kp = self.cs.keypairs.create(name, pub_key)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix, self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name, body={'keypair': {'name': name,
'public_key': pub_key, 'public_key': pub_key,

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import limits as data from novaclient.tests.unit.fixture_data import limits as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import limits from novaclient.v2 import limits
@ -24,16 +25,19 @@ class LimitsTest(utils.FixturedTestCase):
def test_get_limits(self): def test_get_limits(self):
obj = self.cs.limits.get() obj = self.cs.limits.get()
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/limits') self.assert_called('GET', '/limits')
self.assertIsInstance(obj, limits.Limits) self.assertIsInstance(obj, limits.Limits)
def test_get_limits_for_a_tenant(self): def test_get_limits_for_a_tenant(self):
obj = self.cs.limits.get(tenant_id=1234) obj = self.cs.limits.get(tenant_id=1234)
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/limits?tenant_id=1234') self.assert_called('GET', '/limits?tenant_id=1234')
self.assertIsInstance(obj, limits.Limits) self.assertIsInstance(obj, limits.Limits)
def test_absolute_limits_reserved(self): def test_absolute_limits_reserved(self):
obj = self.cs.limits.get(reserved=True) obj = self.cs.limits.get(reserved=True)
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
expected = ( expected = (
limits.AbsoluteLimit("maxTotalRAMSize", 51200), limits.AbsoluteLimit("maxTotalRAMSize", 51200),
@ -52,6 +56,7 @@ class LimitsTest(utils.FixturedTestCase):
def test_rate_absolute_limits(self): def test_rate_absolute_limits(self):
obj = self.cs.limits.get() obj = self.cs.limits.get()
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
expected = ( expected = (
limits.RateLimit('POST', '*', '.*', 10, 2, 'MINUTE', limits.RateLimit('POST', '*', '.*', 10, 2, 'MINUTE',

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import networks as data from novaclient.tests.unit.fixture_data import networks as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import networks from novaclient.v2 import networks
@ -24,21 +25,25 @@ class NetworksTest(utils.FixturedTestCase):
def test_list_networks(self): def test_list_networks(self):
fl = self.cs.networks.list() fl = self.cs.networks.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-networks') self.assert_called('GET', '/os-networks')
for f in fl: for f in fl:
self.assertIsInstance(f, networks.Network) self.assertIsInstance(f, networks.Network)
def test_get_network(self): def test_get_network(self):
f = self.cs.networks.get(1) f = self.cs.networks.get(1)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-networks/1') self.assert_called('GET', '/os-networks/1')
self.assertIsInstance(f, networks.Network) self.assertIsInstance(f, networks.Network)
def test_delete(self): def test_delete(self):
self.cs.networks.delete('networkdelete') ret = self.cs.networks.delete('networkdelete')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-networks/networkdelete') self.assert_called('DELETE', '/os-networks/networkdelete')
def test_create(self): def test_create(self):
f = self.cs.networks.create(label='foo') f = self.cs.networks.create(label='foo')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks', self.assert_called('POST', '/os-networks',
{'network': {'label': 'foo'}}) {'network': {'label': 'foo'}})
self.assertIsInstance(f, networks.Network) self.assertIsInstance(f, networks.Network)
@ -70,38 +75,45 @@ class NetworksTest(utils.FixturedTestCase):
} }
f = self.cs.networks.create(**params) f = self.cs.networks.create(**params)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks', {'network': params}) self.assert_called('POST', '/os-networks', {'network': params})
self.assertIsInstance(f, networks.Network) self.assertIsInstance(f, networks.Network)
def test_associate_project(self): def test_associate_project(self):
self.cs.networks.associate_project('networktest') f = self.cs.networks.associate_project('networktest')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/add', self.assert_called('POST', '/os-networks/add',
{'id': 'networktest'}) {'id': 'networktest'})
def test_associate_host(self): def test_associate_host(self):
self.cs.networks.associate_host('networktest', 'testHost') f = self.cs.networks.associate_host('networktest', 'testHost')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/networktest/action', self.assert_called('POST', '/os-networks/networktest/action',
{'associate_host': 'testHost'}) {'associate_host': 'testHost'})
def test_disassociate(self): def test_disassociate(self):
self.cs.networks.disassociate('networkdisassociate') f = self.cs.networks.disassociate('networkdisassociate')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', self.assert_called('POST',
'/os-networks/networkdisassociate/action', '/os-networks/networkdisassociate/action',
{'disassociate': None}) {'disassociate': None})
def test_disassociate_host_only(self): def test_disassociate_host_only(self):
self.cs.networks.disassociate('networkdisassociate', True, False) f = self.cs.networks.disassociate('networkdisassociate', True, False)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', self.assert_called('POST',
'/os-networks/networkdisassociate/action', '/os-networks/networkdisassociate/action',
{'disassociate_host': None}) {'disassociate_host': None})
def test_disassociate_project(self): def test_disassociate_project(self):
self.cs.networks.disassociate('networkdisassociate', False, True) f = self.cs.networks.disassociate('networkdisassociate', False, True)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', self.assert_called('POST',
'/os-networks/networkdisassociate/action', '/os-networks/networkdisassociate/action',
{'disassociate_project': None}) {'disassociate_project': None})
def test_add(self): def test_add(self):
self.cs.networks.add('networkadd') f = self.cs.networks.add('networkadd')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/add', self.assert_called('POST', '/os-networks/add',
{'id': 'networkadd'}) {'id': 'networkadd'})

View File

@ -24,11 +24,13 @@ class QuotaClassSetsTest(utils.TestCase):
def test_class_quotas_get(self): def test_class_quotas_get(self):
class_name = 'test' class_name = 'test'
cs.quota_classes.get(class_name) q = cs.quota_classes.get(class_name)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
cs.assert_called('GET', '/os-quota-class-sets/%s' % class_name) cs.assert_called('GET', '/os-quota-class-sets/%s' % class_name)
def test_update_quota(self): def test_update_quota(self):
q = cs.quota_classes.get('test') q = cs.quota_classes.get('test')
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
q.update(cores=2) q.update(cores=2)
cs.assert_called('PUT', '/os-quota-class-sets/test') cs.assert_called('PUT', '/os-quota-class-sets/test')

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import quotas as data from novaclient.tests.unit.fixture_data import quotas as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
class QuotaSetsTest(utils.FixturedTestCase): class QuotaSetsTest(utils.FixturedTestCase):
@ -25,36 +26,42 @@ class QuotaSetsTest(utils.FixturedTestCase):
def test_tenant_quotas_get(self): def test_tenant_quotas_get(self):
tenant_id = 'test' tenant_id = 'test'
self.cs.quotas.get(tenant_id) q = self.cs.quotas.get(tenant_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-quota-sets/%s' % tenant_id) self.assert_called('GET', '/os-quota-sets/%s' % tenant_id)
def test_user_quotas_get(self): def test_user_quotas_get(self):
tenant_id = 'test' tenant_id = 'test'
user_id = 'fake_user' user_id = 'fake_user'
self.cs.quotas.get(tenant_id, user_id=user_id) q = self.cs.quotas.get(tenant_id, user_id=user_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id) url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
self.assert_called('GET', url) self.assert_called('GET', url)
def test_tenant_quotas_defaults(self): def test_tenant_quotas_defaults(self):
tenant_id = '97f4c221bff44578b0300df4ef119353' tenant_id = '97f4c221bff44578b0300df4ef119353'
self.cs.quotas.defaults(tenant_id) q = self.cs.quotas.defaults(tenant_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-quota-sets/%s/defaults' % tenant_id) self.assert_called('GET', '/os-quota-sets/%s/defaults' % tenant_id)
def test_force_update_quota(self): def test_force_update_quota(self):
q = self.cs.quotas.get('97f4c221bff44578b0300df4ef119353') q = self.cs.quotas.get('97f4c221bff44578b0300df4ef119353')
q.update(cores=2, force=True) qu = q.update(cores=2, force=True)
self.assert_request_id(qu, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called( self.assert_called(
'PUT', '/os-quota-sets/97f4c221bff44578b0300df4ef119353', 'PUT', '/os-quota-sets/97f4c221bff44578b0300df4ef119353',
{'quota_set': {'force': True, 'cores': 2}}) {'quota_set': {'force': True, 'cores': 2}})
def test_quotas_delete(self): def test_quotas_delete(self):
tenant_id = 'test' tenant_id = 'test'
self.cs.quotas.delete(tenant_id) ret = self.cs.quotas.delete(tenant_id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-quota-sets/%s' % tenant_id) self.assert_called('DELETE', '/os-quota-sets/%s' % tenant_id)
def test_user_quotas_delete(self): def test_user_quotas_delete(self):
tenant_id = 'test' tenant_id = 'test'
user_id = 'fake_user' user_id = 'fake_user'
self.cs.quotas.delete(tenant_id, user_id=user_id) ret = self.cs.quotas.delete(tenant_id, user_id=user_id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id) url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
self.assert_called('DELETE', url) self.assert_called('DELETE', url)

View File

@ -15,6 +15,7 @@ from novaclient import exceptions
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import security_group_rules as data from novaclient.tests.unit.fixture_data import security_group_rules as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import security_group_rules from novaclient.v2 import security_group_rules
@ -24,12 +25,14 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
data_fixture_class = data.Fixture data_fixture_class = data.Fixture
def test_delete_security_group_rule(self): def test_delete_security_group_rule(self):
self.cs.security_group_rules.delete(1) ret = self.cs.security_group_rules.delete(1)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-group-rules/1') self.assert_called('DELETE', '/os-security-group-rules/1')
def test_create_security_group_rule(self): def test_create_security_group_rule(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535, sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16") "10.0.0.0/16")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
body = { body = {
"security_group_rule": { "security_group_rule": {
@ -48,6 +51,7 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
def test_create_security_group_group_rule(self): def test_create_security_group_group_rule(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535, sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16", 101) "10.0.0.0/16", 101)
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
body = { body = {
"security_group_rule": { "security_group_rule": {
@ -80,10 +84,12 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
def test_security_group_rule_str(self): def test_security_group_rule_str(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535, sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16") "10.0.0.0/16")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual('1', str(sg)) self.assertEqual('1', str(sg))
def test_security_group_rule_del(self): def test_security_group_rule_del(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535, sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16") "10.0.0.0/16")
sg.delete() ret = sg.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-group-rules/1') self.assert_called('DELETE', '/os-security-group-rules/1')

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import security_groups as data from novaclient.tests.unit.fixture_data import security_groups as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import security_groups from novaclient.v2 import security_groups
@ -24,6 +25,7 @@ class SecurityGroupsTest(utils.FixturedTestCase):
def _do_test_list_security_groups(self, search_opts, path): def _do_test_list_security_groups(self, search_opts, path):
sgs = self.cs.security_groups.list(search_opts=search_opts) sgs = self.cs.security_groups.list(search_opts=search_opts)
self.assert_request_id(sgs, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', path) self.assert_called('GET', path)
for sg in sgs: for sg in sgs:
self.assertIsInstance(sg, security_groups.SecurityGroup) self.assertIsInstance(sg, security_groups.SecurityGroup)
@ -42,27 +44,33 @@ class SecurityGroupsTest(utils.FixturedTestCase):
def test_get_security_groups(self): def test_get_security_groups(self):
sg = self.cs.security_groups.get(1) sg = self.cs.security_groups.get(1)
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-security-groups/1') self.assert_called('GET', '/os-security-groups/1')
self.assertIsInstance(sg, security_groups.SecurityGroup) self.assertIsInstance(sg, security_groups.SecurityGroup)
self.assertEqual('1', str(sg)) self.assertEqual('1', str(sg))
def test_delete_security_group(self): def test_delete_security_group(self):
sg = self.cs.security_groups.list()[0] sg = self.cs.security_groups.list()[0]
sg.delete() ret = sg.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1') self.assert_called('DELETE', '/os-security-groups/1')
self.cs.security_groups.delete(1) ret = self.cs.security_groups.delete(1)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1') self.assert_called('DELETE', '/os-security-groups/1')
self.cs.security_groups.delete(sg) ret = self.cs.security_groups.delete(sg)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1') self.assert_called('DELETE', '/os-security-groups/1')
def test_create_security_group(self): def test_create_security_group(self):
sg = self.cs.security_groups.create("foo", "foo barr") sg = self.cs.security_groups.create("foo", "foo barr")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-security-groups') self.assert_called('POST', '/os-security-groups')
self.assertIsInstance(sg, security_groups.SecurityGroup) self.assertIsInstance(sg, security_groups.SecurityGroup)
def test_update_security_group(self): def test_update_security_group(self):
sg = self.cs.security_groups.list()[0] sg = self.cs.security_groups.list()[0]
secgroup = self.cs.security_groups.update(sg, "update", "update") secgroup = self.cs.security_groups.update(sg, "update", "update")
self.assert_request_id(secgroup, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-security-groups/1') self.assert_called('PUT', '/os-security-groups/1')
self.assertIsInstance(secgroup, security_groups.SecurityGroup) self.assertIsInstance(secgroup, security_groups.SecurityGroup)

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import server_groups as data from novaclient.tests.unit.fixture_data import server_groups as data
from novaclient.tests.unit import utils from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import server_groups from novaclient.v2 import server_groups
@ -26,6 +27,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_list_server_groups(self): def test_list_server_groups(self):
result = self.cs.server_groups.list() result = self.cs.server_groups.list()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups') self.assert_called('GET', '/os-server-groups')
for server_group in result: for server_group in result:
self.assertIsInstance(server_group, self.assertIsInstance(server_group,
@ -33,6 +35,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_list_server_groups_with_all_projects(self): def test_list_server_groups_with_all_projects(self):
result = self.cs.server_groups.list(all_projects=True) result = self.cs.server_groups.list(all_projects=True)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups?all_projects') self.assert_called('GET', '/os-server-groups?all_projects')
for server_group in result: for server_group in result:
self.assertIsInstance(server_group, self.assertIsInstance(server_group,
@ -42,6 +45,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
kwargs = {'name': 'ig1', kwargs = {'name': 'ig1',
'policies': ['anti-affinity']} 'policies': ['anti-affinity']}
server_group = self.cs.server_groups.create(**kwargs) server_group = self.cs.server_groups.create(**kwargs)
self.assert_request_id(server_group, fakes.FAKE_REQUEST_ID_LIST)
body = {'server_group': kwargs} body = {'server_group': kwargs}
self.assert_called('POST', '/os-server-groups', body) self.assert_called('POST', '/os-server-groups', body)
self.assertIsInstance(server_group, self.assertIsInstance(server_group,
@ -50,17 +54,20 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_get_server_group(self): def test_get_server_group(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b' id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
server_group = self.cs.server_groups.get(id) server_group = self.cs.server_groups.get(id)
self.assert_request_id(server_group, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups/%s' % id) self.assert_called('GET', '/os-server-groups/%s' % id)
self.assertIsInstance(server_group, self.assertIsInstance(server_group,
server_groups.ServerGroup) server_groups.ServerGroup)
def test_delete_server_group(self): def test_delete_server_group(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b' id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
self.cs.server_groups.delete(id) ret = self.cs.server_groups.delete(id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-server-groups/%s' % id) self.assert_called('DELETE', '/os-server-groups/%s' % id)
def test_delete_server_group_object(self): def test_delete_server_group_object(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b' id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
server_group = self.cs.server_groups.get(id) server_group = self.cs.server_groups.get(id)
server_group.delete() ret = server_group.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-server-groups/%s' % id) self.assert_called('DELETE', '/os-server-groups/%s' % id)

View File

@ -33,6 +33,7 @@ class ServicesTest(utils.TestCase):
def test_list_services(self): def test_list_services(self):
svs = self.cs.services.list() svs = self.cs.services.list()
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services') self.cs.assert_called('GET', '/os-services')
for s in svs: for s in svs:
self.assertIsInstance(s, self._get_service_type()) self.assertIsInstance(s, self._get_service_type())
@ -42,6 +43,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_hostname(self): def test_list_services_with_hostname(self):
svs = self.cs.services.list(host='host2') svs = self.cs.services.list(host='host2')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services?host=host2') self.cs.assert_called('GET', '/os-services?host=host2')
for s in svs: for s in svs:
self.assertIsInstance(s, self._get_service_type()) self.assertIsInstance(s, self._get_service_type())
@ -50,6 +52,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_binary(self): def test_list_services_with_binary(self):
svs = self.cs.services.list(binary='nova-cert') svs = self.cs.services.list(binary='nova-cert')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services?binary=nova-cert') self.cs.assert_called('GET', '/os-services?binary=nova-cert')
for s in svs: for s in svs:
self.assertIsInstance(s, self._get_service_type()) self.assertIsInstance(s, self._get_service_type())
@ -58,6 +61,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_host_binary(self): def test_list_services_with_host_binary(self):
svs = self.cs.services.list(host='host2', binary='nova-cert') svs = self.cs.services.list(host='host2', binary='nova-cert')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', self.cs.assert_called('GET',
'/os-services?host=host2&binary=nova-cert') '/os-services?host=host2&binary=nova-cert')
for s in svs: for s in svs:
@ -74,17 +78,20 @@ class ServicesTest(utils.TestCase):
def test_services_enable(self): def test_services_enable(self):
service = self.cs.services.enable('host1', 'nova-cert') service = self.cs.services.enable('host1', 'nova-cert')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("host1", "nova-cert") values = self._update_body("host1", "nova-cert")
self.cs.assert_called('PUT', '/os-services/enable', values) self.cs.assert_called('PUT', '/os-services/enable', values)
self.assertIsInstance(service, self._get_service_type()) self.assertIsInstance(service, self._get_service_type())
self.assertEqual('enabled', service.status) self.assertEqual('enabled', service.status)
def test_services_delete(self): def test_services_delete(self):
self.cs.services.delete('1') ret = self.cs.services.delete('1')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('DELETE', '/os-services/1') self.cs.assert_called('DELETE', '/os-services/1')
def test_services_disable(self): def test_services_disable(self):
service = self.cs.services.disable('host1', 'nova-cert') service = self.cs.services.disable('host1', 'nova-cert')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("host1", "nova-cert") values = self._update_body("host1", "nova-cert")
self.cs.assert_called('PUT', '/os-services/disable', values) self.cs.assert_called('PUT', '/os-services/disable', values)
self.assertIsInstance(service, self._get_service_type()) self.assertIsInstance(service, self._get_service_type())
@ -93,6 +100,7 @@ class ServicesTest(utils.TestCase):
def test_services_disable_log_reason(self): def test_services_disable_log_reason(self):
service = self.cs.services.disable_log_reason( service = self.cs.services.disable_log_reason(
'compute1', 'nova-compute', 'disable bad host') 'compute1', 'nova-compute', 'disable bad host')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("compute1", "nova-compute", values = self._update_body("compute1", "nova-compute",
"disable bad host") "disable bad host")
self.cs.assert_called('PUT', '/os-services/disable-log-reason', values) self.cs.assert_called('PUT', '/os-services/disable-log-reason', values)
@ -118,6 +126,7 @@ class ServicesV211TestCase(ServicesTest):
def test_services_force_down(self): def test_services_force_down(self):
service = self.cs.services.force_down( service = self.cs.services.force_down(
'compute1', 'nova-compute', False) 'compute1', 'nova-compute', False)
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("compute1", "nova-compute", values = self._update_body("compute1", "nova-compute",
force_down=False) force_down=False)
self.cs.assert_called('PUT', '/os-services/force-down', values) self.cs.assert_called('PUT', '/os-services/force-down', values)

View File

@ -33,6 +33,7 @@ class UsageTest(utils.TestCase):
def test_usage_list(self, detailed=False): def test_usage_list(self, detailed=False):
now = datetime.datetime.now() now = datetime.datetime.now()
usages = self.cs.usage.list(now, now, detailed) usages = self.cs.usage.list(now, now, detailed)
self.assert_request_id(usages, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called( self.cs.assert_called(
'GET', 'GET',
@ -49,6 +50,7 @@ class UsageTest(utils.TestCase):
def test_usage_get(self): def test_usage_get(self):
now = datetime.datetime.now() now = datetime.datetime.now()
u = self.cs.usage.get("tenantfoo", now, now) u = self.cs.usage.get("tenantfoo", now, now)
self.assert_request_id(u, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called( self.cs.assert_called(
'GET', 'GET',

View File

@ -30,13 +30,15 @@ class VersionsTest(utils.TestCase):
@mock.patch.object(versions.VersionManager, '_is_session_client', @mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=False) return_value=False)
def test_list_services_with_http_client(self, mock_is_session_client): def test_list_services_with_http_client(self, mock_is_session_client):
self.cs.versions.list() vl = self.cs.versions.list()
self.assert_request_id(vl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', None) self.cs.assert_called('GET', None)
@mock.patch.object(versions.VersionManager, '_is_session_client', @mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=True) return_value=True)
def test_list_services_with_session_client(self, mock_is_session_client): def test_list_services_with_session_client(self, mock_is_session_client):
self.cs.versions.list() vl = self.cs.versions.list()
self.assert_request_id(vl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', 'http://nova-api:8774/') self.cs.assert_called('GET', 'http://nova-api:8774/')
@mock.patch.object(versions.VersionManager, '_is_session_client', @mock.patch.object(versions.VersionManager, '_is_session_client',
@ -44,6 +46,8 @@ class VersionsTest(utils.TestCase):
@mock.patch.object(versions.VersionManager, 'list') @mock.patch.object(versions.VersionManager, 'list')
def test_get_current_with_http_client(self, mock_list, def test_get_current_with_http_client(self, mock_list,
mock_is_session_client): mock_is_session_client):
headers = {'x-openstack-request-id': fakes.FAKE_REQUEST_ID}
resp = utils.TestResponse({"headers": headers})
current_version = versions.Version( current_version = versions.Version(
None, {"links": [{"href": "http://nova-api:8774/v2.1"}]}, None, {"links": [{"href": "http://nova-api:8774/v2.1"}]},
loaded=True) loaded=True)
@ -58,14 +62,17 @@ class VersionsTest(utils.TestCase):
current_version, current_version,
versions.Version( versions.Version(
None, {"links": [{"href": "http://url/v21"}]}, loaded=True)] None, {"links": [{"href": "http://url/v21"}]}, loaded=True)]
mock_list.return_value = base.ListWithMeta(all_versions, None) mock_list.return_value = base.ListWithMeta(all_versions, resp)
self.assertEqual(current_version, self.cs.versions.get_current()) v = self.cs.versions.get_current()
self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(current_version, v)
@mock.patch.object(versions.VersionManager, '_is_session_client', @mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=True) return_value=True)
def test_get_current_with_session_client(self, mock_is_session_client): def test_get_current_with_session_client(self, mock_is_session_client):
self.cs.callback = [] self.cs.callback = []
self.cs.versions.get_current() v = self.cs.versions.get_current()
self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', 'http://nova-api:8774/v2.1/') self.cs.assert_called('GET', 'http://nova-api:8774/v2.1/')
@mock.patch.object(versions.VersionManager, '_is_session_client', @mock.patch.object(versions.VersionManager, '_is_session_client',
@ -94,6 +101,7 @@ class VersionsTest(utils.TestCase):
cs_2_1 = fakes.FakeClient(endpoint_type=endpoint_type) cs_2_1 = fakes.FakeClient(endpoint_type=endpoint_type)
result = cs_2_1.versions.get_current() result = cs_2_1.versions.get_current()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(result.manager.api.client.endpoint_type, self.assertEqual(result.manager.api.client.endpoint_type,
endpoint_type, "Check endpoint_type was set") endpoint_type, "Check endpoint_type was set")
self.assertEqual(result.manager.api.client.management_url, self.assertEqual(result.manager.api.client.management_url,
@ -112,6 +120,7 @@ class VersionsTest(utils.TestCase):
cs_2 = fakes.FakeClient(endpoint_type=endpoint_type) cs_2 = fakes.FakeClient(endpoint_type=endpoint_type)
result = cs_2.versions.get_current() result = cs_2.versions.get_current()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(result.manager.api.client.endpoint_type, self.assertEqual(result.manager.api.client.endpoint_type,
endpoint_type, "Check v2 endpoint_type was set") endpoint_type, "Check v2 endpoint_type was set")
self.assertEqual(result.manager.api.client.management_url, self.assertEqual(result.manager.api.client.management_url,

View File

@ -48,7 +48,12 @@ class Keypair(base.Resource):
return self.name return self.name
def delete(self): def delete(self):
self.manager.delete(self) """
Delete this keypair.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class KeypairManager(base.ManagerWithFind): class KeypairManager(base.ManagerWithFind):
@ -133,8 +138,9 @@ class KeypairManager(base.ManagerWithFind):
Delete a keypair Delete a keypair
:param key: The :class:`Keypair` (or its ID) to delete. :param key: The :class:`Keypair` (or its ID) to delete.
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete('/%s/%s' % (self.keypair_prefix, base.getid(key))) return self._delete('/%s/%s' % (self.keypair_prefix, base.getid(key)))
@api_versions.wraps("2.10") @api_versions.wraps("2.10")
def delete(self, key, user_id=None): def delete(self, key, user_id=None):
@ -143,10 +149,11 @@ class KeypairManager(base.ManagerWithFind):
:param key: The :class:`Keypair` (or its ID) to delete. :param key: The :class:`Keypair` (or its ID) to delete.
:param user_id: Id of key-pair owner (Admin only). :param user_id: Id of key-pair owner (Admin only).
:returns: An instance of novaclient.base.TupleWithMeta
""" """
query_string = "?user_id=%s" % user_id if user_id else "" query_string = "?user_id=%s" % user_id if user_id else ""
url = '/%s/%s%s' % (self.keypair_prefix, base.getid(key), query_string) url = '/%s/%s%s' % (self.keypair_prefix, base.getid(key), query_string)
self._delete(url) return self._delete(url)
@api_versions.wraps("2.0", "2.9") @api_versions.wraps("2.0", "2.9")
def list(self): def list(self):

View File

@ -33,7 +33,12 @@ class Network(base.Resource):
return "<Network: %s>" % self.label return "<Network: %s>" % self.label
def delete(self): def delete(self):
self.manager.delete(self) """
Delete this network.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class NetworkManager(base.ManagerWithFind): class NetworkManager(base.ManagerWithFind):
@ -65,8 +70,9 @@ class NetworkManager(base.ManagerWithFind):
Delete a specific network. Delete a specific network.
:param network: The ID of the :class:`Network` to delete. :param network: The ID of the :class:`Network` to delete.
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete("/os-networks/%s" % base.getid(network)) return self._delete("/os-networks/%s" % base.getid(network))
def create(self, **kwargs): def create(self, **kwargs):
""" """
@ -109,6 +115,7 @@ class NetworkManager(base.ManagerWithFind):
:param network: The ID of the :class:`Network`. :param network: The ID of the :class:`Network`.
:param disassociate_host: Whether to disassociate the host :param disassociate_host: Whether to disassociate the host
:param disassociate_project: Whether to disassociate the project :param disassociate_project: Whether to disassociate the project
:returns: An instance of novaclient.base.TupleWithMeta
""" """
if disassociate_host and disassociate_project: if disassociate_host and disassociate_project:
body = {"disassociate": None} body = {"disassociate": None}
@ -120,8 +127,10 @@ class NetworkManager(base.ManagerWithFind):
raise exceptions.CommandError( raise exceptions.CommandError(
_("Must disassociate either host or project or both")) _("Must disassociate either host or project or both"))
self.api.client.post("/os-networks/%s/action" % resp, body = self.api.client.post("/os-networks/%s/action" %
base.getid(network), body=body) base.getid(network), body=body)
return self.convert_into_with_meta(body, resp)
def associate_host(self, network, host): def associate_host(self, network, host):
""" """
@ -129,10 +138,13 @@ class NetworkManager(base.ManagerWithFind):
:param network: The ID of the :class:`Network`. :param network: The ID of the :class:`Network`.
:param host: The name of the host to associate the network with :param host: The name of the host to associate the network with
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self.api.client.post("/os-networks/%s/action" % resp, body = self.api.client.post("/os-networks/%s/action" %
base.getid(network), base.getid(network),
body={"associate_host": host}) body={"associate_host": host})
return self.convert_into_with_meta(body, resp)
def associate_project(self, network): def associate_project(self, network):
""" """
@ -141,8 +153,12 @@ class NetworkManager(base.ManagerWithFind):
The project is defined by the project authenticated against The project is defined by the project authenticated against
:param network: The ID of the :class:`Network`. :param network: The ID of the :class:`Network`.
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self.api.client.post("/os-networks/add", body={"id": network}) resp, body = self.api.client.post("/os-networks/add",
body={"id": network})
return self.convert_into_with_meta(body, resp)
def add(self, network=None): def add(self, network=None):
""" """
@ -150,7 +166,10 @@ class NetworkManager(base.ManagerWithFind):
automatically or provided explicitly. automatically or provided explicitly.
:param network: The ID of the :class:`Network` to associate (optional). :param network: The ID of the :class:`Network` to associate (optional).
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self.api.client.post( resp, body = self.api.client.post("/os-networks/add",
"/os-networks/add", body={"id": base.getid(network)
body={"id": base.getid(network) if network else None}) if network else None})
return self.convert_into_with_meta(body, resp)

View File

@ -61,8 +61,15 @@ class QuotaSetManager(base.Manager):
'quota_set') 'quota_set')
def delete(self, tenant_id, user_id=None): def delete(self, tenant_id, user_id=None):
"""
Delete quota for a tenant or for a user.
:param tenant_id: A tenant for which quota is to be deleted
:param user_id: A user for which quota is to be deleted
:returns: An instance of novaclient.base.TupleWithMeta
"""
if user_id: if user_id:
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id) url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
else: else:
url = '/os-quota-sets/%s' % tenant_id url = '/os-quota-sets/%s' % tenant_id
self._delete(url) return self._delete(url)

View File

@ -24,7 +24,12 @@ class SecurityGroupDefaultRule(base.Resource):
return str(self.id) return str(self.id)
def delete(self): def delete(self):
self.manager.delete(self) """
Delete this security group default rule.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class SecurityGroupDefaultRuleManager(base.Manager): class SecurityGroupDefaultRuleManager(base.Manager):
@ -67,8 +72,10 @@ class SecurityGroupDefaultRuleManager(base.Manager):
Delete a security group default rule Delete a security group default rule
:param rule: The security group default rule to delete (ID or Class) :param rule: The security group default rule to delete (ID or Class)
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete('/os-security-group-default-rules/%s' % base.getid(rule)) return self._delete('/os-security-group-default-rules/%s' %
base.getid(rule))
def list(self): def list(self):
""" """

View File

@ -27,7 +27,12 @@ class SecurityGroupRule(base.Resource):
return str(self.id) return str(self.id)
def delete(self): def delete(self):
self.manager.delete(self) """
Delete this security group rule.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class SecurityGroupRuleManager(base.Manager): class SecurityGroupRuleManager(base.Manager):
@ -74,5 +79,6 @@ class SecurityGroupRuleManager(base.Manager):
Delete a security group rule Delete a security group rule
:param rule: The security group rule to delete (ID or Class) :param rule: The security group rule to delete (ID or Class)
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete('/os-security-group-rules/%s' % base.getid(rule)) return self._delete('/os-security-group-rules/%s' % base.getid(rule))

View File

@ -28,10 +28,20 @@ class SecurityGroup(base.Resource):
return str(self.id) return str(self.id)
def delete(self): def delete(self):
self.manager.delete(self) """
Delete this security group.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
def update(self): def update(self):
self.manager.update(self) """
Update this security group.
:returns: :class:`SecurityGroup`
"""
return self.manager.update(self)
class SecurityGroupManager(base.ManagerWithFind): class SecurityGroupManager(base.ManagerWithFind):
@ -66,9 +76,9 @@ class SecurityGroupManager(base.ManagerWithFind):
Delete a security group Delete a security group
:param group: The security group to delete (group or ID) :param group: The security group to delete (group or ID)
:rtype: None :returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete('/os-security-groups/%s' % base.getid(group)) return self._delete('/os-security-groups/%s' % base.getid(group))
def get(self, group_id): def get(self, group_id):
""" """

View File

@ -30,7 +30,12 @@ class ServerGroup(base.Resource):
return '<ServerGroup: %s>' % self.id return '<ServerGroup: %s>' % self.id
def delete(self): def delete(self):
self.manager.delete(self.id) """
Delete this server group.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self.id)
class ServerGroupsManager(base.ManagerWithFind): class ServerGroupsManager(base.ManagerWithFind):
@ -60,8 +65,9 @@ class ServerGroupsManager(base.ManagerWithFind):
"""Delete a specific server group. """Delete a specific server group.
:param id: The ID of the :class:`ServerGroup` to delete. :param id: The ID of the :class:`ServerGroup` to delete.
:returns: An instance of novaclient.base.TupleWithMeta
""" """
self._delete('/os-server-groups/%s' % id) return self._delete('/os-server-groups/%s' % id)
def create(self, **kwargs): def create(self, **kwargs):
"""Create (allocate) a server group. """Create (allocate) a server group.

View File

@ -76,6 +76,7 @@ class VersionManager(base.ManagerWithFind):
for version in all_versions: for version in all_versions:
for link in version.links: for link in version.links:
if link["href"].rstrip('/') == url: if link["href"].rstrip('/') == url:
version.append_request_ids(all_versions.request_ids)
return version return version
def get_current(self): def get_current(self):