Improve unit tests for instance multiple create

The unit tests around instance multiple create were faking out the uuid
of the created instances to be aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.
This worked because the instances are not actually created in the
database so unique constraints aren't violated.

However this led to mocking out the create for the RequestSpec object
which should not have been necessary because there is a database
available to these tests. That would have been fine except that there is
work in progress which relies on the RequestSpec having been written to
the database and getting that to pass tests was starting to rely on
mocks upon mocks upon mocks. Rather than go down that route this unwinds
the test strategy that requires the mocks in the first place.

Change-Id: I356d603bff59d49a9a44c59e0b99f9c16998b37e
This commit is contained in:
Andrew Laski 2016-02-05 13:22:12 -05:00 committed by Dan Smith
parent 1aca8b103c
commit e85cf38b94
4 changed files with 29 additions and 38 deletions

View File

@ -76,10 +76,6 @@ INSTANCE_IDS = {FAKE_UUID: 1}
FIELDS = instance_obj.INSTANCE_DEFAULT_FIELDS
def fake_gen_uuid():
return FAKE_UUID
def return_servers_empty(context, *args, **kwargs):
return objects.InstanceList(objects=[])
@ -1892,7 +1888,7 @@ class ServersControllerCreateTest(test.TestCase):
instance = fake_instance.fake_db_instance(**{
'id': self.instance_cache_num,
'display_name': inst['display_name'] or 'test',
'uuid': FAKE_UUID,
'uuid': inst['uuid'],
'instance_type': inst_type,
'access_ip_v4': '1.2.3.4',
'access_ip_v6': 'fead::1234',
@ -1941,7 +1937,6 @@ class ServersControllerCreateTest(test.TestCase):
fakes.stub_out_rate_limiting(self.stubs)
fakes.stub_out_key_pair_funcs(self.stubs)
fake.stub_out_image_service(self)
self.stubs.Set(uuid, 'uuid4', fake_gen_uuid)
self.stub_out('nova.db.instance_add_security_group',
return_security_group)
self.stub_out('nova.db.project_get_networks', project_get_networks)
@ -1953,7 +1948,6 @@ class ServersControllerCreateTest(test.TestCase):
server_update_and_get_original)
self.stubs.Set(manager.VlanManager, 'allocate_fixed_ip',
fake_method)
self.stub_out('nova.objects.RequestSpec.create', fake_method)
self.body = {
'server': {
'min_count': 2,
@ -1997,7 +1991,8 @@ class ServersControllerCreateTest(test.TestCase):
self.req.body = jsonutils.dump_as_bytes(self.body)
server = self.controller.create(self.req, self.body).obj['server']
self._check_admin_pass_len(server)
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
return server
def test_create_instance_private_flavor(self):
@ -2079,7 +2074,8 @@ class ServersControllerCreateTest(test.TestCase):
self.ext_mgr.extensions = {'os-multiple-create': 'fake'}
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
instance_uuids = self.instance_cache_by_uuid.keys()
self.assertIn(res["server"]["id"], instance_uuids)
self._check_admin_pass_len(res["server"])
def test_create_multiple_instances_pass_disabled(self):
@ -2090,7 +2086,8 @@ class ServersControllerCreateTest(test.TestCase):
self.flags(enable_instance_password=False)
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
instance_uuids = self.instance_cache_by_uuid.keys()
self.assertIn(res["server"]["id"], instance_uuids)
self._check_admin_pass_missing(res["server"])
def test_create_multiple_instances_resv_id_return(self):
@ -2136,7 +2133,8 @@ class ServersControllerCreateTest(test.TestCase):
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
server = res['server']
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
def test_create_instance_image_ref_is_invalid(self):
image_uuid = 'this_is_not_a_valid_uuid'
@ -2304,7 +2302,8 @@ class ServersControllerCreateTest(test.TestCase):
server = res['server']
self._check_admin_pass_len(server)
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
def test_create_instance_pass_disabled(self):
self.flags(enable_instance_password=False)
@ -2313,7 +2312,8 @@ class ServersControllerCreateTest(test.TestCase):
server = res['server']
self._check_admin_pass_missing(server)
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
@mock.patch('nova.virt.hardware.numa_get_constraints')
def test_create_instance_numa_topology_wrong(self, numa_constraints_mock):
@ -2404,7 +2404,8 @@ class ServersControllerCreateTest(test.TestCase):
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], res["server"]["id"])
self._check_admin_pass_len(res["server"])
def test_create_instance_invalid_flavor_href(self):
@ -2441,7 +2442,8 @@ class ServersControllerCreateTest(test.TestCase):
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
server = res['server']
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
def test_create_instance_with_bad_config_drive(self):
self.ext_mgr.extensions = {'os-config-drive': 'fake'}
@ -2456,7 +2458,8 @@ class ServersControllerCreateTest(test.TestCase):
self.req.body = jsonutils.dump_as_bytes(self.body)
res = self.controller.create(self.req, self.body).obj
server = res['server']
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
def test_create_instance_with_config_drive_disabled(self):
config_drive = [{'config_drive': 'foo'}]
@ -2483,7 +2486,8 @@ class ServersControllerCreateTest(test.TestCase):
res = self.controller.create(self.req, self.body).obj
server = res['server']
self.assertEqual(FAKE_UUID, server['id'])
instance = self.instance_cache_by_uuid.values()[0]
self.assertEqual(instance['uuid'], server['id'])
def test_create_instance_admin_pass(self):
self.body['server']['flavorRef'] = 3,
@ -2847,11 +2851,12 @@ class ServersControllerCreateTest(test.TestCase):
self.controller.create, self.req, self.body)
def test_create_location(self):
selfhref = 'http://localhost/v2/fake/servers/%s' % FAKE_UUID
image_href = 'http://localhost/v2/images/%s' % self.image_uuid
self.body['server']['imageRef'] = image_href
self.req.body = jsonutils.dump_as_bytes(self.body)
robj = self.controller.create(self.req, self.body)
instance = self.instance_cache_by_uuid.values()[0]
selfhref = 'http://localhost/v2/fake/servers/%s' % instance['uuid']
self.assertEqual(selfhref, robj['Location'])
def _do_test_create_instance_above_quota(self, resource, allowed, quota,

View File

@ -14,7 +14,6 @@
# under the License.
import datetime
import uuid
from oslo_config import cfg
import webob
@ -36,11 +35,6 @@ from nova.tests.unit import fake_instance
from nova.tests.unit.image import fake
CONF = cfg.CONF
FAKE_UUID = fakes.FAKE_UUID
def fake_gen_uuid():
return FAKE_UUID
def return_security_group(context, instance_id, security_group_id):
@ -76,7 +70,7 @@ class MultiCreateExtensionTestV21(test.TestCase):
instance = fake_instance.fake_db_instance(**{
'id': self.instance_cache_num,
'display_name': inst['display_name'] or 'test',
'uuid': FAKE_UUID,
'uuid': inst['uuid'],
'instance_type': inst_type,
'access_ip_v4': '1.2.3.4',
'access_ip_v6': 'fead::1234',
@ -124,7 +118,6 @@ class MultiCreateExtensionTestV21(test.TestCase):
fakes.stub_out_key_pair_funcs(self.stubs)
fake.stub_out_image_service(self)
fakes.stub_out_nw_api(self)
self.stubs.Set(uuid, 'uuid4', fake_gen_uuid)
self.stub_out('nova.db.instance_add_security_group',
return_security_group)
self.stub_out('nova.db.project_get_networks', project_get_networks)
@ -136,7 +129,6 @@ class MultiCreateExtensionTestV21(test.TestCase):
server_update)
self.stubs.Set(manager.VlanManager, 'allocate_fixed_ip',
fake_method)
self.stub_out('nova.objects.RequestSpec.create', fake_method)
self.req = fakes.HTTPRequest.blank('')
def _test_create_extra(self, params, no_image=False,
@ -355,7 +347,8 @@ class MultiCreateExtensionTestV21(test.TestCase):
res = self.controller.create(self.req, body=body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
instance_uuids = self.instance_cache_by_uuid.keys()
self.assertIn(res["server"]["id"], instance_uuids)
self._check_admin_password_len(res["server"])
def test_create_multiple_instances_pass_disabled(self):
@ -378,7 +371,8 @@ class MultiCreateExtensionTestV21(test.TestCase):
res = self.controller.create(self.req, body=body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
instance_uuids = self.instance_cache_by_uuid.keys()
self.assertIn(res["server"]["id"], instance_uuids)
self._check_admin_password_missing(res["server"])
def _check_admin_password_len(self, server_dict):
@ -543,7 +537,7 @@ class MultiCreateExtensionTestV2(MultiCreateExtensionTestV21):
instance = fake_instance.fake_db_instance(**{
'id': self.instance_cache_num,
'display_name': inst['display_name'] or 'test',
'uuid': FAKE_UUID,
'uuid': inst['uuid'],
'instance_type': inst_type,
'access_ip_v4': '1.2.3.4',
'access_ip_v6': 'fead::1234',
@ -575,7 +569,6 @@ class MultiCreateExtensionTestV2(MultiCreateExtensionTestV21):
fakes.stub_out_rate_limiting(self.stubs)
fakes.stub_out_key_pair_funcs(self.stubs)
fake.stub_out_image_service(self)
self.stubs.Set(uuid, 'uuid4', fake_gen_uuid)
self.stub_out('nova.db.instance_create', instance_create)
self.stub_out('nova.db.instance_get', instance_get)

View File

@ -2390,7 +2390,6 @@ class ServersControllerCreateTest(test.TestCase):
server_update_and_get_original)
self.stubs.Set(manager.VlanManager, 'allocate_fixed_ip',
fake_method)
self.stub_out('nova.objects.RequestSpec.create', fake_method)
self.body = {
'server': {
'name': 'server_test',

View File

@ -255,12 +255,6 @@ class BaseTestCase(test.TestCase):
fake_allocate_for_instance)
self.compute_api = compute.API()
def fake_spec_create(*args, **kwargs):
pass
# Tests in this module do not depend on this running.
self.stub_out('nova.objects.RequestSpec.create', fake_spec_create)
# Just to make long lines short
self.rt = self.compute._get_resource_tracker(NODENAME)