blob: 480cc09da8ecdbb20eb2c46377594c01388ff6d6 [file] [log] [blame]
// Copyright 2020 The Chromium 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 "chromeos/services/cellular_setup/esim_test_base.h"
#include <memory>
#include "chromeos/dbus/hermes/hermes_clients.h"
#include "chromeos/dbus/hermes/hermes_euicc_client.h"
#include "chromeos/dbus/hermes/hermes_manager_client.h"
#include "chromeos/dbus/shill/shill_clients.h"
#include "chromeos/dbus/shill/shill_manager_client.h"
#include "chromeos/network/cellular_connection_handler.h"
#include "chromeos/network/cellular_esim_uninstall_handler.h"
#include "chromeos/network/cellular_inhibitor.h"
#include "chromeos/network/fake_network_connection_handler.h"
#include "chromeos/network/network_configuration_handler.h"
#include "chromeos/network/network_device_handler.h"
#include "chromeos/network/network_state_handler.h"
#include "chromeos/network/test_cellular_esim_profile_handler.h"
#include "chromeos/services/cellular_setup/esim_manager.h"
#include "chromeos/services/cellular_setup/esim_test_utils.h"
#include "chromeos/services/cellular_setup/public/mojom/esim_manager.mojom-forward.h"
namespace chromeos {
namespace cellular_setup {
const char* ESimTestBase::kTestEuiccPath = "/org/chromium/Hermes/Euicc/0";
const char* ESimTestBase::kTestEid = "12345678901234567890123456789012";
ESimTestBase::ESimTestBase()
: task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
if (!ShillManagerClient::Get())
shill_clients::InitializeFakes();
if (!HermesManagerClient::Get())
hermes_clients::InitializeFakes();
}
ESimTestBase::~ESimTestBase() = default;
void ESimTestBase::SetUp() {
HermesManagerClient::Get()->GetTestInterface()->ClearEuiccs();
HermesEuiccClient::Get()->GetTestInterface()->SetInteractiveDelay(
base::TimeDelta::FromSeconds(0));
network_state_handler_ = NetworkStateHandler::InitializeForTest();
network_device_handler_ =
NetworkDeviceHandler::InitializeForTesting(network_state_handler_.get());
network_configuration_handler_ =
base::WrapUnique(NetworkConfigurationHandler::InitializeForTest(
network_state_handler_.get(), network_device_handler_.get()));
network_connection_handler_ =
std::make_unique<FakeNetworkConnectionHandler>();
cellular_inhibitor_ = std::make_unique<CellularInhibitor>();
cellular_inhibitor_->Init(network_state_handler_.get(),
network_device_handler_.get());
cellular_esim_profile_handler_ =
std::make_unique<TestCellularESimProfileHandler>();
cellular_esim_profile_handler_->Init(network_state_handler_.get(),
cellular_inhibitor_.get());
cellular_connection_handler_ = std::make_unique<CellularConnectionHandler>();
cellular_connection_handler_->Init(network_state_handler_.get(),
cellular_inhibitor_.get(),
cellular_esim_profile_handler_.get());
cellular_esim_uninstall_handler_ =
std::make_unique<CellularESimUninstallHandler>();
cellular_esim_uninstall_handler_->Init(
cellular_inhibitor_.get(), cellular_esim_profile_handler_.get(),
network_configuration_handler_.get(), network_connection_handler_.get(),
network_state_handler_.get());
esim_manager_ = std::make_unique<ESimManager>(
cellular_connection_handler_.get(), cellular_esim_profile_handler_.get(),
cellular_esim_uninstall_handler_.get(), cellular_inhibitor_.get(),
network_connection_handler_.get(), network_state_handler_.get());
observer_ = std::make_unique<ESimManagerTestObserver>();
esim_manager_->AddObserver(observer_->GenerateRemote());
}
void ESimTestBase::TearDown() {
esim_manager_.reset();
observer_.reset();
HermesEuiccClient::Get()->GetTestInterface()->ResetPendingEventsRequested();
}
void ESimTestBase::SetupEuicc() {
HermesManagerClient::Get()->GetTestInterface()->AddEuicc(
dbus::ObjectPath(kTestEuiccPath), kTestEid, /*is_active=*/true,
/*physical_slot=*/0);
base::RunLoop().RunUntilIdle();
}
std::vector<mojo::PendingRemote<mojom::Euicc>>
ESimTestBase::GetAvailableEuiccs() {
std::vector<mojo::PendingRemote<mojom::Euicc>> result;
base::RunLoop run_loop;
esim_manager()->GetAvailableEuiccs(base::BindOnce(
[](std::vector<mojo::PendingRemote<mojom::Euicc>>* result,
base::OnceClosure quit_closure,
std::vector<mojo::PendingRemote<mojom::Euicc>> available_euiccs) {
for (auto& euicc : available_euiccs)
result->push_back(std::move(euicc));
std::move(quit_closure).Run();
},
&result, run_loop.QuitClosure()));
run_loop.Run();
return result;
}
mojo::Remote<mojom::Euicc> ESimTestBase::GetEuiccForEid(
const std::string& eid) {
std::vector<mojo::PendingRemote<mojom::Euicc>> euicc_pending_remotes =
GetAvailableEuiccs();
for (auto& euicc_pending_remote : euicc_pending_remotes) {
mojo::Remote<mojom::Euicc> euicc(std::move(euicc_pending_remote));
mojom::EuiccPropertiesPtr euicc_properties = GetEuiccProperties(euicc);
if (euicc_properties->eid == eid) {
return euicc;
}
}
return mojo::Remote<mojom::Euicc>();
}
} // namespace cellular_setup
} // namespace chromeos