Show 'locked' information in server details
Adds a new microversion to show server 'locked' information in server details. DocImpact - See nova/api/openstack/rest_api_version_history.rst for details APIImpact Implements blueprint add-locking-information-in-server-get-response Depends-on: I5be664c3e99adc37738f8b074f1891dad97497b1 Change-Id: I3e5dc6e37f130f70e3a861a9906bb062c6110742
This commit is contained in:
parent
14d00296b1
commit
49a572a043
@ -22,7 +22,7 @@
|
||||
}
|
||||
],
|
||||
"status": "CURRENT",
|
||||
"version": "2.8",
|
||||
"version": "2.9",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z"
|
||||
}
|
||||
|
58
doc/v3/api_samples/servers/v2.9/server-get-resp.json
Normal file
58
doc/v3/api_samples/servers/v2.9/server-get-resp.json
Normal file
@ -0,0 +1,58 @@
|
||||
{
|
||||
"server": {
|
||||
"accessIPv4": "1.2.3.4",
|
||||
"accessIPv6": "80fe::",
|
||||
"addresses": {
|
||||
"private": [
|
||||
{
|
||||
"addr": "192.168.0.3",
|
||||
"OS-EXT-IPS-MAC:mac_addr": "aa:bb:cc:dd:ee:ff",
|
||||
"OS-EXT-IPS:type": "fixed",
|
||||
"version": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"created": "2013-09-03T04:01:32Z",
|
||||
"flavor": {
|
||||
"id": "1",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/flavors/1",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hostId": "92154fab69d5883ba2c8622b7e65f745dd33257221c07af363c51b29",
|
||||
"id": "0e44cc9c-e052-415d-afbf-469b0d384170",
|
||||
"image": {
|
||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_name": null,
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2/openstack/servers/0e44cc9c-e052-415d-afbf-469b0d384170",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/servers/0e44cc9c-e052-415d-afbf-469b0d384170",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"My Server Name": "Apache1"
|
||||
},
|
||||
"name": "new-server-test",
|
||||
"progress": 0,
|
||||
"status": "ACTIVE",
|
||||
"tenant_id": "openstack",
|
||||
"updated": "2013-09-03T04:01:33Z",
|
||||
"user_id": "fake",
|
||||
"locked": false
|
||||
}
|
||||
}
|
12
doc/v3/api_samples/servers/v2.9/server-post-req.json
Normal file
12
doc/v3/api_samples/servers/v2.9/server-post-req.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"server" : {
|
||||
"accessIPv4": "1.2.3.4",
|
||||
"accessIPv6": "80fe::",
|
||||
"name" : "new-server-test",
|
||||
"imageRef" : "http://glance.openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"flavorRef" : "http://openstack.example.com/flavors/1",
|
||||
"metadata" : {
|
||||
"My Server Name" : "Apache1"
|
||||
}
|
||||
}
|
||||
}
|
16
doc/v3/api_samples/servers/v2.9/server-post-resp.json
Normal file
16
doc/v3/api_samples/servers/v2.9/server-post-resp.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"server": {
|
||||
"adminPass": "6NpUwoz2QDRN",
|
||||
"id": "f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2/openstack/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
60
doc/v3/api_samples/servers/v2.9/servers-details-resp.json
Normal file
60
doc/v3/api_samples/servers/v2.9/servers-details-resp.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"servers": [
|
||||
{
|
||||
"accessIPv4": "1.2.3.4",
|
||||
"accessIPv6": "80fe::",
|
||||
"addresses": {
|
||||
"private": [
|
||||
{
|
||||
"addr": "192.168.0.3",
|
||||
"OS-EXT-IPS-MAC:mac_addr": "aa:bb:cc:dd:ee:ff",
|
||||
"OS-EXT-IPS:type": "fixed",
|
||||
"version": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"created": "2013-09-03T04:01:32Z",
|
||||
"flavor": {
|
||||
"id": "1",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/flavors/1",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hostId": "bcf92836fc9ed4203a75cb0337afc7f917d2be504164b995c2334b25",
|
||||
"id": "f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"image": {
|
||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_name": null,
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2/openstack/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"My Server Name": "Apache1"
|
||||
},
|
||||
"name": "new-server-test",
|
||||
"progress": 0,
|
||||
"status": "ACTIVE",
|
||||
"tenant_id": "openstack",
|
||||
"updated": "2013-09-03T04:01:32Z",
|
||||
"user_id": "fake",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
18
doc/v3/api_samples/servers/v2.9/servers-list-resp.json
Normal file
18
doc/v3/api_samples/servers/v2.9/servers-list-resp.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"servers": [
|
||||
{
|
||||
"id": "22c91117-08de-4894-9aa9-6ef382400985",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2/openstack/servers/22c91117-08de-4894-9aa9-6ef382400985",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/servers/22c91117-08de-4894-9aa9-6ef382400985",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"name": "new-server-test"
|
||||
}
|
||||
]
|
||||
}
|
@ -47,6 +47,7 @@ REST_API_VERSION_HISTORY = """REST API Version History:
|
||||
* 2.6 - Consolidate the APIs for getting remote consoles
|
||||
* 2.7 - Check flavor type before add tenant access.
|
||||
* 2.8 - Add new protocol for VM console (mks)
|
||||
* 2.9 - Exposes lock information in server details.
|
||||
"""
|
||||
|
||||
# The minimum and maximum versions of the API supported
|
||||
@ -55,7 +56,7 @@ REST_API_VERSION_HISTORY = """REST API Version History:
|
||||
# Note(cyeoh): This only applies for the v2.1 API once microversions
|
||||
# support is fully merged. It does not affect the V2 API.
|
||||
_MIN_API_VERSION = "2.1"
|
||||
_MAX_API_VERSION = "2.8"
|
||||
_MAX_API_VERSION = "2.9"
|
||||
DEFAULT_API_VERSION = _MIN_API_VERSION
|
||||
|
||||
|
||||
|
@ -19,6 +19,7 @@ import hashlib
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import timeutils
|
||||
|
||||
from nova.api.openstack import api_version_request
|
||||
from nova.api.openstack import common
|
||||
from nova.api.openstack.compute.views import addresses as views_addresses
|
||||
from nova.api.openstack.compute.views import flavors as views_flavors
|
||||
@ -280,4 +281,9 @@ class ViewBuilderV3(ViewBuilder):
|
||||
if server["server"]["status"] in self._progress_statuses:
|
||||
server["server"]["progress"] = instance.get("progress", 0)
|
||||
|
||||
if (request.api_version_request >=
|
||||
api_version_request.APIVersionRequest("2.9")):
|
||||
server["server"]["locked"] = (True if instance["locked_by"]
|
||||
else False)
|
||||
|
||||
return server
|
||||
|
@ -100,3 +100,9 @@ user documentation.
|
||||
2.8
|
||||
---
|
||||
Add 'mks' protocol and 'webmks' type for remote consoles.
|
||||
|
||||
2.9
|
||||
---
|
||||
|
||||
Show instance lock information in new response attribute 'locked'
|
||||
in server details. Returned value will be True or False.
|
||||
|
@ -22,7 +22,7 @@
|
||||
}
|
||||
],
|
||||
"status": "CURRENT",
|
||||
"version": "2.8",
|
||||
"version": "2.9",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z"
|
||||
}
|
||||
|
@ -0,0 +1,58 @@
|
||||
{
|
||||
"server": {
|
||||
"accessIPv4": "%(access_ip_v4)s",
|
||||
"accessIPv6": "%(access_ip_v6)s",
|
||||
"addresses": {
|
||||
"private": [
|
||||
{
|
||||
"addr": "%(ip)s",
|
||||
"OS-EXT-IPS-MAC:mac_addr": "aa:bb:cc:dd:ee:ff",
|
||||
"OS-EXT-IPS:type": "fixed",
|
||||
"version": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"created": "%(isotime)s",
|
||||
"flavor": {
|
||||
"id": "1",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/openstack/flavors/1",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hostId": "%(hostid)s",
|
||||
"id": "%(id)s",
|
||||
"image": {
|
||||
"id": "%(uuid)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/openstack/images/%(uuid)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_name": null,
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v2/openstack/servers/%(uuid)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/openstack/servers/%(uuid)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"My Server Name": "Apache1"
|
||||
},
|
||||
"name": "new-server-test",
|
||||
"progress": 0,
|
||||
"status": "ACTIVE",
|
||||
"tenant_id": "openstack",
|
||||
"updated": "%(isotime)s",
|
||||
"user_id": "fake",
|
||||
"locked": false
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"server" : {
|
||||
"accessIPv4": "%(access_ip_v4)s",
|
||||
"accessIPv6": "%(access_ip_v6)s",
|
||||
"name" : "new-server-test",
|
||||
"imageRef" : "%(glance_host)s/images/%(image_id)s",
|
||||
"flavorRef" : "%(host)s/flavors/1",
|
||||
"metadata" : {
|
||||
"My Server Name" : "Apache1"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"server": {
|
||||
"adminPass": "%(password)s",
|
||||
"id": "%(id)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2/openstack/servers/%(uuid)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/openstack/servers/%(uuid)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
{
|
||||
"servers": [
|
||||
{
|
||||
"accessIPv4": "%(access_ip_v4)s",
|
||||
"accessIPv6": "%(access_ip_v6)s",
|
||||
"addresses": {
|
||||
"private": [
|
||||
{
|
||||
"addr": "%(ip)s",
|
||||
"OS-EXT-IPS-MAC:mac_addr": "aa:bb:cc:dd:ee:ff",
|
||||
"OS-EXT-IPS:type": "fixed",
|
||||
"version": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"created": "%(isotime)s",
|
||||
"flavor": {
|
||||
"id": "1",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/openstack/flavors/1",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hostId": "%(hostid)s",
|
||||
"id": "%(id)s",
|
||||
"image": {
|
||||
"id": "%(uuid)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/openstack/images/%(uuid)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_name": null,
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v2/openstack/servers/%(uuid)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/openstack/servers/%(id)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"My Server Name": "Apache1"
|
||||
},
|
||||
"name": "new-server-test",
|
||||
"progress": 0,
|
||||
"status": "ACTIVE",
|
||||
"tenant_id": "openstack",
|
||||
"updated": "%(isotime)s",
|
||||
"user_id": "fake",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"servers": [
|
||||
{
|
||||
"id": "%(id)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v2/openstack/servers/%(id)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/openstack/servers/%(id)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"name": "new-server-test"
|
||||
}
|
||||
]
|
||||
}
|
@ -66,6 +66,7 @@ class ServersSampleJsonTest(ServersSampleBase):
|
||||
sample_dir = 'servers'
|
||||
extra_extensions_to_load = ["os-access-ips"]
|
||||
_api_version = 'v2'
|
||||
request_api_version = None
|
||||
|
||||
def _get_flags(self):
|
||||
f = super(ServersSampleBase, self)._get_flags()
|
||||
@ -84,7 +85,8 @@ class ServersSampleJsonTest(ServersSampleBase):
|
||||
|
||||
def test_servers_get(self):
|
||||
uuid = self.test_servers_post()
|
||||
response = self._do_get('servers/%s' % uuid)
|
||||
response = self._do_get('servers/%s' % uuid,
|
||||
api_version=self.request_api_version)
|
||||
subs = self._get_regexes()
|
||||
subs['hostid'] = '[a-f0-9]+'
|
||||
subs['id'] = uuid
|
||||
@ -96,14 +98,16 @@ class ServersSampleJsonTest(ServersSampleBase):
|
||||
|
||||
def test_servers_list(self):
|
||||
uuid = self._post_server()
|
||||
response = self._do_get('servers')
|
||||
response = self._do_get('servers',
|
||||
api_version=self.request_api_version)
|
||||
subs = self._get_regexes()
|
||||
subs['id'] = uuid
|
||||
self._verify_response('servers-list-resp', subs, response, 200)
|
||||
|
||||
def test_servers_details(self):
|
||||
uuid = self._post_server()
|
||||
response = self._do_get('servers/detail')
|
||||
response = self._do_get('servers/detail',
|
||||
api_version=self.request_api_version)
|
||||
subs = self._get_regexes()
|
||||
subs['hostid'] = '[a-f0-9]+'
|
||||
subs['id'] = uuid
|
||||
@ -114,6 +118,14 @@ class ServersSampleJsonTest(ServersSampleBase):
|
||||
self._verify_response('servers-details-resp', subs, response, 200)
|
||||
|
||||
|
||||
class ServersSampleJson29Test(ServersSampleJsonTest):
|
||||
request_api_version = '2.9'
|
||||
# NOTE(gmann): microversion tests do not need to run for v2 API
|
||||
# so defining scenarios only for v2.9 which will run the original tests
|
||||
# by appending '(v2_9)' in test_id.
|
||||
scenarios = [('v2_9', {})]
|
||||
|
||||
|
||||
class ServerSortKeysJsonTests(ServersSampleBase):
|
||||
sample_dir = 'servers-sort'
|
||||
extra_extensions_to_load = ["os-access-ips"]
|
||||
|
@ -46,6 +46,7 @@ from nova.api.openstack.compute.schemas.v3 import disk_config as \
|
||||
from nova.api.openstack.compute.schemas.v3 import servers as servers_schema
|
||||
from nova.api.openstack.compute import views
|
||||
from nova.api.openstack import extensions
|
||||
from nova.api.openstack import wsgi as os_wsgi
|
||||
from nova.compute import api as compute_api
|
||||
from nova.compute import flavors
|
||||
from nova.compute import task_states
|
||||
@ -121,6 +122,19 @@ def fake_instance_get_by_uuid_not_found(context, uuid,
|
||||
raise exception.InstanceNotFound(instance_id=uuid)
|
||||
|
||||
|
||||
def fake_instance_get_all_with_locked(context, list_locked, **kwargs):
|
||||
db_list = []
|
||||
s_id = 0
|
||||
for locked in list_locked:
|
||||
uuid = fakes.get_fake_uuid(locked)
|
||||
s_id = s_id + 1
|
||||
kwargs['locked_by'] = None if locked == 'not_locked' else locked
|
||||
server = fakes.stub_instance(id=s_id, uuid=uuid, **kwargs)
|
||||
db_list.append(server)
|
||||
return instance_obj._make_instance_list(
|
||||
context, objects.InstanceList(), db_list, FIELDS)
|
||||
|
||||
|
||||
class MockSetAdminPassword(object):
|
||||
def __init__(self):
|
||||
self.instance_id = None
|
||||
@ -200,11 +214,17 @@ class ControllerTest(test.TestCase):
|
||||
|
||||
|
||||
class ServersControllerTest(ControllerTest):
|
||||
wsgi_api_version = os_wsgi.DEFAULT_API_VERSION
|
||||
|
||||
def setUp(self):
|
||||
super(ServersControllerTest, self).setUp()
|
||||
CONF.set_override('host', 'localhost', group='glance')
|
||||
|
||||
def req(self, url, use_admin_context=False):
|
||||
return fakes.HTTPRequest.blank(url,
|
||||
use_admin_context=use_admin_context,
|
||||
version=self.wsgi_api_version)
|
||||
|
||||
def test_requested_networks_prefix(self):
|
||||
uuid = 'br-00000000-0000-0000-0000-000000000000'
|
||||
requested_networks = [{'uuid': uuid}]
|
||||
@ -290,7 +310,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual([(None, None, port, None)], res.as_tuples())
|
||||
|
||||
def test_get_server_by_uuid(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % FAKE_UUID)
|
||||
req = self.req('/servers/%s' % FAKE_UUID)
|
||||
res_dict = self.controller.show(req, FAKE_UUID)
|
||||
self.assertEqual(res_dict['server']['id'], FAKE_UUID)
|
||||
|
||||
@ -305,7 +325,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get', fake_get)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % FAKE_UUID)
|
||||
req = self.req('/servers/%s' % FAKE_UUID)
|
||||
self.controller.show(req, FAKE_UUID)
|
||||
|
||||
self.assertIn('pci_devices', self.expected_attrs)
|
||||
@ -323,7 +343,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get',
|
||||
return_instance_with_host)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % FAKE_UUID)
|
||||
req = self.req('/servers/%s' % FAKE_UUID)
|
||||
with mock.patch.object(compute_api.API, 'get') as mock_get:
|
||||
mock_get.side_effect = return_instance_with_host
|
||||
server1 = self.controller.show(req, FAKE_UUID)
|
||||
@ -379,7 +399,7 @@ class ServersControllerTest(ControllerTest):
|
||||
"links": [
|
||||
{
|
||||
"rel": "self",
|
||||
"href": "http://localhost/v3/servers/%s" % uuid,
|
||||
"href": "http://localhost/v2/servers/%s" % uuid,
|
||||
},
|
||||
{
|
||||
"rel": "bookmark",
|
||||
@ -395,7 +415,7 @@ class ServersControllerTest(ControllerTest):
|
||||
flavor_bookmark = "http://localhost/flavors/2"
|
||||
|
||||
uuid = FAKE_UUID
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
|
||||
req = self.req('/servers/%s' % uuid)
|
||||
res_dict = self.controller.show(req, uuid)
|
||||
|
||||
expected_server = self._get_server_data_dict(uuid,
|
||||
@ -418,7 +438,7 @@ class ServersControllerTest(ControllerTest):
|
||||
lambda api, *a, **k: new_return_server(*a, **k))
|
||||
|
||||
uuid = FAKE_UUID
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
|
||||
req = self.req('/servers/%s' % uuid)
|
||||
res_dict = self.controller.show(req, uuid)
|
||||
expected_server = self._get_server_data_dict(uuid,
|
||||
image_bookmark,
|
||||
@ -438,7 +458,7 @@ class ServersControllerTest(ControllerTest):
|
||||
lambda api, *a, **k: new_return_server(*a, **k))
|
||||
|
||||
uuid = FAKE_UUID
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
|
||||
req = self.req('/servers/%s' % uuid)
|
||||
res_dict = self.controller.show(req, uuid)
|
||||
expected_server = self._get_server_data_dict(uuid,
|
||||
image_bookmark,
|
||||
@ -479,7 +499,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get',
|
||||
lambda api, *a, **k: return_server(*a, **k))
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s/ips' % FAKE_UUID)
|
||||
req = self.req('/servers/%s/ips' % FAKE_UUID)
|
||||
res_dict = self.ips_controller.index(req, FAKE_UUID)
|
||||
|
||||
expected = {
|
||||
@ -505,7 +525,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
def test_get_server_addresses_nonexistent_network(self):
|
||||
url = '/v3/servers/%s/ips/network_0' % FAKE_UUID
|
||||
req = fakes.HTTPRequestV3.blank(url)
|
||||
req = self.req(url)
|
||||
self.assertRaises(webob.exc.HTTPNotFound, self.ips_controller.show,
|
||||
req, FAKE_UUID, 'network_0')
|
||||
|
||||
@ -516,7 +536,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get', fake_instance_get)
|
||||
|
||||
server_id = str(uuid.uuid4())
|
||||
req = fakes.HTTPRequestV3.blank('/servers/%s/ips' % server_id)
|
||||
req = self.req('/servers/%s/ips' % server_id)
|
||||
self.assertRaises(webob.exc.HTTPNotFound,
|
||||
self.ips_controller.index, req, server_id)
|
||||
|
||||
@ -524,14 +544,14 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get_all',
|
||||
return_servers_empty)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers')
|
||||
req = self.req('/servers')
|
||||
res_dict = self.controller.index(req)
|
||||
|
||||
num_servers = len(res_dict['servers'])
|
||||
self.assertEqual(0, num_servers)
|
||||
|
||||
def test_get_server_list_with_reservation_id(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?reservation_id=foo')
|
||||
req = self.req('/servers?reservation_id=foo')
|
||||
res_dict = self.controller.index(req)
|
||||
|
||||
i = 0
|
||||
@ -540,7 +560,7 @@ class ServersControllerTest(ControllerTest):
|
||||
i += 1
|
||||
|
||||
def test_get_server_list_with_reservation_id_empty(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail?'
|
||||
req = self.req('/servers/detail?'
|
||||
'reservation_id=foo')
|
||||
res_dict = self.controller.detail(req)
|
||||
|
||||
@ -550,7 +570,7 @@ class ServersControllerTest(ControllerTest):
|
||||
i += 1
|
||||
|
||||
def test_get_server_list_with_reservation_id_details(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail?'
|
||||
req = self.req('/servers/detail?'
|
||||
'reservation_id=foo')
|
||||
res_dict = self.controller.detail(req)
|
||||
|
||||
@ -560,7 +580,7 @@ class ServersControllerTest(ControllerTest):
|
||||
i += 1
|
||||
|
||||
def test_get_server_list(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers')
|
||||
req = self.req('/servers')
|
||||
res_dict = self.controller.index(req)
|
||||
|
||||
self.assertEqual(len(res_dict['servers']), 5)
|
||||
@ -572,7 +592,7 @@ class ServersControllerTest(ControllerTest):
|
||||
expected_links = [
|
||||
{
|
||||
"rel": "self",
|
||||
"href": "http://localhost/v3/servers/%s" % s['id'],
|
||||
"href": "http://localhost/v2/servers/%s" % s['id'],
|
||||
},
|
||||
{
|
||||
"rel": "bookmark",
|
||||
@ -583,7 +603,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual(s['links'], expected_links)
|
||||
|
||||
def test_get_servers_with_limit(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?limit=3')
|
||||
req = self.req('/servers?limit=3')
|
||||
res_dict = self.controller.index(req)
|
||||
|
||||
servers = res_dict['servers']
|
||||
@ -593,14 +613,14 @@ class ServersControllerTest(ControllerTest):
|
||||
servers_links = res_dict['servers_links']
|
||||
self.assertEqual(servers_links[0]['rel'], 'next')
|
||||
href_parts = urlparse.urlparse(servers_links[0]['href'])
|
||||
self.assertEqual('/v3/servers', href_parts.path)
|
||||
self.assertEqual('/v2/servers', href_parts.path)
|
||||
params = urlparse.parse_qs(href_parts.query)
|
||||
expected_params = {'limit': ['3'],
|
||||
'marker': [fakes.get_fake_uuid(2)]}
|
||||
self.assertThat(params, matchers.DictMatches(expected_params))
|
||||
|
||||
def test_get_servers_with_limit_bad_value(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?limit=aaa')
|
||||
req = self.req('/servers?limit=aaa')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
|
||||
@ -608,14 +628,14 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get_all',
|
||||
return_servers_empty)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail')
|
||||
req = self.req('/servers/detail')
|
||||
res_dict = self.controller.detail(req)
|
||||
|
||||
num_servers = len(res_dict['servers'])
|
||||
self.assertEqual(0, num_servers)
|
||||
|
||||
def test_get_server_details_with_limit(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail?limit=3')
|
||||
req = self.req('/servers/detail?limit=3')
|
||||
res = self.controller.detail(req)
|
||||
|
||||
servers = res['servers']
|
||||
@ -626,18 +646,18 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual(servers_links[0]['rel'], 'next')
|
||||
|
||||
href_parts = urlparse.urlparse(servers_links[0]['href'])
|
||||
self.assertEqual('/v3/servers/detail', href_parts.path)
|
||||
self.assertEqual('/v2/servers/detail', href_parts.path)
|
||||
params = urlparse.parse_qs(href_parts.query)
|
||||
expected = {'limit': ['3'], 'marker': [fakes.get_fake_uuid(2)]}
|
||||
self.assertThat(params, matchers.DictMatches(expected))
|
||||
|
||||
def test_get_server_details_with_limit_bad_value(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail?limit=aaa')
|
||||
req = self.req('/servers/detail?limit=aaa')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.detail, req)
|
||||
|
||||
def test_get_server_details_with_limit_and_other_params(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail'
|
||||
req = self.req('/servers/detail'
|
||||
'?limit=3&blah=2:t'
|
||||
'&sort_key=id1&sort_dir=asc')
|
||||
res = self.controller.detail(req)
|
||||
@ -650,7 +670,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual(servers_links[0]['rel'], 'next')
|
||||
|
||||
href_parts = urlparse.urlparse(servers_links[0]['href'])
|
||||
self.assertEqual('/v3/servers/detail', href_parts.path)
|
||||
self.assertEqual('/v2/servers/detail', href_parts.path)
|
||||
params = urlparse.parse_qs(href_parts.query)
|
||||
expected = {'limit': ['3'], 'blah': ['2:t'],
|
||||
'sort_key': ['id1'], 'sort_dir': ['asc'],
|
||||
@ -658,29 +678,29 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertThat(params, matchers.DictMatches(expected))
|
||||
|
||||
def test_get_servers_with_too_big_limit(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?limit=30')
|
||||
req = self.req('/servers?limit=30')
|
||||
res_dict = self.controller.index(req)
|
||||
self.assertNotIn('servers_links', res_dict)
|
||||
|
||||
def test_get_servers_with_bad_limit(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?limit=asdf')
|
||||
req = self.req('/servers?limit=asdf')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
|
||||
def test_get_servers_with_marker(self):
|
||||
url = '/v3/servers?marker=%s' % fakes.get_fake_uuid(2)
|
||||
req = fakes.HTTPRequestV3.blank(url)
|
||||
req = self.req(url)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual([s['name'] for s in servers], ["server4", "server5"])
|
||||
|
||||
def test_get_servers_with_limit_and_marker(self):
|
||||
url = '/v3/servers?limit=2&marker=%s' % fakes.get_fake_uuid(1)
|
||||
req = fakes.HTTPRequestV3.blank(url)
|
||||
req = self.req(url)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual([s['name'] for s in servers], ['server3', 'server4'])
|
||||
|
||||
def test_get_servers_with_bad_marker(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?limit=2&marker=asdf')
|
||||
req = self.req('/servers?limit=2&marker=asdf')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
|
||||
@ -696,7 +716,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?unknownoption=whee')
|
||||
req = self.req('/servers?unknownoption=whee')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -717,7 +737,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?image=12345')
|
||||
req = self.req('/servers?image=12345')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -729,7 +749,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual(search_opts['project_id'], 'fake')
|
||||
return [fakes.stub_instance_obj(100)]
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?tenant_id=newfake')
|
||||
req = self.req('/servers?tenant_id=newfake')
|
||||
with mock.patch.object(compute_api.API, 'get_all') as mock_get:
|
||||
mock_get.side_effect = fake_get_all
|
||||
servers = self.controller.index(req)['servers']
|
||||
@ -740,7 +760,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertNotIn('project_id', search_opts)
|
||||
return [fakes.stub_instance_obj(100)]
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants',
|
||||
req = self.req('/servers?all_tenants',
|
||||
use_admin_context=True)
|
||||
with mock.patch.object(compute_api.API, 'get_all') as mock_get:
|
||||
mock_get.side_effect = fake_get_all
|
||||
@ -754,7 +774,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=1',
|
||||
req = self.req('/servers?all_tenants=1',
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -766,7 +786,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=0',
|
||||
req = self.req('/servers?all_tenants=0',
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -778,7 +798,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=false',
|
||||
req = self.req('/servers?all_tenants=false',
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -790,7 +810,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=xxx',
|
||||
req = self.req('/servers?all_tenants=xxx',
|
||||
use_admin_context=True)
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
@ -803,7 +823,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers',
|
||||
req = self.req('/servers',
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -825,7 +845,7 @@ class ServersControllerTest(ControllerTest):
|
||||
}
|
||||
policy.set_rules(rules)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=1')
|
||||
req = self.req('/servers?all_tenants=1')
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
|
||||
@ -844,7 +864,7 @@ class ServersControllerTest(ControllerTest):
|
||||
policy.set_rules(rules)
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=1')
|
||||
req = self.req('/servers?all_tenants=1')
|
||||
self.assertRaises(exception.PolicyNotAuthorized,
|
||||
self.controller.index, req)
|
||||
|
||||
@ -863,14 +883,14 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?flavor=12345')
|
||||
req = self.req('/servers?flavor=12345')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
self.assertEqual(servers[0]['id'], server_uuid)
|
||||
|
||||
def test_get_servers_with_bad_flavor(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?flavor=abcde')
|
||||
req = self.req('/servers?flavor=abcde')
|
||||
with mock.patch.object(compute_api.API, 'get_all') as mock_get:
|
||||
mock_get.return_value = objects.InstanceList(objects=[])
|
||||
servers = self.controller.index(req)['servers']
|
||||
@ -878,7 +898,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.assertEqual(len(servers), 0)
|
||||
|
||||
def test_get_server_details_with_bad_flavor(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?flavor=abcde')
|
||||
req = self.req('/servers?flavor=abcde')
|
||||
with mock.patch.object(compute_api.API, 'get_all') as mock_get:
|
||||
mock_get.return_value = objects.InstanceList(objects=[])
|
||||
servers = self.controller.detail(req)['servers']
|
||||
@ -899,7 +919,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=active')
|
||||
req = self.req('/servers?status=active')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -924,7 +944,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=reboot')
|
||||
req = self.req('/servers?status=reboot')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -946,7 +966,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=resize')
|
||||
req = self.req('/servers?status=resize')
|
||||
|
||||
servers = self.controller.detail(req)['servers']
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -954,13 +974,13 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
def test_get_servers_invalid_status(self):
|
||||
# Test getting servers by invalid status.
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=baloney',
|
||||
req = self.req('/servers?status=baloney',
|
||||
use_admin_context=False)
|
||||
servers = self.controller.index(req)['servers']
|
||||
self.assertEqual(len(servers), 0)
|
||||
|
||||
def test_get_servers_deleted_status_as_user(self):
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=deleted',
|
||||
req = self.req('/servers?status=deleted',
|
||||
use_admin_context=False)
|
||||
self.assertRaises(webob.exc.HTTPForbidden,
|
||||
self.controller.detail, req)
|
||||
@ -979,7 +999,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?status=deleted',
|
||||
req = self.req('/servers?status=deleted',
|
||||
use_admin_context=True)
|
||||
|
||||
servers = self.controller.detail(req)['servers']
|
||||
@ -995,7 +1015,7 @@ class ServersControllerTest(ControllerTest):
|
||||
vm_state='deleted')])
|
||||
mock_get_all.return_value = db_list
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?deleted=true',
|
||||
req = self.req('/servers?deleted=true',
|
||||
use_admin_context=True)
|
||||
|
||||
servers = self.controller.detail(req)['servers']
|
||||
@ -1049,7 +1069,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?name=whee.*')
|
||||
req = self.req('/servers?name=whee.*')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -1082,7 +1102,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
params = 'changes-since=2011-01-24T17:08:01Z'
|
||||
req = fakes.HTTPRequestV3.blank('/servers?%s' % params)
|
||||
req = self.req('/servers?%s' % params)
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -1090,7 +1110,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
def test_get_servers_allows_changes_since_bad_value(self):
|
||||
params = 'changes-since=asdf'
|
||||
req = fakes.HTTPRequestV3.blank('/servers?%s' % params)
|
||||
req = self.req('/servers?%s' % params)
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.index, req)
|
||||
|
||||
def test_get_servers_admin_filters_as_user(self):
|
||||
@ -1147,7 +1167,7 @@ class ServersControllerTest(ControllerTest):
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
query_str = "name=foo&ip=10.*&status=active&unknown_option=meow"
|
||||
req = fakes.HTTPRequestV3.blank('/servers?%s' % query_str,
|
||||
req = self.req('/servers?%s' % query_str,
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
@ -1170,7 +1190,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?ip=10\..*')
|
||||
req = self.req('/servers?ip=10\..*')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
self.assertEqual(len(servers), 1)
|
||||
@ -1193,7 +1213,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?ip6=ffff.*',
|
||||
req = self.req('/servers?ip6=ffff.*',
|
||||
use_admin_context=True)
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
@ -1217,7 +1237,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers?ip6=ffff.*')
|
||||
req = self.req('/servers?ip6=ffff.*')
|
||||
req.api_version_request = api_version_request.APIVersionRequest('2.5')
|
||||
servers = self.controller.index(req)['servers']
|
||||
|
||||
@ -1243,7 +1263,7 @@ class ServersControllerTest(ControllerTest):
|
||||
},
|
||||
],
|
||||
}
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail')
|
||||
req = self.req('/servers/detail')
|
||||
res_dict = self.controller.detail(req)
|
||||
|
||||
for i, s in enumerate(res_dict['servers']):
|
||||
@ -1274,7 +1294,7 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', return_servers_with_host)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers/detail')
|
||||
req = self.req('/servers/detail')
|
||||
res_dict = self.controller.detail(req)
|
||||
|
||||
server_list = res_dict['servers']
|
||||
@ -1298,11 +1318,92 @@ class ServersControllerTest(ControllerTest):
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
req = fakes.HTTPRequestV3.blank('/servers', use_admin_context=True)
|
||||
req = self.req('/servers', use_admin_context=True)
|
||||
self.assertIn('servers', self.controller.index(req))
|
||||
self.assertIn('pci_devices', self.expected_attrs)
|
||||
|
||||
|
||||
class ServersControllerTestV29(ServersControllerTest):
|
||||
wsgi_api_version = '2.9'
|
||||
|
||||
def _get_server_data_dict(self, uuid, image_bookmark, flavor_bookmark,
|
||||
status="ACTIVE", progress=100):
|
||||
server_dict = super(ServersControllerTestV29,
|
||||
self)._get_server_data_dict(uuid,
|
||||
image_bookmark,
|
||||
flavor_bookmark,
|
||||
status,
|
||||
progress)
|
||||
server_dict['server']['locked'] = False
|
||||
return server_dict
|
||||
|
||||
@mock.patch.object(compute_api.API, 'get')
|
||||
def _test_get_server_with_lock(self, locked_by, get_mock):
|
||||
image_bookmark = "http://localhost/images/10"
|
||||
flavor_bookmark = "http://localhost/flavors/2"
|
||||
uuid = FAKE_UUID
|
||||
get_mock.side_effect = fakes.fake_compute_get(id=2,
|
||||
locked_by=locked_by,
|
||||
uuid=uuid)
|
||||
|
||||
req = self.req('/servers/%s' % uuid)
|
||||
res_dict = self.controller.show(req, uuid)
|
||||
|
||||
expected_server = self._get_server_data_dict(uuid,
|
||||
image_bookmark,
|
||||
flavor_bookmark,
|
||||
status="BUILD",
|
||||
progress=0)
|
||||
expected_server['server']['locked'] = True if locked_by else False
|
||||
self.assertThat(res_dict, matchers.DictMatches(expected_server))
|
||||
return res_dict
|
||||
|
||||
def test_get_server_with_locked_by_admin(self):
|
||||
res_dict = self._test_get_server_with_lock('admin')
|
||||
self.assertTrue(res_dict['server']['locked'])
|
||||
|
||||
def test_get_server_with_locked_by_owner(self):
|
||||
res_dict = self._test_get_server_with_lock('owner')
|
||||
self.assertTrue(res_dict['server']['locked'])
|
||||
|
||||
def test_get_server_not_locked(self):
|
||||
res_dict = self._test_get_server_with_lock(None)
|
||||
self.assertFalse(res_dict['server']['locked'])
|
||||
|
||||
@mock.patch.object(compute_api.API, 'get_all')
|
||||
def _test_list_server_detail_with_lock(self,
|
||||
s1_locked,
|
||||
s2_locked,
|
||||
get_all_mock):
|
||||
get_all_mock.return_value = fake_instance_get_all_with_locked(
|
||||
context, [s1_locked, s2_locked])
|
||||
req = self.req('/servers/detail')
|
||||
servers_list = self.controller.detail(req)
|
||||
# Check that each returned server has the same 'locked' value
|
||||
# and 'id' as they were created.
|
||||
for locked in [s1_locked, s2_locked]:
|
||||
server = next(server for server in servers_list['servers']
|
||||
if (server['id'] == fakes.get_fake_uuid(locked)))
|
||||
expected = False if locked == 'not_locked' else True
|
||||
self.assertEqual(expected, server['locked'])
|
||||
|
||||
def test_list_server_detail_with_locked_s1_admin_s2_owner(self):
|
||||
self._test_list_server_detail_with_lock('admin', 'owner')
|
||||
|
||||
def test_list_server_detail_with_locked_s1_owner_s2_admin(self):
|
||||
self._test_list_server_detail_with_lock('owner', 'admin')
|
||||
|
||||
def test_list_server_detail_with_locked_s1_admin_s2_admin(self):
|
||||
self._test_list_server_detail_with_lock('admin', 'admin')
|
||||
|
||||
def test_list_server_detail_with_locked_s1_admin_s2_not_locked(self):
|
||||
self._test_list_server_detail_with_lock('admin', 'not_locked')
|
||||
|
||||
def test_list_server_detail_with_locked_s1_s2_not_locked(self):
|
||||
self._test_list_server_detail_with_lock('not_locked',
|
||||
'not_locked')
|
||||
|
||||
|
||||
class ServersControllerDeleteTest(ControllerTest):
|
||||
|
||||
def setUp(self):
|
||||
|
@ -65,7 +65,7 @@ EXP_VERSIONS = {
|
||||
"v2.1": {
|
||||
"id": "v2.1",
|
||||
"status": "CURRENT",
|
||||
"version": "2.8",
|
||||
"version": "2.9",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z",
|
||||
"links": [
|
||||
@ -114,7 +114,7 @@ class VersionsTestV20(test.NoDBTestCase):
|
||||
{
|
||||
"id": "v2.1",
|
||||
"status": "CURRENT",
|
||||
"version": "2.8",
|
||||
"version": "2.9",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z",
|
||||
"links": [
|
||||
|
Loading…
Reference in New Issue
Block a user