blob: 31034bf2888a4b4aba9ff5a1aac7558838deebe6 [file] [log] [blame]
// Copyright 2019 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 <fuchsia/devicesettings/cpp/fidl.h>
#include <fuchsia/identity/account/cpp/fidl.h>
#include <fuchsia/modular/testing/cpp/fidl.h>
#include <fuchsia/setui/cpp/fidl.h>
#include <fuchsia/stash/cpp/fidl.h>
#include <lib/modular/testing/cpp/test_harness_builder.h>
#include "src/modular/lib/modular_test_harness/cpp/test_harness_fixture.h"
class LoginOverrideTest : public modular_testing::TestHarnessFixture {
public:
LoginOverrideTest() {}
// Setting LoginOverride to AUTH_PROVIDER should launch the single user
// base shell.
void SetLoginOverride(fuchsia::setui::LoginOverride login_override,
modular_testing::TestHarnessBuilder* builder) {
fuchsia::setui::AccountMutation account_mutation;
account_mutation.set_operation(fuchsia::setui::AccountOperation::SET_LOGIN_OVERRIDE);
account_mutation.set_login_override(login_override);
fuchsia::setui::Mutation mutation;
mutation.set_account_mutation_value(std::move(account_mutation));
builder->BuildAndRun(test_harness());
test_harness()->ConnectToEnvironmentService(fuchsia::setui::SetUiService::Name_,
setui_.NewRequest().TakeChannel());
setui_->Mutate(fuchsia::setui::SettingType::ACCOUNT, std::move(mutation),
[](fuchsia::setui::MutationResponse response) {});
}
private:
fuchsia::setui::SetUiServicePtr setui_;
};
TEST_F(LoginOverrideTest, AuthProviderOverrideLaunchesBaseShell) {
constexpr char kBaseShellUrl[] =
"fuchsia-pkg://fuchsia.com/dev_base_shell#meta/"
"dev_base_shell.cmx";
modular_testing::TestHarnessBuilder builder;
builder.AddServiceFromComponent<fuchsia::setui::SetUiService>(
"fuchsia-pkg://fuchsia.com/setui_service#meta/setui_service.cmx");
builder.AddServiceFromComponent<fuchsia::identity::account::AccountManager>(
"fuchsia-pkg://fuchsia.com/account_manager#meta/account_manager.cmx");
builder.AddServiceFromComponent<fuchsia::devicesettings::DeviceSettingsManager>(
"fuchsia-pkg://fuchsia.com/device_settings_manager#meta/"
"device_settings_manager.cmx");
builder.AddServiceFromComponent<fuchsia::stash::Store>(
"fuchsia-pkg://fuchsia.com/stash#meta/"
"stash.cmx");
bool intercepted = false;
builder.InterceptBaseShell(modular_testing::TestHarnessBuilder::InterceptOptions{
.url = kBaseShellUrl,
.launch_handler =
[&](fuchsia::sys::StartupInfo startup_info,
fidl::InterfaceHandle<fuchsia::modular::testing::InterceptedComponent> component) {
intercepted = true;
}});
// Setting AUTH_PROVIDER should launch the configured base shell.
SetLoginOverride(fuchsia::setui::LoginOverride::AUTH_PROVIDER, &builder);
RunLoopUntil([&] { return intercepted; });
}
// Setting LoginOverride to AUTOLOGIN_GUEST should skip the base shell and
// launch the session shell.
// Test is DISABLED. see fxb/37780
TEST_F(LoginOverrideTest, DISABLED_AutoLoginGuestOverrideSkipsBaseShell) {
modular_testing::TestHarnessBuilder builder;
builder.AddServiceFromComponent<fuchsia::setui::SetUiService>(
"fuchsia-pkg://fuchsia.com/setui_service#meta/setui_service.cmx");
builder.AddServiceFromComponent<fuchsia::identity::account::AccountManager>(
"fuchsia-pkg://fuchsia.com/account_manager#meta/account_manager.cmx");
builder.AddServiceFromComponent<fuchsia::devicesettings::DeviceSettingsManager>(
"fuchsia-pkg://fuchsia.com/device_settings_manager#meta/"
"device_settings_manager.cmx");
builder.AddServiceFromComponent<fuchsia::stash::Store>(
"fuchsia-pkg://fuchsia.com/stash#meta/"
"stash.cmx");
// Base shell should never be launched, so |intercepted_base_shell| should
// remain false when the session shell launches.
bool intercepted_base_shell = false;
builder.InterceptBaseShell(
{.url = modular_testing::TestHarnessBuilder::GenerateFakeUrl(),
.launch_handler =
[&](fuchsia::sys::StartupInfo startup_info,
fidl::InterfaceHandle<fuchsia::modular::testing::InterceptedComponent> component) {
intercepted_base_shell = true;
}});
bool intercepted_session_shell = false;
builder.InterceptSessionShell(
{.url = modular_testing::TestHarnessBuilder::GenerateFakeUrl(),
.launch_handler =
[&](fuchsia::sys::StartupInfo startup_info,
fidl::InterfaceHandle<fuchsia::modular::testing::InterceptedComponent> component) {
intercepted_session_shell = true;
}});
SetLoginOverride(fuchsia::setui::LoginOverride::AUTOLOGIN_GUEST, &builder);
RunLoopUntil([&] { return intercepted_session_shell; });
EXPECT_FALSE(intercepted_base_shell);
}