Пример #1
0
    def test_revert_nova_fails(self):
        self._datastore_changes_to(srvstatus.ServiceStatuses.SHUTDOWN)

        with mock.patch.object(utils, 'poll_until') as mock_poll_until:
            self.poll_until_side_effects.extend([
                None, ("VERIFY_RESIZE", NEW_FLAVOR_ID), None,
                PollTimeOut(), ("ERROR", OLD_FLAVOR_ID)
            ])
            mock_poll_until.side_effect = self._poll_until

            self.instance.set_datastore_status_to_paused.side_effect = (
                lambda: self._datastore_changes_to(srvstatus.ServiceStatuses.
                                                   PAUSED))

            self.assertRaises(PollTimeOut, self.action.execute)

            expected_calls = [mock.call(mock.ANY, sleep_time=2, time_out=120)
                              ] * 5
            self.assertEqual(expected_calls, mock_poll_until.call_args_list)
            # Make sure self.poll_until_side_effects is empty
            self.assertFalse(self.poll_until_side_effects)
            self.assertEqual(1, self.guest.stop_db.call_count)
            self.server.resize.assert_called_once_with(NEW_FLAVOR_ID)
            self.instance.set_datastore_status_to_paused.assert_called_once()
            self.instance.guest.reset_configuration.assert_called_once_with(
                mock.ANY)
            self.instance.server.revert_resize.assert_called_once()
            self.instance.update_db.assert_called_once_with(
                task_status=InstanceTasks.NONE)
Пример #2
0
    def test_nova_resize_timeout(self):
        self._datastore_changes_to(srvstatus.ServiceStatuses.SHUTDOWN)
        self.server.status = "ACTIVE"

        with mock.patch.object(utils, 'poll_until') as mock_poll_until:
            mock_poll_until.side_effect = [None, PollTimeOut()]
            self.assertRaises(PollTimeOut, self.action.execute)
            expected_calls = [mock.call(mock.ANY, sleep_time=2, time_out=120)
                              ] * 2
            self.assertEqual(expected_calls, mock_poll_until.call_args_list)
            self.assertEqual(1, self.guest.stop_db.call_count)
            self.server.resize.assert_called_once_with(NEW_FLAVOR_ID)
            self.instance.update_db.assert_called_once_with(
                task_status=InstanceTasks.NONE)
Пример #3
0
    def resize(self, new_flavor_id=None, force_host=None):
        self._current_status = "RESIZE"
        if self.name.endswith("_RESIZE_TIMEOUT"):
            raise PollTimeOut()

        def set_to_confirm_mode():
            self._current_status = "VERIFY_RESIZE"

            def set_to_active():
                self.parent.schedule_simulate_running_server(self.id, 1.5)

            eventlet.spawn_after(1, set_to_active)

        def change_host():
            self.old_host = self.host
            if not force_host:
                self.host = [host for host in FAKE_HOSTS
                             if host != self.host][0]
            else:
                self.host = force_host

        def set_flavor():
            if self.name.endswith("_RESIZE_ERROR"):
                self._current_status = "ACTIVE"
                return
            if new_flavor_id is None:
                # Migrations are flavorless flavor resizes.
                # A resize MIGHT change the host, but a migrate
                # deliberately does.
                LOG.debug("Migrating fake instance.")
                eventlet.spawn_after(0.75, change_host)
            else:
                LOG.debug("Resizing fake instance.")
                self.old_flavor_ref = self.flavor_ref
                flavor = self.parent.flavors.get(new_flavor_id)
                self.flavor_ref = flavor.links[0]['href']
            eventlet.spawn_after(1, set_to_confirm_mode)

        eventlet.spawn_after(0.8, set_flavor)