def test_attach_disk(self): stg_ftsk = mock.Mock() disk_dev_info = mock.Mock() task = tf_stg.AttachDisk(self.disk_dvr, self.instance, stg_ftsk) task.execute(disk_dev_info) self.disk_dvr.attach_disk.assert_called_once_with( self.instance, disk_dev_info, stg_ftsk) task.revert(disk_dev_info, 'result', 'flow failures') self.disk_dvr.detach_disk.assert_called_once_with(self.instance) self.disk_dvr.detach_disk.reset_mock() # Revert failures are not raised self.disk_dvr.detach_disk.side_effect = pvm_exc.TimeoutError( "timed out") task.revert(disk_dev_info, 'result', 'flow failures') self.disk_dvr.detach_disk.assert_called_once_with(self.instance) # Validate args on taskflow.task.Task instantiation with mock.patch('taskflow.task.Task.__init__') as tf: tf_stg.AttachDisk(self.disk_dvr, self.instance, stg_ftsk) tf.assert_called_once_with(name='attach_disk', requires=['disk_dev_info'])
def test_create_disk_for_img(self): image_meta = mock.Mock() task = tf_stg.CreateDiskForImg(self.disk_dvr, self.context, self.instance, image_meta) task.execute() self.disk_dvr.create_disk_from_image.assert_called_once_with( self.context, self.instance, image_meta) task.revert('result', 'flow failures') self.disk_dvr.delete_disks.assert_called_once_with(['result']) self.disk_dvr.delete_disks.reset_mock() # Delete not called if no result task.revert(None, None) self.disk_dvr.delete_disks.assert_not_called() # Delete exception doesn't raise self.disk_dvr.delete_disks.side_effect = pvm_exc.TimeoutError( "timed out") task.revert('result', 'flow failures') self.disk_dvr.delete_disks.assert_called_once_with(['result']) # Validate args on taskflow.task.Task instantiation with mock.patch('taskflow.task.Task.__init__') as tf: tf_stg.CreateDiskForImg(self.disk_dvr, self.context, self.instance, image_meta) tf.assert_called_once_with(name='create_disk_from_img', provides='disk_dev_info')
def test_reboot(self, mock_wrap, mock_lock, mock_pwroff, mock_pwron): entry = mock.Mock(state=pvm_bp.LPARState.NOT_ACTIVATED) mock_wrap.return_value = entry # No power_off vm.reboot('adap', self.inst, False) mock_lock.assert_called_once_with('power_%s' % self.inst.uuid) mock_wrap.assert_called_once_with('adap', self.inst) mock_pwron.assert_called_once_with(entry, None) self.assertEqual(0, mock_pwroff.call_count) mock_pwron.reset_mock() # power_off (no power_on) entry.state = pvm_bp.LPARState.RUNNING for force in (False, True): mock_pwroff.reset_mock() vm.reboot('adap', self.inst, force) self.assertEqual(0, mock_pwron.call_count) mock_pwroff.assert_called_once_with(entry, None, force_immediate=force, restart=True) # PowerVM error is converted mock_pwroff.side_effect = pvm_exc.TimeoutError("Timed out") self.assertRaises(exception.InstanceRebootFailure, vm.reboot, 'adap', self.inst, True) # Non-PowerVM error is raised directly mock_pwroff.side_effect = ValueError self.assertRaises(ValueError, vm.reboot, 'adap', self.inst, True)
def test_destroy(self, mock_dlt_lpar): """Validates PowerVM destroy.""" self.drv.disk_dvr = mock.create_autospec(ssp.SSPDiskAdapter, instance=True) # Good path self.drv.destroy('context', self.inst, [], block_device_info={}) self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) self.drv.disk_dvr.detach_disk.assert_called_once_with(self.inst) self.drv.disk_dvr.delete_disks.assert_called_once_with( self.drv.disk_dvr.detach_disk.return_value) mock_dlt_lpar.assert_called_once_with(self.adp, self.inst) self.pwroff.reset_mock() self.drv.disk_dvr.detach_disk.reset_mock() self.drv.disk_dvr.delete_disks.reset_mock() mock_dlt_lpar.reset_mock() # InstanceNotFound exception, non-forced self.pwroff.side_effect = exception.InstanceNotFound( instance_id='something') self.drv.destroy('context', self.inst, [], block_device_info={}, destroy_disks=False) self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=False) self.drv.disk_dvr.detach_disk.assert_not_called() self.drv.disk_dvr.delete_disks.assert_not_called() mock_dlt_lpar.assert_not_called() self.pwroff.reset_mock() self.pwroff.side_effect = None # Convertible (PowerVM) exception mock_dlt_lpar.side_effect = pvm_exc.TimeoutError("Timed out") self.assertRaises(exception.InstanceTerminationFailure, self.drv.destroy, 'context', self.inst, [], block_device_info={}) # Everything got called self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) self.drv.disk_dvr.detach_disk.assert_called_once_with(self.inst) self.drv.disk_dvr.delete_disks.assert_called_once_with( self.drv.disk_dvr.detach_disk.return_value) mock_dlt_lpar.assert_called_once_with(self.adp, self.inst) # Other random exception raises directly mock_dlt_lpar.side_effect = ValueError() self.assertRaises(ValueError, self.drv.destroy, 'context', self.inst, [], block_device_info={})
def test_init_error(self): # Do these in reverse order to verify we trap all of 'em for raiser in (self.mock_get_tier, self.mock_ssp_gbhref, self.mock_clust.get): raiser.side_effect = pvm_exc.TimeoutError("timed out") self.assertRaises(exception.NotFound, ssp_dvr.SSPDiskAdapter, self.apt, self.host_uuid) raiser.side_effect = ValueError self.assertRaises(ValueError, ssp_dvr.SSPDiskAdapter, self.apt, self.host_uuid)
def test_destroy(self, mock_pwroff, mock_del): """Validates PowerVM destroy.""" # Good path self.drv.destroy('context', self.inst, [], block_device_info={}) mock_pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) mock_del.assert_called_once_with(self.adp, self.inst) mock_pwroff.reset_mock() mock_del.reset_mock() # InstanceNotFound exception, non-forced mock_pwroff.side_effect = exception.InstanceNotFound( instance_id='something') self.drv.destroy('context', self.inst, [], block_device_info={}, destroy_disks=False) mock_pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=False) mock_del.assert_not_called() mock_pwroff.reset_mock() mock_pwroff.side_effect = None # Convertible (PowerVM) exception mock_del.side_effect = pvm_exc.TimeoutError("Timed out") self.assertRaises(exception.InstanceTerminationFailure, self.drv.destroy, 'context', self.inst, [], block_device_info={}) # Everything got called mock_pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) mock_del.assert_called_once_with(self.adp, self.inst) # Other random exception raises directly mock_del.side_effect = ValueError() self.assertRaises(ValueError, self.drv.destroy, 'context', self.inst, [], block_device_info={})
def test_reboot(self, mock_wrap, mock_lock, mock_pop, mock_pwroff, mock_pwron): entry = mock.Mock(state=pvm_bp.LPARState.NOT_ACTIVATED) mock_wrap.return_value = entry # No power_off vm.reboot('adap', self.inst, False) mock_lock.assert_called_once_with('power_%s' % self.inst.uuid) mock_wrap.assert_called_once_with('adap', self.inst) mock_pwron.assert_called_once_with(entry, None) self.assertEqual(0, mock_pwroff.call_count) self.assertEqual(0, mock_pop.stop.call_count) mock_pwron.reset_mock() # power_off (no power_on) hard entry.state = pvm_bp.LPARState.RUNNING vm.reboot('adap', self.inst, True) self.assertEqual(0, mock_pwron.call_count) self.assertEqual(0, mock_pwroff.call_count) mock_pop.stop.assert_called_once_with(entry, opts=mock.ANY) self.assertEqual( 'PowerOff(immediate=true, operation=shutdown, restart=true)', str(mock_pop.stop.call_args[1]['opts'])) mock_pop.reset_mock() # power_off (no power_on) soft entry.state = pvm_bp.LPARState.RUNNING vm.reboot('adap', self.inst, False) self.assertEqual(0, mock_pwron.call_count) mock_pwroff.assert_called_once_with(entry, restart=True) self.assertEqual(0, mock_pop.stop.call_count) mock_pwroff.reset_mock() # PowerVM error is converted mock_pop.stop.side_effect = pvm_exc.TimeoutError("Timed out") self.assertRaises(exception.InstanceRebootFailure, vm.reboot, 'adap', self.inst, True) # Non-PowerVM error is raised directly mock_pwroff.side_effect = ValueError self.assertRaises(ValueError, vm.reboot, 'adap', self.inst, False)
def test_attach_disk(self): stg_ftsk = mock.Mock() disk_dev_info = mock.Mock() task = tf_stg.AttachDisk(self.disk_dvr, self.instance, stg_ftsk) task.execute(disk_dev_info) self.disk_dvr.attach_disk.assert_called_once_with( self.instance, disk_dev_info, stg_ftsk) task.revert(disk_dev_info, 'result', 'flow failures') self.disk_dvr.detach_disk.assert_called_once_with(self.instance) self.disk_dvr.detach_disk.reset_mock() # Revert failures are not raised self.disk_dvr.detach_disk.side_effect = pvm_exc.TimeoutError( "timed out") task.revert(disk_dev_info, 'result', 'flow failures') self.disk_dvr.detach_disk.assert_called_once_with(self.instance)
def test_create_disk_for_img(self): image_meta = mock.Mock() task = tf_stg.CreateDiskForImg( self.disk_dvr, self.context, self.instance, image_meta) task.execute() self.disk_dvr.create_disk_from_image.assert_called_once_with( self.context, self.instance, image_meta) task.revert('result', 'flow failures') self.disk_dvr.delete_disks.assert_called_once_with(['result']) self.disk_dvr.delete_disks.reset_mock() # Delete not called if no result task.revert(None, None) self.disk_dvr.delete_disks.assert_not_called() # Delete exception doesn't raise self.disk_dvr.delete_disks.side_effect = pvm_exc.TimeoutError( "timed out") task.revert('result', 'flow failures') self.disk_dvr.delete_disks.assert_called_once_with(['result'])
def test_destroy(self, mock_bldftsk, mock_cdrb, mock_cfgdrv, mock_dlt_lpar, mock_unplug, mock_detach_vol): """Validates PowerVM destroy.""" self.drv.host_wrapper = mock.Mock() self.drv.disk_dvr = mock.create_autospec(ssp.SSPDiskAdapter, instance=True) mock_ftsk = pvm_tx.FeedTask('fake', [mock.Mock(spec=pvm_vios.VIOS)]) mock_bldftsk.return_value = mock_ftsk block_device_info = self._fake_bdms() # Good path, with config drive, destroy disks mock_cdrb.return_value = True self.drv.destroy('context', self.inst, [], block_device_info=block_device_info) self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) mock_bldftsk.assert_called_once_with(self.adp, xag=[pvm_const.XAG.VIO_SMAP]) mock_unplug.assert_called_once() mock_cdrb.assert_called_once_with(self.inst) mock_cfgdrv.assert_called_once_with(self.adp) mock_cfgdrv.return_value.dlt_vopt.assert_called_once_with( self.inst, stg_ftsk=mock_bldftsk.return_value) self.assertEqual(2, mock_detach_vol.call_count) self.drv.disk_dvr.detach_disk.assert_called_once_with(self.inst) self.drv.disk_dvr.delete_disks.assert_called_once_with( self.drv.disk_dvr.detach_disk.return_value) mock_dlt_lpar.assert_called_once_with(self.adp, self.inst) self.pwroff.reset_mock() mock_bldftsk.reset_mock() mock_unplug.reset_mock() mock_cdrb.reset_mock() mock_cfgdrv.reset_mock() self.drv.disk_dvr.detach_disk.reset_mock() self.drv.disk_dvr.delete_disks.reset_mock() mock_detach_vol.reset_mock() mock_dlt_lpar.reset_mock() # No config drive, preserve disks, no block device info mock_cdrb.return_value = False self.drv.destroy('context', self.inst, [], block_device_info={}, destroy_disks=False) mock_cfgdrv.return_value.dlt_vopt.assert_not_called() mock_detach_vol.assert_not_called() self.drv.disk_dvr.delete_disks.assert_not_called() # Non-forced power_off, since preserving disks self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=False) mock_bldftsk.assert_called_once_with(self.adp, xag=[pvm_const.XAG.VIO_SMAP]) mock_unplug.assert_called_once() mock_cdrb.assert_called_once_with(self.inst) mock_cfgdrv.assert_not_called() mock_cfgdrv.return_value.dlt_vopt.assert_not_called() self.drv.disk_dvr.detach_disk.assert_called_once_with(self.inst) self.drv.disk_dvr.delete_disks.assert_not_called() mock_dlt_lpar.assert_called_once_with(self.adp, self.inst) self.pwroff.reset_mock() mock_bldftsk.reset_mock() mock_unplug.reset_mock() mock_cdrb.reset_mock() mock_cfgdrv.reset_mock() self.drv.disk_dvr.detach_disk.reset_mock() self.drv.disk_dvr.delete_disks.reset_mock() mock_dlt_lpar.reset_mock() # InstanceNotFound exception, non-forced self.pwroff.side_effect = exception.InstanceNotFound( instance_id='something') self.drv.destroy('context', self.inst, [], block_device_info={}, destroy_disks=False) self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=False) self.drv.disk_dvr.detach_disk.assert_not_called() mock_unplug.assert_not_called() self.drv.disk_dvr.delete_disks.assert_not_called() mock_dlt_lpar.assert_not_called() self.pwroff.reset_mock() self.pwroff.side_effect = None mock_unplug.reset_mock() # Convertible (PowerVM) exception mock_dlt_lpar.side_effect = pvm_exc.TimeoutError("Timed out") self.assertRaises(exception.InstanceTerminationFailure, self.drv.destroy, 'context', self.inst, [], block_device_info={}) # Everything got called self.pwroff.assert_called_once_with(self.adp, self.inst, force_immediate=True) mock_unplug.assert_called_once() self.drv.disk_dvr.detach_disk.assert_called_once_with(self.inst) self.drv.disk_dvr.delete_disks.assert_called_once_with( self.drv.disk_dvr.detach_disk.return_value) mock_dlt_lpar.assert_called_once_with(self.adp, self.inst) # Other random exception raises directly mock_dlt_lpar.side_effect = ValueError() self.assertRaises(ValueError, self.drv.destroy, 'context', self.inst, [], block_device_info={})