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)
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)
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)