Skip to content

Commit

Permalink
[tests] Fix/modify QEMU backend tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Townsend committed May 2, 2024
1 parent 9fb31c5 commit 1861b89
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions tests/qemu/test_qemu_backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

#include <multipass/auto_join_thread.h>
#include <multipass/exceptions/start_exception.h>
#include <multipass/exceptions/virtual_machine_state_exceptions.h>
#include <multipass/memory_size.h>
#include <multipass/platform.h>
#include <multipass/snapshot.h>
Expand Down Expand Up @@ -284,7 +285,7 @@ TEST_F(QemuBackend, throws_when_shutdown_while_starting)

mp::AutoJoinThread thread{[&machine, vmproc] {
ON_CALL(*vmproc, running()).WillByDefault(Return(false));
machine->shutdown();
machine->shutdown(true);
}};

using namespace std::chrono_literals;
Expand Down Expand Up @@ -369,24 +370,22 @@ TEST_F(QemuBackend, machine_unknown_state_properly_shuts_down)
EXPECT_THAT(machine->current_state(), Eq(mp::VirtualMachine::State::off));
}

TEST_F(QemuBackend, suspended_state_ignores_shutdown)
TEST_F(QemuBackend, suspended_state_no_force_shutdown_logs_and_throws)
{
const std::string error_msg{"Cannot stop suspended instance. Use --force to override."};

EXPECT_CALL(*mock_qemu_platform_factory, make_qemu_platform(_)).WillOnce([this](auto...) {
return std::move(mock_qemu_platform);
});

auto logger_scope = mpt::MockLogger::inject();
logger_scope.mock_logger->screen_logs(mpl::Level::info);
logger_scope.mock_logger->expect_log(mpl::Level::info, "Ignoring shutdown issued while suspended");

mpt::StubVMStatusMonitor stub_monitor;
mp::QemuVirtualMachineFactory backend{data_dir.path()};

auto machine = backend.create_virtual_machine(default_description, key_provider, stub_monitor);

machine->state = mp::VirtualMachine::State::suspended;

machine->shutdown();
MP_EXPECT_THROW_THAT(machine->shutdown(), mp::VMStateInvalidException, mpt::match_what(StrEq(error_msg)));

EXPECT_EQ(machine->current_state(), mp::VirtualMachine::State::suspended);
}
Expand Down Expand Up @@ -446,16 +445,16 @@ TEST_F(QemuBackend, force_shutdown_no_process_logs)
});

auto logger_scope = mpt::MockLogger::inject();
logger_scope.mock_logger->screen_logs(mpl::Level::info);
logger_scope.mock_logger->screen_logs(mpl::Level::debug);
logger_scope.mock_logger->expect_log(mpl::Level::info, "Forcing shutdown");
logger_scope.mock_logger->expect_log(mpl::Level::info, "No process to kill");
logger_scope.mock_logger->expect_log(mpl::Level::debug, "No process to kill");

mpt::StubVMStatusMonitor stub_monitor;
mp::QemuVirtualMachineFactory backend{data_dir.path()};

auto machine = backend.create_virtual_machine(default_description, key_provider, stub_monitor);

EXPECT_EQ(machine->current_state(), mp::VirtualMachine::State::off);
machine->state = mp::VirtualMachine::State::unknown;

machine->shutdown(true); // force shutdown

Expand All @@ -471,10 +470,10 @@ TEST_F(QemuBackend, force_shutdown_suspend_deletes_suspend_images_and_off_state)
auto factory = mpt::StubProcessFactory::Inject();

auto logger_scope = mpt::MockLogger::inject();
logger_scope.mock_logger->screen_logs(mpl::Level::info);
logger_scope.mock_logger->screen_logs(mpl::Level::debug);
logger_scope.mock_logger->expect_log(mpl::Level::info, "Forcing shutdown");
logger_scope.mock_logger->expect_log(mpl::Level::debug, "No process to kill");
logger_scope.mock_logger->expect_log(mpl::Level::info, "Deleting suspend image");
logger_scope.mock_logger->expect_log(mpl::Level::info, "No process to kill");

mpt::StubVMStatusMonitor stub_monitor;
mp::QemuVirtualMachineFactory backend{data_dir.path()};
Expand Down Expand Up @@ -866,7 +865,7 @@ struct MockQemuVM : public mpt::MockVirtualMachineT<mp::QemuVirtualMachine>
TEST_F(QemuBackend, dropsSSHSessionWhenStopping)
{
NiceMock<MockQemuVM> machine{"mock-qemu-vm", key_provider};
machine.state = multipass::VirtualMachine::State::stopped;
machine.state = multipass::VirtualMachine::State::running;

EXPECT_CALL(machine, drop_ssh_session());

Expand Down

0 comments on commit 1861b89

Please sign in to comment.