Пример #1
0
    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'])
Пример #2
0
    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')
Пример #3
0
    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)
Пример #4
0
    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={})
Пример #5
0
 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)
Пример #6
0
    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={})
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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'])
Пример #10
0
    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={})