def _setup_test_server(self, return_server, name, image_id=None): stack_name = '%s_stack' % name (t, stack) = self._setup_test_stack(stack_name) t['Resources']['WebServer']['Properties']['image'] = \ image_id or 'CentOS 5.2' t['Resources']['WebServer']['Properties']['flavor'] = \ '256 MB Server' server = servers.Server('%s_name' % name, t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) server.t = server.stack.resolve_runtime_data(server.t) # need to resolve the template functions #server_userdata = nova_utils.build_userdata( # server, # server.t['Properties']['user_data']) #server.mime_string = server_userdata self.m.StubOutWithMock(self.fc.servers, 'create') self.fc.servers.create( image=1, flavor=1, key_name='test', name=utils.PhysName(stack_name, server.name), security_groups=None, userdata=mox.IgnoreArg(), scheduler_hints=None, meta=None, nics=None, availability_zone=None, block_device_mapping=None, config_drive=None, disk_config=None, reservation_id=None).AndReturn( return_server) return server
def test_server_create_raw_userdata(self): return_server = self.fc.servers.list()[1] stack_name = 'raw_userdata_s' (t, stack) = self._setup_test_stack(stack_name) t['Resources']['WebServer']['Properties']['user_data_format'] = \ 'RAW' server = servers.Server('WebServer', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) server.t = server.stack.resolve_runtime_data(server.t) self.m.StubOutWithMock(self.fc.servers, 'create') self.fc.servers.create(image=744, flavor=3, key_name='test', name=utils.PhysName(stack_name, server.name), security_groups=None, userdata='wordpress', scheduler_hints=None, meta=None, nics=None, availability_zone=None, block_device_mapping=None, config_drive=None, disk_config=None, reservation_id=None).AndReturn(return_server) self.m.ReplayAll() scheduler.TaskRunner(server.create)() self.m.VerifyAll()
def test_server_create_duplicate_image_name_err(self): stack_name = 'img_dup_err' (t, stack) = self._setup_test_stack(stack_name) # create an server with a non unique image name t['Resources']['WebServer']['Properties']['image'] = 'CentOS 5.2' server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.StubOutWithMock(self.fc.client, "get_images_detail") self.fc.client.get_images_detail().AndReturn((200, { 'images': [{ 'id': 1, 'name': 'CentOS 5.2' }, { 'id': 4, 'name': 'CentOS 5.2' }] })) self.m.ReplayAll() self.assertRaises(exception.NoUniqueImageFound, server.handle_create) self.m.VerifyAll()
def create_server(device_name): web_server['Properties']['block_device_mapping'] = [{ "device_name": device_name, "volume_id": "5d7e27da-6703-4f7e-9f94-1f67abef734c", "delete_on_termination": False }] server = servers.Server('server_with_bootable_volume', web_server, stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.ReplayAll() return server
def test_server_update_image_replace(self): stack_name = 'update_imgrep' (t, stack) = self._setup_test_stack(stack_name) t['Resources']['WebServer']['Properties'][ 'image_update_policy'] = 'REPLACE' server = servers.Server('server_update_image_replace', t['Resources']['WebServer'], stack) update_template = copy.deepcopy(server.t) update_template['Properties']['image'] = self.getUniqueString() updater = scheduler.TaskRunner(server.update, update_template) self.assertRaises(resource.UpdateReplace, updater)
def test_server_update_server_flavor_replace(self): stack_name = 'update_flvrep' (t, stack) = self._setup_test_stack(stack_name) t['Resources']['WebServer']['Properties'][ 'flavor_update_policy'] = 'REPLACE' server = servers.Server('server_server_update_flavor_replace', t['Resources']['WebServer'], stack) update_template = copy.deepcopy(server.t) update_template['Properties']['flavor'] = 'm1.smigish' updater = scheduler.TaskRunner(server.update, update_template) self.assertRaises(resource.UpdateReplace, updater)
def test_server_update_server_flavor_policy_update(self): stack_name = 'update_flvpol' (t, stack) = self._setup_test_stack(stack_name) server = servers.Server('server_server_update_flavor_replace', t['Resources']['WebServer'], stack) update_template = copy.deepcopy(server.t) # confirm that when flavor_update_policy is changed during # the update then the updated policy is followed for a flavor # update update_template['Properties']['flavor_update_policy'] = 'REPLACE' update_template['Properties']['flavor'] = 'm1.smigish' updater = scheduler.TaskRunner(server.update, update_template) self.assertRaises(resource.UpdateReplace, updater)
def test_validate_conflict_block_device_mapping_props(self): stack_name = 'val_blkdev1' (t, stack) = self._setup_test_stack(stack_name) bdm = [{'device_name': 'vdb', 'snapshot_id': '1234', 'volume_id': '1234'}] t['Resources']['WebServer']['Properties']['block_device_mapping'] = bdm server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.ReplayAll() self.assertRaises(exception.ResourcePropertyConflict, server.validate) self.m.VerifyAll()
def test_server_validate_delete_policy(self): stack_name = 'srv_val_delpol' (t, stack) = self._setup_test_stack(stack_name) # create an server with non exist image Id t['Resources']['WebServer']['DeletionPolicy'] = 'SelfDestruct' server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.ReplayAll() ex = self.assertRaises(exception.StackValidationFailed, server.validate) self.assertEqual('Invalid DeletionPolicy SelfDestruct', str(ex)) self.m.VerifyAll()
def test_server_create_image_name_err(self): stack_name = 'img_name_err' (t, stack) = self._setup_test_stack(stack_name) # create an server with non exist image name t['Resources']['WebServer']['Properties']['image'] = 'Slackware' server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.ReplayAll() self.assertRaises(exception.ImageNotFound, server.handle_create) self.m.VerifyAll()
def _setup_test_server(self, return_server, name, image_id=None, override_name=False, stub_create=True): stack_name = '%s_s' % name (t, stack) = self._setup_test_stack(stack_name) t['Resources']['WebServer']['Properties']['image'] = \ image_id or 'CentOS 5.2' t['Resources']['WebServer']['Properties']['flavor'] = \ '256 MB Server' server_name = '%s' % name if override_name: t['Resources']['WebServer']['Properties']['name'] = \ server_name server = servers.Server(server_name, t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) server.t = server.stack.resolve_runtime_data(server.t) if stub_create: self.m.StubOutWithMock(self.fc.servers, 'create') self.fc.servers.create( image=1, flavor=1, key_name='test', name=override_name and server.name or utils.PhysName(stack_name, server.name), security_groups=None, userdata=mox.IgnoreArg(), scheduler_hints=None, meta=None, nics=None, availability_zone=None, block_device_mapping=None, config_drive=None, disk_config=None, reservation_id=None).AndReturn(return_server) return server
def test_server_validate(self): stack_name = 'srv_val' (t, stack) = self._setup_test_stack(stack_name) # create an server with non exist image Id t['Resources']['WebServer']['Properties']['image'] = '1' server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.StubOutWithMock(uuidutils, "is_uuid_like") uuidutils.is_uuid_like('1').AndReturn(True) self.m.ReplayAll() self.assertEqual(server.validate(), None) self.m.VerifyAll()
def test_validate_without_image_or_bootable_volume(self): stack_name = 'val_imgvol' (t, stack) = self._setup_test_stack(stack_name) del t['Resources']['WebServer']['Properties']['image'] bdm = [{'device_name': 'vdb', 'volume_id': '1234'}] t['Resources']['WebServer']['Properties']['block_device_mapping'] = bdm server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.ReplayAll() ex = self.assertRaises(exception.StackValidationFailed, server.validate) msg = 'Neither image nor bootable volume is specified for instance %s'\ % server.name self.assertEqual(msg, str(ex)) self.m.VerifyAll()
def test_validate_insufficient_block_device_mapping_props(self): stack_name = 'val_blkdev2' (t, stack) = self._setup_test_stack(stack_name) bdm = [{'device_name': 'vdb', 'volume_size': '1', 'delete_on_termination': True}] t['Resources']['WebServer']['Properties']['block_device_mapping'] = bdm server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.ReplayAll() ex = self.assertRaises(exception.StackValidationFailed, server.validate) msg = 'Either volume_id or snapshot_id must be specified for device' +\ ' mapping vdb' self.assertEqual(msg, str(ex)) self.m.VerifyAll()
def test_server_create_image_id_err(self): stack_name = 'img_id_err' (t, stack) = self._setup_test_stack(stack_name) # create an server with non exist image Id t['Resources']['WebServer']['Properties']['image'] = '1' server = servers.Server('server_create_image_err', t['Resources']['WebServer'], stack) self.m.StubOutWithMock(server, 'nova') server.nova().MultipleTimes().AndReturn(self.fc) self.m.StubOutWithMock(uuidutils, "is_uuid_like") uuidutils.is_uuid_like('1').AndReturn(True) self.m.StubOutWithMock(self.fc.client, "get_images_1") self.fc.client.get_images_1().AndRaise( servers.clients.novaclient.exceptions.NotFound(404)) self.m.ReplayAll() self.assertRaises(exception.ImageNotFound, server.handle_create) self.m.VerifyAll()