blob: 92890a6f0e81ab1c170e00dfeb10bdf1cef7d0e7 [file]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/virtualization/bin/termina_guest_manager/termina_guest_manager.h"
#include <fuchsia/virtualization/cpp/fidl.h>
#include <lib/sys/cpp/testing/component_context_provider.h>
#include "src/lib/testing/loop_fixture/test_loop_fixture.h"
#include "src/virtualization/bin/termina_guest_manager/termina_config.h"
namespace termina_guest_manager {
namespace {
using ConfigResult = fit::result<::fuchsia::virtualization::GuestManagerError,
::fuchsia::virtualization::GuestConfig>;
class TestTerminaGuestManager : public TerminaGuestManager {
public:
TestTerminaGuestManager(async_dispatcher_t* dispatcher,
std::unique_ptr<sys::ComponentContext> context,
termina_config::Config structured_config,
fit::function<void()> stop_manager_callback, ConfigResult config_result)
: TerminaGuestManager(dispatcher, std::move(context), std::move(structured_config),
std::move(stop_manager_callback)),
config_result_(std::move(config_result)) {}
ConfigResult GetDefaultGuestConfig() { return std::move(config_result_); }
private:
ConfigResult config_result_;
};
class TerminaGuestManagerTest : public gtest::TestLoopFixture {};
TEST_F(TerminaGuestManagerTest, LaunchFail) {
termina_config::Config structured_config;
sys::testing::ComponentContextProvider provider;
ConfigResult config = fit::error(::fuchsia::virtualization::GuestManagerError::BAD_CONFIG);
TestTerminaGuestManager manager(
dispatcher(), provider.TakeContext(), std::move(structured_config), [] {}, std::move(config));
fuchsia::virtualization::LinuxManagerPtr linux_manager;
provider.ConnectToPublicService(linux_manager.NewRequest());
std::optional<fuchsia::virtualization::LinuxManager_StartAndGetLinuxGuestInfo_Result> guest_info;
linux_manager->StartAndGetLinuxGuestInfo(
"termina", [&guest_info](auto info) mutable { guest_info = std::move(info); });
RunLoopUntilIdle();
ASSERT_TRUE(guest_info.has_value());
ASSERT_TRUE(guest_info->is_response());
EXPECT_EQ(guest_info->response().info.container_status(),
fuchsia::virtualization::ContainerStatus::FAILED);
}
} // namespace
} // namespace termina_guest_manager