示例#1
0
void
ioctl_driver::unload_vmm()
{
    switch (get_status())
    {
        case VMM_RUNNING: stop_vmm();
        case VMM_LOADED: break;
        case VMM_UNLOADED: break;
        case VMM_CORRUPT: throw corrupt_vmm();
        default: throw unknown_status();
    }

    m_ioctl->call_ioctl_unload_vmm();
}
示例#2
0
void
ioctl_driver::start_vmm()
{
    switch (get_status())
    {
        case VMM_RUNNING: stop_vmm();
        case VMM_LOADED: break;
        case VMM_UNLOADED: throw invalid_vmm_state("vmm must be loaded first");
        case VMM_CORRUPT: throw corrupt_vmm();
        default: throw unknown_status();
    }

    m_ioctl->call_ioctl_start_vmm();
}
示例#3
0
void
entry_ut::test_stop_vmm_throws_any_exception()
{
    MockRepository mocks;
    auto vcm = mocks.Mock<vcpu_manager>();
    mocks.OnCallFunc(vcpu_manager::instance).Return(vcm);

    mocks.OnCall(vcm, vcpu_manager::init).Throw(10);

    RUN_UNITTEST_WITH_MOCKS(mocks, [&]
    {
        EXPECT_NO_EXCEPTION(stop_vmm(0));
    });
}
示例#4
0
void
entry_ut::test_stop_vmm_success()
{
    MockRepository mocks;
    auto vcm = mocks.Mock<vcpu_manager>();
    mocks.OnCallFunc(vcpu_manager::instance).Return(vcm);

    mocks.OnCall(vcm, vcpu_manager::hlt_vcpu);
    mocks.OnCall(vcm, vcpu_manager::delete_vcpu);

    RUN_UNITTEST_WITH_MOCKS(mocks, [&]
    {
        EXPECT_NO_EXCEPTION(stop_vmm(0));
    });
}
示例#5
0
void
ioctl_driver::load_vmm()
{
    switch (get_status())
    {
        case VMM_RUNNING: stop_vmm();
        case VMM_LOADED: unload_vmm();
        case VMM_UNLOADED: break;
        case VMM_CORRUPT: throw corrupt_vmm();
        default: throw unknown_status();
    }

    auto &&modules = json::parse(m_file->read_text(m_clp->modules()));

    auto ___ = gsl::on_failure([&]
    { unload_vmm(); });

    for (const auto &module : modules["modules"])
        m_ioctl->call_ioctl_add_module(m_file->read_binary(module));

    m_ioctl->call_ioctl_load_vmm();
}