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(); }
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(); }
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)); }); }
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)); }); }
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(); }