Esempio n. 1
0
class ShelveControllerTest(test.NoDBTestCase):
    plugin = shelve_v21

    def setUp(self):
        super().setUp()
        self.controller = self.plugin.ShelveController()
        self.req = fakes.HTTPRequest.blank('')

    @ddt.data(
        exception.InstanceIsLocked(instance_uuid=uuids.instance),
        exception.OperationNotSupportedForVTPM(instance_uuid=uuids.instance,
                                               operation='foo'),
        exception.UnexpectedTaskStateError(instance_uuid=uuids.instance,
                                           expected=None,
                                           actual=task_states.SHELVING),
    )
    @mock.patch('nova.compute.api.API.shelve')
    @mock.patch('nova.api.openstack.common.get_instance')
    def test_shelve__http_conflict_error(
        self,
        exc,
        mock_get_instance,
        mock_shelve,
    ):
        mock_get_instance.return_value = (fake_instance.fake_instance_obj(
            self.req.environ['nova.context']))
        mock_shelve.side_effect = exc

        self.assertRaises(webob.exc.HTTPConflict, self.controller._shelve,
                          self.req, uuids.fake, {})

    @mock.patch('nova.api.openstack.common.get_instance')
    def test_unshelve_locked_server(self, get_instance_mock):
        get_instance_mock.return_value = (fake_instance.fake_instance_obj(
            self.req.environ['nova.context']))
        self.stub_out('nova.compute.api.API.unshelve',
                      fakes.fake_actions_to_locked_server)
        self.assertRaises(webob.exc.HTTPConflict,
                          self.controller._unshelve,
                          self.req,
                          uuids.fake,
                          body={'unshelve': {}})

    @mock.patch('nova.api.openstack.common.get_instance')
    def test_shelve_offload_locked_server(self, get_instance_mock):
        get_instance_mock.return_value = (fake_instance.fake_instance_obj(
            self.req.environ['nova.context']))
        self.stub_out('nova.compute.api.API.shelve_offload',
                      fakes.fake_actions_to_locked_server)
        self.assertRaises(webob.exc.HTTPConflict,
                          self.controller._shelve_offload, self.req,
                          uuids.fake, {})
Esempio n. 2
0
    def test_unexpected_task_state(self):
        self.mox.StubOutWithMock(self.compute.driver, 'spawn')
        self.compute.driver.spawn(
            self.context, self.instance, self.image, self.injected_files,
            self.admin_pass).AndRaise(
                exception.UnexpectedTaskStateError(expected=None,
                                                   actual='deleting'))
        self.mox.ReplayAll()

        self.assertRaises(exception.BuildAbortException,
                          self.compute._build_and_run_instance, self.context,
                          self.instance, self.image, self.injected_files,
                          self.admin_pass)
Esempio n. 3
0
    def test_unexpected_task_state(self):
        self.mox.StubOutWithMock(self.compute.driver, 'spawn')
        self.mox.StubOutWithMock(conductor_rpcapi.ConductorAPI,
                                 'instance_update')
        self.compute.driver.spawn(self.context, self.instance, self.image,
                self.injected_files, self.admin_pass).AndRaise(
                        exception.UnexpectedTaskStateError(expected=None,
                            actual='deleting'))
        conductor_rpcapi.ConductorAPI.instance_update(
            self.context, self.instance['uuid'], mox.IgnoreArg(), 'conductor')
        self.mox.ReplayAll()

        self.assertRaises(exception.BuildAbortException,
                self.compute._build_and_run_instance, self.context,
                self.instance, self.image, self.injected_files,
                self.admin_pass, self.node, self.limits)
Esempio n. 4
0
 def test_shelve_task_state_race(self, mock_save, get_instance_mock):
     instance = fake_instance.fake_instance_obj(
         self.req.environ['nova.context'],
         vm_state=vm_states.ACTIVE,
         task_state=None)
     instance.launched_at = instance.created_at
     get_instance_mock.return_value = instance
     mock_save.side_effect = exception.UnexpectedTaskStateError(
         instance_uuid=instance.uuid,
         expected=None,
         actual=task_states.SHELVING)
     ex = self.assertRaises(webob.exc.HTTPConflict,
                            self.controller._shelve,
                            self.req,
                            uuidsentinel.fake,
                            body={'shelve': {}})
     self.assertIn('Conflict updating instance', six.text_type(ex))
     mock_save.assert_called_once_with(expected_task_state=[None])