Merge "Refactor test_servers to use instance objects"

This commit is contained in:
Jenkins 2015-07-28 19:23:43 +00:00 committed by Gerrit Code Review
commit 1a532be8f4
5 changed files with 355 additions and 387 deletions

View File

@ -284,16 +284,6 @@ class SimpleTenantUsageControllerTestV21(test.TestCase):
self.inst_obj = objects.Instance._from_db_object(
self.context, objects.Instance(), self.baseinst)
def test_get_flavor_from_sys_meta(self):
# Non-deleted instances get their type information from their
# system_metadata
with mock.patch.object(db, 'instance_get_by_uuid',
return_value=self.baseinst):
flavor = self.controller._get_flavor(self.context,
self.inst_obj, {})
self.assertEqual(objects.Flavor, type(flavor))
self.assertEqual(FAKE_INST_TYPE['id'], flavor.id)
def test_get_flavor_from_non_deleted_with_id_fails(self):
# If an instance is not deleted and missing type information from
# system_metadata, then that's a bug

View File

@ -21,6 +21,7 @@ import copy
import datetime
import uuid
import fixtures
import iso8601
import mock
from mox3 import mox
@ -82,7 +83,7 @@ def fake_gen_uuid():
def return_servers_empty(context, *args, **kwargs):
return []
return objects.InstanceList(objects=[])
def instance_update_and_get_original(context, instance_uuid, values,
@ -179,14 +180,14 @@ class ControllerTest(test.TestCase):
fakes.stub_out_rate_limiting(self.stubs)
fakes.stub_out_key_pair_funcs(self.stubs)
fake.stub_out_image_service(self.stubs)
return_server = fakes.fake_instance_get()
return_servers = fakes.fake_instance_get_all_by_filters()
return_server = fakes.fake_compute_get()
return_servers = fakes.fake_compute_get_all()
# Server sort keys extension is enabled in v3 so sort data is passed
# to the instance API and the sorted DB API is invoked
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
return_servers)
self.stubs.Set(db, 'instance_get_by_uuid',
return_server)
self.stubs.Set(compute_api.API, 'get_all',
lambda api, *a, **k: return_servers(*a, **k))
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
self.stubs.Set(db, 'instance_update_and_get_original',
instance_update_and_get_original)
@ -299,7 +300,8 @@ class ServersControllerTest(ControllerTest):
def fake_get(_self, *args, **kwargs):
self.expected_attrs = kwargs['expected_attrs']
ctxt = context.RequestContext('fake', 'fake')
return fake_instance.fake_instance_obj(ctxt)
return fake_instance.fake_instance_obj(
ctxt, expected_attrs=['metadata', 'info_cache'])
self.stubs.Set(compute_api.API, 'get', fake_get)
@ -312,20 +314,20 @@ class ServersControllerTest(ControllerTest):
"""Create two servers with the same host and different
project_ids and check that the host_id's are unique.
"""
def return_instance_with_host(self, *args, **kwargs):
def return_instance_with_host(context, *args, **kwargs):
project_id = str(uuid.uuid4())
return fakes.stub_instance(id=1, uuid=FAKE_UUID,
project_id=project_id,
host='fake_host')
return fakes.stub_instance_obj(context, id=1, uuid=FAKE_UUID,
project_id=project_id,
host='fake_host')
self.stubs.Set(db, 'instance_get_by_uuid',
return_instance_with_host)
self.stubs.Set(db, 'instance_get',
self.stubs.Set(compute_api.API, 'get',
return_instance_with_host)
req = fakes.HTTPRequestV3.blank('/servers/%s' % FAKE_UUID)
server1 = self.controller.show(req, FAKE_UUID)
server2 = self.controller.show(req, 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)
server2 = self.controller.show(req, FAKE_UUID)
self.assertNotEqual(server1['server']['hostId'],
server2['server']['hostId'])
@ -340,7 +342,7 @@ class ServersControllerTest(ControllerTest):
"updated": "2010-11-11T11:00:00Z",
"created": "2010-10-10T12:00:00Z",
"progress": progress,
"name": "server1",
"name": "server2",
"status": status,
"hostId": '',
"image": {
@ -353,7 +355,7 @@ class ServersControllerTest(ControllerTest):
],
},
"flavor": {
"id": "1",
"id": "2",
"links": [
{
"rel": "bookmark",
@ -372,7 +374,7 @@ class ServersControllerTest(ControllerTest):
]
},
"metadata": {
"seq": "1",
"seq": "2",
},
"links": [
{
@ -390,7 +392,7 @@ class ServersControllerTest(ControllerTest):
def test_get_server_by_id(self):
self.flags(use_ipv6=True)
image_bookmark = "http://localhost/images/10"
flavor_bookmark = "http://localhost/flavors/1"
flavor_bookmark = "http://localhost/flavors/2"
uuid = FAKE_UUID
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
@ -401,16 +403,19 @@ class ServersControllerTest(ControllerTest):
flavor_bookmark,
status="BUILD",
progress=0)
expected_server['server']['name'] = 'server1'
expected_server['server']['metadata']['seq'] = '1'
self.assertThat(res_dict, matchers.DictMatches(expected_server))
def test_get_server_with_active_status_by_id(self):
image_bookmark = "http://localhost/images/10"
flavor_bookmark = "http://localhost/flavors/1"
flavor_bookmark = "http://localhost/flavors/2"
new_return_server = fakes.fake_instance_get(
vm_state=vm_states.ACTIVE, progress=100)
self.stubs.Set(db, 'instance_get_by_uuid', new_return_server)
new_return_server = fakes.fake_compute_get(
id=2, vm_state=vm_states.ACTIVE, progress=100)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: new_return_server(*a, **k))
uuid = FAKE_UUID
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
@ -424,12 +429,13 @@ class ServersControllerTest(ControllerTest):
image_ref = "10"
image_bookmark = "http://localhost/images/10"
flavor_id = "1"
flavor_bookmark = "http://localhost/flavors/1"
flavor_bookmark = "http://localhost/flavors/2"
new_return_server = fakes.fake_instance_get(
vm_state=vm_states.ACTIVE, image_ref=image_ref,
flavor_id=flavor_id, progress=100)
self.stubs.Set(db, 'instance_get_by_uuid', new_return_server)
new_return_server = fakes.fake_compute_get(
id=2, vm_state=vm_states.ACTIVE, image_ref=image_ref,
flavor_id=flavor_id, progress=100)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: new_return_server(*a, **k))
uuid = FAKE_UUID
req = fakes.HTTPRequestV3.blank('/servers/%s' % uuid)
@ -469,8 +475,9 @@ class ServersControllerTest(ControllerTest):
'subnets': [{'cidr': '192.168.0.0/24',
'ips': [_ip(ip) for ip in priv0]}]}}]
return_server = fakes.fake_instance_get(nw_cache=nw_cache)
self.stubs.Set(db, 'instance_get_by_uuid', return_server)
return_server = fakes.fake_compute_get(nw_cache=nw_cache)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
req = fakes.HTTPRequestV3.blank('/servers/%s/ips' % FAKE_UUID)
res_dict = self.ips_controller.index(req, FAKE_UUID)
@ -506,7 +513,7 @@ class ServersControllerTest(ControllerTest):
def fake_instance_get(*args, **kwargs):
raise exception.InstanceNotFound(instance_id='fake')
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get)
self.stubs.Set(compute_api.API, 'get', fake_instance_get)
server_id = str(uuid.uuid4())
req = fakes.HTTPRequestV3.blank('/servers/%s/ips' % server_id)
@ -514,7 +521,7 @@ class ServersControllerTest(ControllerTest):
self.ips_controller.index, req, server_id)
def test_get_server_list_empty(self):
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
self.stubs.Set(compute_api.API, 'get_all',
return_servers_empty)
req = fakes.HTTPRequestV3.blank('/servers')
@ -598,7 +605,7 @@ class ServersControllerTest(ControllerTest):
self.controller.index, req)
def test_get_server_details_empty(self):
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
self.stubs.Set(compute_api.API, 'get_all',
return_servers_empty)
req = fakes.HTTPRequestV3.blank('/servers/detail')
@ -716,63 +723,36 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
self.assertEqual(servers[0]['id'], server_uuid)
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'newfake')
self.assertFalse(filters.get('tenant_id'))
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers'
'?all_tenants=1&tenant_id=newfake',
use_admin_context=True)
servers = self.controller.index(req)['servers']
self.assertEqual(len(servers), 1)
def test_tenant_id_filter_no_admin_context(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotEqual(filters, None)
self.assertEqual(filters['project_id'], 'fake')
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
def fake_get_all(context, search_opts=None, **kwargs):
self.assertNotEqual(search_opts, None)
self.assertEqual(search_opts['project_id'], 'fake')
return [fakes.stub_instance_obj(100)]
req = fakes.HTTPRequestV3.blank('/servers?tenant_id=newfake')
servers = self.controller.index(req)['servers']
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']
self.assertEqual(len(servers), 1)
def test_all_tenants_param_normal(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
def fake_get_all(context, search_opts=None, **kwargs):
self.assertNotIn('project_id', search_opts)
return [fakes.stub_instance_obj(100)]
req = fakes.HTTPRequestV3.blank('/servers?all_tenants',
use_admin_context=True)
servers = self.controller.index(req)['servers']
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']
self.assertEqual(len(servers), 1)
def test_all_tenants_param_one(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('project_id', search_opts)
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=1',
use_admin_context=True)
@ -780,14 +760,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_zero(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=0',
use_admin_context=True)
@ -795,14 +772,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_false(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=false',
use_admin_context=True)
@ -810,14 +784,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_invalid(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=xxx',
use_admin_context=True)
@ -825,15 +796,12 @@ class ServersControllerTest(ControllerTest):
self.controller.index, req)
def test_admin_restricted_tenant(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'fake')
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertEqual(search_opts['project_id'], 'fake')
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers',
use_admin_context=True)
@ -841,16 +809,13 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_pass_policy(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, use_slave=False,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertIsNotNone(filters)
self.assertNotIn('project_id', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertNotIn('project_id', search_opts)
self.assertTrue(context.is_admin)
return [fakes.stub_instance(100)]
return [fakes.stub_instance_obj(100)]
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
rules = {
"os_compute_api:servers:index":
@ -865,10 +830,9 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_fail_policy(self):
def fake_get_all(context, filters=None, limit=None, marker=None,
columns_to_join=None, sort_keys=None, sort_dirs=None):
self.assertIsNotNone(filters)
return [fakes.stub_instance(100)]
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
return [fakes.stub_instance_obj(100)]
rules = {
"os_compute_api:servers:index:get_all_tenants":
@ -878,8 +842,7 @@ class ServersControllerTest(ControllerTest):
}
policy.set_rules(rules)
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequestV3.blank('/servers?all_tenants=1')
self.assertRaises(exception.PolicyNotAuthorized,
@ -895,9 +858,8 @@ class ServersControllerTest(ControllerTest):
self.assertIn('flavor', search_opts)
# flavor is an integer ID
self.assertEqual(search_opts['flavor'], '12345')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -909,13 +871,17 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_with_bad_flavor(self):
req = fakes.HTTPRequestV3.blank('/servers?flavor=abcde')
servers = self.controller.index(req)['servers']
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']
self.assertEqual(len(servers), 0)
def test_get_server_details_with_bad_flavor(self):
req = fakes.HTTPRequestV3.blank('/servers?flavor=abcde')
servers = self.controller.detail(req)['servers']
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']
self.assertThat(servers, testtools.matchers.HasLength(0))
@ -928,9 +894,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('vm_state', search_opts)
self.assertEqual(search_opts['vm_state'], [vm_states.ACTIVE])
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -953,10 +918,9 @@ class ServersControllerTest(ControllerTest):
task_states.REBOOT_STARTED,
task_states.REBOOTING],
search_opts['task_state'])
db_list = [fakes.stub_instance(100, uuid=server_uuid,
task_state=task_state)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid,
task_state=task_state)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -977,9 +941,8 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(search_opts['vm_state'],
[vm_states.ACTIVE, vm_states.STOPPED])
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1011,9 +974,8 @@ class ServersControllerTest(ControllerTest):
self.assertIn('vm_state', search_opts)
self.assertEqual(search_opts['vm_state'], ['deleted'])
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1028,10 +990,10 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_deleted_filter_str_to_bool(self, mock_get_all):
server_uuid = str(uuid.uuid4())
db_list = [fakes.stub_instance(100, uuid=server_uuid,
vm_state='deleted')]
mock_get_all.return_value = instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
db_list = objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid,
vm_state='deleted')])
mock_get_all.return_value = db_list
req = fakes.HTTPRequestV3.blank('/servers?deleted=true',
use_admin_context=True)
@ -1053,9 +1015,9 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_deleted_filter_invalid_str(self, mock_get_all):
server_uuid = str(uuid.uuid4())
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
mock_get_all.return_value = instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
db_list = objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
mock_get_all.return_value = db_list
req = fakes.HTTPRequest.blank('/fake/servers?deleted=abc',
use_admin_context=True)
@ -1082,9 +1044,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('name', search_opts)
self.assertEqual(search_opts['name'], 'whee.*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1115,9 +1076,8 @@ class ServersControllerTest(ControllerTest):
tzinfo=iso8601.iso8601.UTC)
self.assertEqual(search_opts['changes-since'], changes_since)
self.assertNotIn('deleted', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1151,9 +1111,8 @@ class ServersControllerTest(ControllerTest):
self.assertIn('vm_state', search_opts)
# Allowed only by admins with admin API on
self.assertNotIn('unknown_option', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1182,9 +1141,8 @@ class ServersControllerTest(ControllerTest):
# Allowed only by admins with admin API on
self.assertIn('ip', search_opts)
self.assertIn('unknown_option', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1207,9 +1165,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('ip', search_opts)
self.assertEqual(search_opts['ip'], '10\..*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1231,9 +1188,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('ip6', search_opts)
self.assertEqual(search_opts['ip6'], 'ffff.*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1256,9 +1212,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('ip6', search_opts)
self.assertEqual(search_opts['ip6'], 'ffff.*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1271,11 +1226,11 @@ class ServersControllerTest(ControllerTest):
def test_get_all_server_details(self):
expected_flavor = {
"id": "1",
"id": "2",
"links": [
{
"rel": "bookmark",
"href": 'http://localhost/flavors/1',
"href": 'http://localhost/flavors/2',
},
],
}
@ -1307,13 +1262,17 @@ class ServersControllerTest(ControllerTest):
there are 5 instances - 2 on one host and 3 on another.
"""
def return_servers_with_host(context, *args, **kwargs):
return [fakes.stub_instance(i + 1, 'fake', 'fake', host=i % 2,
uuid=fakes.get_fake_uuid(i))
for i in range(5)]
def return_servers_with_host(*args, **kwargs):
return objects.InstanceList(
objects=[fakes.stub_instance_obj(None,
id=i + 1,
user_id='fake',
project_id='fake',
host=i % 2,
uuid=fakes.get_fake_uuid(i))
for i in range(5)])
self.stubs.Set(db, 'instance_get_all_by_filters_sort',
return_servers_with_host)
self.stubs.Set(compute_api.API, 'get_all', return_servers_with_host)
req = fakes.HTTPRequestV3.blank('/servers/detail')
res_dict = self.controller.detail(req)
@ -1350,12 +1309,12 @@ class ServersControllerDeleteTest(ControllerTest):
super(ServersControllerDeleteTest, self).setUp()
self.server_delete_called = False
def instance_destroy_mock(*args, **kwargs):
def fake_delete(api, context, instance):
if instance.uuid == 'non-existent-uuid':
raise exception.InstanceNotFound(instance_id=instance.uuid)
self.server_delete_called = True
deleted_at = timeutils.utcnow()
return fake_instance.fake_db_instance(deleted_at=deleted_at)
self.stubs.Set(db, 'instance_destroy', instance_destroy_mock)
self.stubs.Set(compute_api.API, 'delete', fake_delete)
def _create_delete_request(self, uuid):
fakes.stub_out_instance_quota(self.stubs, 0, 10)
@ -1365,8 +1324,10 @@ class ServersControllerDeleteTest(ControllerTest):
def _delete_server_instance(self, uuid=FAKE_UUID):
req = self._create_delete_request(uuid)
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE))
fake_get = fakes.fake_compute_get(uuid=uuid,
vm_state=vm_states.ACTIVE)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
self.controller.delete(req, uuid)
def test_delete_server_instance(self):
@ -1396,14 +1357,12 @@ class ServersControllerDeleteTest(ControllerTest):
def test_delete_server_instance_while_resize(self):
req = self._create_delete_request(FAKE_UUID)
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE,
task_state=task_states.RESIZE_PREP))
fake_get = fakes.fake_compute_get(vm_state=vm_states.ACTIVE,
task_state=task_states.RESIZE_PREP)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
self.controller.delete(req, FAKE_UUID)
# Delete shoud be allowed in any case, even during resizing,
# because it may get stuck.
self.assertTrue(self.server_delete_called)
def test_delete_server_instance_if_not_launched(self):
self.flags(reclaim_instance_interval=3600)
@ -1412,8 +1371,9 @@ class ServersControllerDeleteTest(ControllerTest):
self.server_delete_called = False
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(launched_at=None))
fake_get = fakes.fake_compute_get(launched_at=None)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
def instance_destroy_mock(*args, **kwargs):
self.server_delete_called = True
@ -1434,8 +1394,21 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
def setUp(self):
super(ServersControllerRebuildInstanceTest, self).setUp()
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE))
def fake_get(ctrl, ctxt, uuid):
if uuid == 'test_inst':
raise webob.exc.HTTPNotFound(explanation='fakeout')
return fakes.stub_instance_obj(None,
vm_state=vm_states.ACTIVE)
self.useFixture(
fixtures.MonkeyPatch('nova.api.openstack.compute.plugins.v3.'
'servers.ServersController._get_instance',
fake_get))
fake_get = fakes.fake_compute_get(vm_state=vm_states.ACTIVE)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
self.body = {
'rebuild': {
'name': 'new_name',
@ -1707,8 +1680,9 @@ class ServersControllerUpdateTest(ControllerTest):
def _get_request(self, body=None, options=None):
if options:
self.stubs.Set(db, 'instance_get',
fakes.fake_instance_get(**options))
fake_get = fakes.fake_compute_get(**options)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
req = fakes.HTTPRequestV3.blank('/servers/%s' % FAKE_UUID)
req.method = 'PUT'
req.content_type = 'application/json'

View File

@ -81,7 +81,7 @@ def fake_gen_uuid():
def return_servers_empty(context, *args, **kwargs):
return []
return objects.InstanceList(objects=[])
def return_security_group(context, instance_id, security_group_id):
@ -168,15 +168,15 @@ class ControllerTest(test.TestCase):
fakes.stub_out_rate_limiting(self.stubs)
fakes.stub_out_key_pair_funcs(self.stubs)
fake.stub_out_image_service(self.stubs)
return_server = fakes.fake_instance_get()
return_servers = fakes.fake_instance_get_all_by_filters()
return_server = fakes.fake_compute_get()
return_servers = fakes.fake_compute_get_all()
# Server sort keys extension is not enabled in v2 test so no sort
# data is passed to the instance API and the non-sorted DB API is
# invoked
self.stubs.Set(db, 'instance_get_all_by_filters',
return_servers)
self.stubs.Set(db, 'instance_get_by_uuid',
return_server)
self.stubs.Set(compute_api.API, 'get_all',
lambda api, *a, **k: return_servers(*a, **k))
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
self.stubs.Set(db, 'instance_add_security_group',
return_security_group)
self.stubs.Set(db, 'instance_update_and_get_original',
@ -277,20 +277,17 @@ class ServersControllerTest(ControllerTest):
"""Create two servers with the same host and different
project_ids and check that the hostId's are unique.
"""
def return_instance_with_host(self, *args, **kwargs):
def return_instance_with_host(context, *args, **kwargs):
project_id = str(uuid.uuid4())
return fakes.stub_instance(id=1, uuid=FAKE_UUID,
project_id=project_id,
host='fake_host')
self.stubs.Set(db, 'instance_get_by_uuid',
return_instance_with_host)
self.stubs.Set(db, 'instance_get',
return_instance_with_host)
return fakes.stub_instance_obj(context, id=1, uuid=FAKE_UUID,
project_id=project_id,
host='fake_host')
req = fakes.HTTPRequest.blank('/fake/servers/%s' % FAKE_UUID)
server1 = self.controller.show(req, FAKE_UUID)
server2 = self.controller.show(req, 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)
server2 = self.controller.show(req, FAKE_UUID)
self.assertNotEqual(server1['server']['hostId'],
server2['server']['hostId'])
@ -305,7 +302,7 @@ class ServersControllerTest(ControllerTest):
"updated": "2010-11-11T11:00:00Z",
"created": "2010-10-10T12:00:00Z",
"progress": progress,
"name": "server1",
"name": "server2",
"status": status,
"accessIPv4": "",
"accessIPv6": "",
@ -320,7 +317,7 @@ class ServersControllerTest(ControllerTest):
],
},
"flavor": {
"id": "1",
"id": "2",
"links": [
{
"rel": "bookmark",
@ -335,7 +332,7 @@ class ServersControllerTest(ControllerTest):
]
},
"metadata": {
"seq": "1",
"seq": "2",
},
"links": [
{
@ -353,7 +350,7 @@ class ServersControllerTest(ControllerTest):
def test_get_server_by_id(self):
self.flags(use_ipv6=True)
image_bookmark = "http://localhost/fake/images/10"
flavor_bookmark = "http://localhost/fake/flavors/1"
flavor_bookmark = "http://localhost/fake/flavors/2"
uuid = FAKE_UUID
req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % uuid)
@ -364,15 +361,18 @@ class ServersControllerTest(ControllerTest):
flavor_bookmark,
status="BUILD",
progress=0)
expected_server['server']['name'] = 'server1'
expected_server['server']['metadata']['seq'] = '1'
self.assertThat(res_dict, matchers.DictMatches(expected_server))
def test_get_server_with_active_status_by_id(self):
image_bookmark = "http://localhost/fake/images/10"
flavor_bookmark = "http://localhost/fake/flavors/1"
flavor_bookmark = "http://localhost/fake/flavors/2"
new_return_server = fakes.fake_instance_get(
vm_state=vm_states.ACTIVE, progress=100)
self.stubs.Set(db, 'instance_get_by_uuid', new_return_server)
new_return_server = fakes.fake_compute_get(
id=2, vm_state=vm_states.ACTIVE, progress=100)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: new_return_server(*a, **k))
uuid = FAKE_UUID
req = fakes.HTTPRequest.blank('/fake/servers/%s' % uuid)
@ -386,12 +386,13 @@ class ServersControllerTest(ControllerTest):
image_ref = "10"
image_bookmark = "http://localhost/fake/images/10"
flavor_id = "1"
flavor_bookmark = "http://localhost/fake/flavors/1"
flavor_bookmark = "http://localhost/fake/flavors/2"
new_return_server = fakes.fake_instance_get(
vm_state=vm_states.ACTIVE, image_ref=image_ref,
new_return_server = fakes.fake_compute_get(
id=2, vm_state=vm_states.ACTIVE, image_ref=image_ref,
flavor_id=flavor_id, progress=100)
self.stubs.Set(db, 'instance_get_by_uuid', new_return_server)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: new_return_server(*a, **k))
uuid = FAKE_UUID
req = fakes.HTTPRequest.blank('/fake/servers/%s' % uuid)
@ -430,8 +431,9 @@ class ServersControllerTest(ControllerTest):
'subnets': [{'cidr': '192.168.0.0/24',
'ips': [_ip(ip) for ip in priv0]}]}}]
return_server = fakes.fake_instance_get(nw_cache=nw_cache)
self.stubs.Set(db, 'instance_get_by_uuid', return_server)
return_server = fakes.fake_compute_get(nw_cache=nw_cache)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
req = fakes.HTTPRequest.blank('/fake/servers/%s/ips' % FAKE_UUID)
res_dict = self.ips_controller.index(req, FAKE_UUID)
@ -467,7 +469,7 @@ class ServersControllerTest(ControllerTest):
def fake_instance_get(*args, **kwargs):
raise exception.InstanceNotFound(instance_id='fake')
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get)
self.stubs.Set(compute_api.API, 'get', fake_instance_get)
server_id = str(uuid.uuid4())
req = fakes.HTTPRequest.blank('/fake/servers/%s/ips' % server_id)
@ -475,7 +477,7 @@ class ServersControllerTest(ControllerTest):
self.ips_controller.index, req, server_id)
def test_get_server_list_empty(self):
self.stubs.Set(db, 'instance_get_all_by_filters',
self.stubs.Set(compute_api.API, 'get_all',
return_servers_empty)
req = fakes.HTTPRequest.blank('/fake/servers')
@ -559,7 +561,7 @@ class ServersControllerTest(ControllerTest):
self.controller.index, req)
def test_get_server_details_empty(self):
self.stubs.Set(db, 'instance_get_all_by_filters',
self.stubs.Set(compute_api.API, 'get_all',
return_servers_empty)
req = fakes.HTTPRequest.blank('/fake/servers/detail')
@ -707,48 +709,23 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
self.assertEqual(servers[0]['id'], server_uuid)
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'newfake')
self.assertFalse(filters.get('tenant_id'))
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers'
'?all_tenants=1&tenant_id=newfake',
use_admin_context=True)
servers = self.controller.index(req)['servers']
self.assertEqual(len(servers), 1)
def test_all_tenants_param_normal(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
def fake_get_all(context, search_opts=None, **kwargs):
self.assertNotIn('project_id', search_opts)
return [fakes.stub_instance_obj(100)]
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants',
use_admin_context=True)
servers = self.controller.index(req)['servers']
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']
self.assertEqual(len(servers), 1)
def test_all_tenants_param_one(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants=1',
use_admin_context=True)
@ -756,14 +733,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_zero(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants=0',
use_admin_context=True)
@ -771,14 +745,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_false(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants=false',
use_admin_context=True)
@ -786,14 +757,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_param_invalid(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
self.assertNotIn('all_tenants', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertNotIn('all_tenants', search_opts)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants=xxx',
use_admin_context=True)
@ -801,15 +769,12 @@ class ServersControllerTest(ControllerTest):
self.controller.index, req)
def test_admin_restricted_tenant(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'fake')
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertEqual(search_opts['project_id'], 'fake')
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers',
use_admin_context=True)
@ -817,16 +782,13 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_pass_policy(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertNotIn('project_id', filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertNotIn('project_id', search_opts)
self.assertTrue(context.is_admin)
return [fakes.stub_instance(100)]
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
rules = {
"compute:get_all_tenants":
@ -842,10 +804,8 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(len(servers), 1)
def test_all_tenants_fail_policy(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
self.assertIsNotNone(filters)
def fake_get_all(api, context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
return [fakes.stub_instance(100)]
rules = {
@ -856,8 +816,7 @@ class ServersControllerTest(ControllerTest):
}
policy.set_rules(rules)
self.stubs.Set(db, 'instance_get_all_by_filters',
fake_get_all)
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
req = fakes.HTTPRequest.blank('/fake/servers?all_tenants=1')
self.assertRaises(exception.PolicyNotAuthorized,
@ -887,13 +846,17 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_with_bad_flavor(self):
req = fakes.HTTPRequest.blank('/fake/servers?flavor=abcde')
servers = self.controller.index(req)['servers']
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']
self.assertEqual(len(servers), 0)
def test_get_server_details_with_bad_flavor(self):
req = fakes.HTTPRequest.blank('/fake/servers/detail?flavor=abcde')
servers = self.controller.detail(req)['servers']
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']
self.assertThat(servers, testtools.matchers.HasLength(0))
@ -1013,10 +976,9 @@ class ServersControllerTest(ControllerTest):
task_states.REBOOT_STARTED,
task_states.REBOOTING],
search_opts['task_state'])
db_list = [fakes.stub_instance(100, uuid=server_uuid,
task_state=task_state)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid,
task_state=task_state)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1037,9 +999,8 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(search_opts['vm_state'],
[vm_states.ACTIVE, vm_states.STOPPED])
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1071,9 +1032,8 @@ class ServersControllerTest(ControllerTest):
self.assertIn('vm_state', search_opts)
self.assertEqual(search_opts['vm_state'], ['deleted'])
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1088,10 +1048,10 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_deleted_filter_str_to_bool(self, mock_get_all):
server_uuid = str(uuid.uuid4())
db_list = [fakes.stub_instance(100, uuid=server_uuid,
vm_state='deleted')]
mock_get_all.return_value = instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
db_list = objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid,
vm_state='deleted')])
mock_get_all.return_value = db_list
req = fakes.HTTPRequest.blank('/fake/servers?deleted=true',
use_admin_context=True)
@ -1112,9 +1072,9 @@ class ServersControllerTest(ControllerTest):
def test_get_servers_deleted_filter_invalid_str(self, mock_get_all):
server_uuid = str(uuid.uuid4())
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
mock_get_all.return_value = instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
db_list = objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
mock_get_all.return_value = db_list
req = fakes.HTTPRequest.blank('/fake/servers?deleted=abc',
use_admin_context=True)
@ -1140,9 +1100,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('name', search_opts)
self.assertEqual(search_opts['name'], 'whee.*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1164,9 +1123,8 @@ class ServersControllerTest(ControllerTest):
tzinfo=iso8601.iso8601.UTC)
self.assertEqual(search_opts['changes-since'], changes_since)
self.assertNotIn('deleted', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1200,9 +1158,8 @@ class ServersControllerTest(ControllerTest):
self.assertIn('vm_state', search_opts)
# Allowed only by admins with admin API on
self.assertNotIn('unknown_option', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1231,9 +1188,8 @@ class ServersControllerTest(ControllerTest):
# Allowed only by admins with admin API on
self.assertIn('ip', search_opts)
self.assertIn('unknown_option', search_opts)
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1255,9 +1211,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('ip', search_opts)
self.assertEqual(search_opts['ip'], '10\..*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1279,9 +1234,8 @@ class ServersControllerTest(ControllerTest):
self.assertIsNotNone(search_opts)
self.assertIn('ip6', search_opts)
self.assertEqual(search_opts['ip6'], 'ffff.*')
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
return instance_obj._make_instance_list(
context, objects.InstanceList(), db_list, FIELDS)
return objects.InstanceList(
objects=[fakes.stub_instance_obj(100, uuid=server_uuid)])
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
@ -1294,11 +1248,11 @@ class ServersControllerTest(ControllerTest):
def test_get_all_server_details(self):
expected_flavor = {
"id": "1",
"id": "2",
"links": [
{
"rel": "bookmark",
"href": 'http://localhost/fake/flavors/1',
"href": 'http://localhost/fake/flavors/2',
},
],
}
@ -1330,12 +1284,16 @@ class ServersControllerTest(ControllerTest):
are 5 instances - 2 on one host and 3 on another.
"""
def return_servers_with_host(context, *args, **kwargs):
return [fakes.stub_instance(i + 1, 'fake', 'fake', host=i % 2,
uuid=fakes.get_fake_uuid(i))
for i in range(5)]
def return_servers_with_host(*args, **kwargs):
return objects.InstanceList(
objects=[fakes.stub_instance_obj(None,
id=i + 1, user_id='fake',
project_id='fake',
host=i % 2,
uuid=fakes.get_fake_uuid(i))
for i in range(5)])
self.stubs.Set(db, 'instance_get_all_by_filters',
self.stubs.Set(self.controller.compute_api, 'get_all',
return_servers_with_host)
req = fakes.HTTPRequest.blank('/fake/servers/detail')
@ -1356,8 +1314,8 @@ class ServersControllerUpdateTest(ControllerTest):
def _get_request(self, body=None, content_type='json', options=None):
if options:
self.stubs.Set(db, 'instance_get',
fakes.fake_instance_get(**options))
self.stubs.Set(compute_api.API, 'get',
fakes.fake_compute_get(**options))
req = fakes.HTTPRequest.blank('/fake/servers/%s' % FAKE_UUID)
req.method = 'PUT'
req.content_type = 'application/%s' % content_type
@ -1489,12 +1447,12 @@ class ServersControllerDeleteTest(ControllerTest):
super(ServersControllerDeleteTest, self).setUp()
self.server_delete_called = False
def instance_destroy_mock(*args, **kwargs):
def fake_delete(api, context, instance):
if instance.uuid == 'non-existent-uuid':
raise exception.InstanceNotFound(instance_id=instance.uuid)
self.server_delete_called = True
deleted_at = timeutils.utcnow()
return fake_instance.fake_db_instance(deleted_at=deleted_at)
self.stubs.Set(db, 'instance_destroy', instance_destroy_mock)
self.stubs.Set(compute_api.API, 'delete', fake_delete)
def _create_delete_request(self, uuid):
fakes.stub_out_instance_quota(self.stubs, 0, 10)
@ -1504,8 +1462,10 @@ class ServersControllerDeleteTest(ControllerTest):
def _delete_server_instance(self, uuid=FAKE_UUID):
req = self._create_delete_request(uuid)
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE))
fake_get = fakes.fake_compute_get(uuid=uuid,
vm_state=vm_states.ACTIVE)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
self.controller.delete(req, uuid)
def test_delete_server_instance(self):
@ -1536,10 +1496,12 @@ class ServersControllerDeleteTest(ControllerTest):
def test_delete_server_instance_while_deleting_host_up(self):
req = self._create_delete_request(FAKE_UUID)
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE,
task_state=task_states.DELETING,
host='fake_host'))
return_server = fakes.fake_compute_get(
vm_state=vm_states.ACTIVE,
task_state=task_states.DELETING,
host='fake_host')
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
self.stubs.Set(objects.Instance, 'save',
lambda *args, **kwargs: None)
@ -1550,9 +1512,6 @@ class ServersControllerDeleteTest(ControllerTest):
fake_get_by_compute_host)
self.controller.delete(req, FAKE_UUID)
# Delete request can be ignored, because it's been accepted and
# forwarded to the compute service already.
self.assertFalse(self.server_delete_called)
def test_delete_server_instance_while_deleting_host_down(self):
fake_network.stub_out_network_cleanup(self.stubs)
@ -1593,8 +1552,9 @@ class ServersControllerDeleteTest(ControllerTest):
self.server_delete_called = False
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(launched_at=None))
fake_get = fakes.fake_compute_get(launched_at=None)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: fake_get(*a, **k))
def instance_destroy_mock(*args, **kwargs):
self.server_delete_called = True
@ -1614,8 +1574,9 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
def setUp(self):
super(ServersControllerRebuildInstanceTest, self).setUp()
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_states.ACTIVE))
return_server = fakes.fake_compute_get(vm_state=vm_states.ACTIVE)
self.stubs.Set(compute_api.API, 'get',
lambda api, *a, **k: return_server(*a, **k))
self.body = {
'rebuild': {
'name': 'new_name',
@ -1756,12 +1717,12 @@ class ServerStatusTest(test.TestCase):
self.controller = servers.Controller(self.ext_mgr)
def _get_with_state(self, vm_state, task_state=None):
self.stubs.Set(db, 'instance_get_by_uuid',
fakes.fake_instance_get(vm_state=vm_state,
task_state=task_state))
request = fakes.HTTPRequest.blank('/fake/servers/%s' % FAKE_UUID)
return self.controller.show(request, FAKE_UUID)
with mock.patch.object(self.controller.compute_api, 'get') as get:
get.side_effect = fakes.fake_compute_get(
vm_state=vm_state,
task_state=task_state)
return self.controller.show(request, FAKE_UUID)
def _req_with_policy_fail(self, policy_rule_name):
rule = {'compute:%s' % policy_rule_name:

View File

@ -43,6 +43,8 @@ from nova.db.sqlalchemy import models
from nova import exception as exc
import nova.netconf
from nova.network import api as network_api
from nova import objects
from nova.objects import base
from nova import quota
from nova.tests.unit import fake_block_device
from nova.tests.unit import fake_network
@ -384,6 +386,13 @@ def fake_instance_get(**kwargs):
return _return_server
def fake_compute_get(**kwargs):
def _return_server_obj(context, uuid, want_objects=False,
expected_attrs=None):
return stub_instance_obj(context, **kwargs)
return _return_server_obj
def fake_actions_to_locked_server(self, context, instance, *args, **kwargs):
raise exc.InstanceIsLocked(instance_uuid=instance['uuid'])
@ -427,7 +436,23 @@ def fake_instance_get_all_by_filters(num_servers=5, **kwargs):
return _return_servers
def stub_instance(id, user_id=None, project_id=None, host=None,
def fake_compute_get_all(num_servers=5, **kwargs):
def _return_servers_objs(context, search_opts=None, limit=None,
marker=None, want_objects=False,
expected_attrs=None, sort_keys=None,
sort_dirs=None):
db_insts = fake_instance_get_all_by_filters()(None,
limit=limit,
marker=marker)
expected = ['metadata', 'system_metadata', 'flavor',
'info_cache', 'security_groups']
return base.obj_make_list(context, objects.InstanceList(),
objects.Instance, db_insts,
expected_attrs=expected)
return _return_servers_objs
def stub_instance(id=1, user_id=None, project_id=None, host=None,
node=None, vm_state=None, task_state=None,
reservation_id="", uuid=FAKE_UUID, image_ref="10",
flavor_id="1", name=None, key_name='',
@ -479,14 +504,13 @@ def stub_instance(id, user_id=None, project_id=None, host=None,
info_cache = create_info_cache(nw_cache)
if instance_type is not None:
flavorinfo = jsonutils.dumps({
'cur': instance_type.obj_to_primitive(),
'old': None,
'new': None,
})
else:
flavorinfo = None
if instance_type is None:
instance_type = flavors.get_default_flavor()
flavorinfo = jsonutils.dumps({
'cur': instance_type.obj_to_primitive(),
'old': None,
'new': None,
})
instance = {
"id": int(id),
@ -559,6 +583,17 @@ def stub_instance(id, user_id=None, project_id=None, host=None,
return instance
def stub_instance_obj(ctxt, *args, **kwargs):
db_inst = stub_instance(*args, **kwargs)
expected = ['metadata', 'system_metadata', 'flavor',
'info_cache', 'security_groups']
inst = objects.Instance._from_db_object(ctxt, objects.Instance(),
db_inst,
expected_attrs=expected)
inst.fault = None
return inst
def stub_volume(id, **kwargs):
volume = {
'id': id,

View File

@ -2782,6 +2782,14 @@ class _ComputeAPIUnitTestMixIn(object):
api = compute_api.API(skip_policy_check=True)
api.create(self.context, None, None)
@mock.patch.object(compute_api.API, '_get_instances_by_filters')
def test_tenant_to_project_conversion(self, mock_get):
mock_get.return_value = []
api = compute_api.API()
api.get_all(self.context, search_opts={'tenant_id': 'foo'})
filters = mock_get.call_args_list[0][0][1]
self.assertEqual({'project_id': 'foo'}, filters)
class ComputeAPIUnitTestCase(_ComputeAPIUnitTestMixIn, test.NoDBTestCase):
def setUp(self):