blob: 3e86d05328af60cc2df1ccb196d18aaa306f2f0c [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/telemetry_extension/diagnostics_service_ash.h"
#include <cstdint>
#include <memory>
#include <utility>
#include <vector>
#include "base/test/task_environment.h"
#include "base/test/test_future.h"
#include "base/values.h"
#include "chromeos/ash/components/mojo_service_manager/fake_mojo_service_manager.h"
#include "chromeos/ash/services/cros_healthd/public/cpp/fake_cros_healthd.h"
#include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_diagnostics.mojom.h"
#include "chromeos/crosapi/mojom/diagnostics_service.mojom.h"
#include "chromeos/crosapi/mojom/nullable_primitives.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace ash {
class DiagnosticsServiceAshTest : public testing::Test {
public:
// testing::Test:
void SetUp() override { cros_healthd::FakeCrosHealthd::Initialize(); }
void TearDown() override { cros_healthd::FakeCrosHealthd::Shutdown(); }
crosapi::mojom::DiagnosticsServiceProxy* diagnostics_service() {
return remote_diagnostics_service_.get();
}
protected:
void SetSuccessfulRoutineResponse() {
auto response = cros_healthd::mojom::RunRoutineResponse::New();
response->status = cros_healthd::mojom::DiagnosticRoutineStatusEnum::kReady;
response->id = 42;
cros_healthd::FakeCrosHealthd::Get()->SetRunRoutineResponseForTesting(
response);
}
void ValidateResponse(
const crosapi::mojom::DiagnosticsRunRoutineResponsePtr& result,
cros_healthd::mojom::DiagnosticRoutineEnum expected_routine) {
EXPECT_EQ(result->id, 42);
EXPECT_EQ(result->status,
crosapi::mojom::DiagnosticsRoutineStatusEnum::kReady);
EXPECT_EQ(cros_healthd::FakeCrosHealthd::Get()->GetLastRunRoutine(),
expected_routine);
}
private:
base::test::TaskEnvironment task_environment_;
::ash::mojo_service_manager::FakeMojoServiceManager fake_service_manager_;
mojo::Remote<crosapi::mojom::DiagnosticsService> remote_diagnostics_service_;
std::unique_ptr<crosapi::mojom::DiagnosticsService> diagnostics_service_{
DiagnosticsServiceAsh::Factory::Create(
remote_diagnostics_service_.BindNewPipeAndPassReceiver())};
};
TEST_F(DiagnosticsServiceAshTest, GetAvailableRoutinesSuccess) {
// Configure FakeCrosHealthd.
cros_healthd::FakeCrosHealthd::Get()->SetAvailableRoutinesForTesting({
cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCapacity,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCharge,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryDischarge,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth,
cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache,
cros_healthd::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy,
cros_healthd::mojom::DiagnosticRoutineEnum::kPrimeSearch,
cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress,
cros_healthd::mojom::DiagnosticRoutineEnum::kDiskRead,
cros_healthd::mojom::DiagnosticRoutineEnum::kDnsResolution,
cros_healthd::mojom::DiagnosticRoutineEnum::kDnsResolverPresent,
cros_healthd::mojom::DiagnosticRoutineEnum::kLanConnectivity,
cros_healthd::mojom::DiagnosticRoutineEnum::kMemory,
cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeWearLevel,
cros_healthd::mojom::DiagnosticRoutineEnum::kSignalStrength,
cros_healthd::mojom::DiagnosticRoutineEnum::kGatewayCanBePinged,
cros_healthd::mojom::DiagnosticRoutineEnum::kSmartctlCheck,
cros_healthd::mojom::DiagnosticRoutineEnum::kSensitiveSensor,
cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeSelfTest,
cros_healthd::mojom::DiagnosticRoutineEnum::kFingerprintAlive,
cros_healthd::mojom::DiagnosticRoutineEnum::
kSmartctlCheckWithPercentageUsed,
});
base::test::TestFuture<
const std::vector<crosapi::mojom::DiagnosticsRoutineEnum>&>
future;
diagnostics_service()->GetAvailableRoutines(future.GetCallback());
ASSERT_TRUE(future.Wait());
EXPECT_THAT(
future.Get(),
testing::ElementsAre(
crosapi::mojom::DiagnosticsRoutineEnum::kAcPower,
crosapi::mojom::DiagnosticsRoutineEnum::kBatteryCapacity,
crosapi::mojom::DiagnosticsRoutineEnum::kBatteryCharge,
crosapi::mojom::DiagnosticsRoutineEnum::kBatteryDischarge,
crosapi::mojom::DiagnosticsRoutineEnum::kBatteryHealth,
crosapi::mojom::DiagnosticsRoutineEnum::kCpuCache,
crosapi::mojom::DiagnosticsRoutineEnum::kFloatingPointAccuracy,
crosapi::mojom::DiagnosticsRoutineEnum::kPrimeSearch,
crosapi::mojom::DiagnosticsRoutineEnum::kCpuStress,
crosapi::mojom::DiagnosticsRoutineEnum::kDiskRead,
crosapi::mojom::DiagnosticsRoutineEnum::kDnsResolution,
crosapi::mojom::DiagnosticsRoutineEnum::kDnsResolverPresent,
crosapi::mojom::DiagnosticsRoutineEnum::kLanConnectivity,
crosapi::mojom::DiagnosticsRoutineEnum::kMemory,
crosapi::mojom::DiagnosticsRoutineEnum::kNvmeWearLevel,
crosapi::mojom::DiagnosticsRoutineEnum::kSignalStrength,
crosapi::mojom::DiagnosticsRoutineEnum::kGatewayCanBePinged,
crosapi::mojom::DiagnosticsRoutineEnum::kSmartctlCheck,
crosapi::mojom::DiagnosticsRoutineEnum::kSensitiveSensor,
crosapi::mojom::DiagnosticsRoutineEnum::kNvmeSelfTest,
crosapi::mojom::DiagnosticsRoutineEnum::kFingerprintAlive,
crosapi::mojom::DiagnosticsRoutineEnum::
kSmartctlCheckWithPercentageUsed));
}
TEST_F(DiagnosticsServiceAshTest, GetRoutineUpdateSuccess) {
constexpr char kStatusMessage[] = "Routine ran by Google.";
constexpr uint32_t kProgress = 87;
// Configure FakeCrosHealthd.
{
auto non_interactive_routine_update =
cros_healthd::mojom::NonInteractiveRoutineUpdate::New();
non_interactive_routine_update->status =
cros_healthd::mojom::DiagnosticRoutineStatusEnum::kReady;
non_interactive_routine_update->status_message = kStatusMessage;
auto routine_update_union =
cros_healthd::mojom::RoutineUpdateUnion::NewNoninteractiveUpdate(
std::move(non_interactive_routine_update));
auto response = cros_healthd::mojom::RoutineUpdate::New();
response->progress_percent = kProgress;
response->routine_update_union = std::move(routine_update_union);
cros_healthd::FakeCrosHealthd::Get()->SetGetRoutineUpdateResponseForTesting(
response);
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("id", 123456);
expected_passed_parameters.Set(
"command",
static_cast<int32_t>(
crosapi::mojom::DiagnosticsRoutineCommandEnum::kGetStatus));
expected_passed_parameters.Set("include_output", true);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
}
base::test::TestFuture<crosapi::mojom::DiagnosticsRoutineUpdatePtr> future;
diagnostics_service()->GetRoutineUpdate(
123456, crosapi::mojom::DiagnosticsRoutineCommandEnum::kGetStatus, true,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
EXPECT_EQ(result->progress_percent, kProgress);
ASSERT_TRUE(result->routine_update_union);
ASSERT_TRUE(result->routine_update_union->is_noninteractive_update());
const auto& update_result =
result->routine_update_union->get_noninteractive_update();
EXPECT_EQ(update_result->status_message, kStatusMessage);
EXPECT_EQ(update_result->status,
crosapi::mojom::DiagnosticsRoutineStatusEnum::kReady);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunAcPowerRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set(
"expected_status",
static_cast<int32_t>(
crosapi::mojom::DiagnosticsAcPowerStatusEnum::kConnected));
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunAcPowerRoutine(
crosapi::mojom::DiagnosticsAcPowerStatusEnum::kConnected, absl::nullopt,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunBatteryCapacityRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunBatteryCapacityRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCapacity);
}
TEST_F(DiagnosticsServiceAshTest, RunBatteryChargeRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("length_seconds", 423);
expected_passed_parameters.Set("minimum_charge_percent_required", 123);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunBatteryChargeRoutine(423, 123,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCharge);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunBatteryDischargeRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("length_seconds", 423);
expected_passed_parameters.Set("maximum_discharge_percent_allowed", 123);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunBatteryDischargeRoutine(423, 123,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryDischarge);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunBatteryHealthRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunBatteryHealthRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth);
}
TEST_F(DiagnosticsServiceAshTest, RunCpuCacheRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("length_seconds", 100);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunCpuCacheRoutine(100, future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunCpuStressRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("length_seconds", 100);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunCpuStressRoutine(100, future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunDiskReadRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set(
"type",
static_cast<int32_t>(
crosapi::mojom::DiagnosticsDiskReadRoutineTypeEnum::kLinearRead));
expected_passed_parameters.Set("length_seconds", 100);
expected_passed_parameters.Set("file_size_mb", 32);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunDiskReadRoutine(
crosapi::mojom::DiagnosticsDiskReadRoutineTypeEnum::kLinearRead, 100, 32,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kDiskRead);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunDnsResolutionRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunDnsResolutionRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kDnsResolution);
}
TEST_F(DiagnosticsServiceAshTest, RunDnsResolverPresentRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunDnsResolverPresentRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kDnsResolverPresent);
}
TEST_F(DiagnosticsServiceAshTest, RunEmmcLifetimeRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunEmmcLifetimeRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kEmmcLifetime);
}
TEST_F(DiagnosticsServiceAshTest, RunFingerprintAliveRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunFingerprintAliveRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kFingerprintAlive);
}
TEST_F(DiagnosticsServiceAshTest, RunFloatingPointAccuracyRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunFloatingPointAccuracyRoutine(100,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result,
cros_healthd::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy);
}
TEST_F(DiagnosticsServiceAshTest, RunGatewayCanBePingedRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunGatewayCanBePingedRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kGatewayCanBePinged);
}
TEST_F(DiagnosticsServiceAshTest, RunLanConnectivityRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunLanConnectivityRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kLanConnectivity);
}
TEST_F(DiagnosticsServiceAshTest, RunMemoryRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunMemoryRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result, cros_healthd::mojom::DiagnosticRoutineEnum::kMemory);
}
TEST_F(DiagnosticsServiceAshTest, RunNvmeSelfTestRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set(
"nvme_self_test_type",
static_cast<int32_t>(
crosapi::mojom::DiagnosticsNvmeSelfTestTypeEnum::kLongSelfTest));
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunNvmeSelfTestRoutine(
crosapi::mojom::DiagnosticsNvmeSelfTestTypeEnum::kLongSelfTest,
future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeSelfTest);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunNvmeWearLevelRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("wear_level_threshold", 80);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunNvmeWearLevelRoutine(80, future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeWearLevel);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunPrimeSearchRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("length_seconds", 100);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunPrimeSearchRoutine(100, future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kPrimeSearch);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
TEST_F(DiagnosticsServiceAshTest, RunSensitiveSensorRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunSensitiveSensorRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(
result, cros_healthd::mojom::DiagnosticRoutineEnum::kSensitiveSensor);
}
TEST_F(DiagnosticsServiceAshTest, RunSignalStrengthRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunSignalStrengthRoutine(future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result,
cros_healthd::mojom::DiagnosticRoutineEnum::kSignalStrength);
}
TEST_F(DiagnosticsServiceAshTest, RunSmartctlCheckRoutineSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunSmartctlCheckRoutine(nullptr, future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result, cros_healthd::mojom::DiagnosticRoutineEnum::
kSmartctlCheckWithPercentageUsed);
}
TEST_F(DiagnosticsServiceAshTest, RunSmartctlCheckRoutineWithParameterSuccess) {
// Configure FakeCrosHealthd.
SetSuccessfulRoutineResponse();
base::Value::Dict expected_passed_parameters;
expected_passed_parameters.Set("percentage_used_threshold", 42);
cros_healthd::FakeCrosHealthd::Get()
->SetExpectedLastPassedDiagnosticsParametersForTesting(
std::move(expected_passed_parameters));
base::test::TestFuture<crosapi::mojom::DiagnosticsRunRoutineResponsePtr>
future;
diagnostics_service()->RunSmartctlCheckRoutine(
crosapi::mojom::UInt32Value::New(42), future.GetCallback());
ASSERT_TRUE(future.Wait());
const auto& result = future.Get();
ValidateResponse(result, cros_healthd::mojom::DiagnosticRoutineEnum::
kSmartctlCheckWithPercentageUsed);
EXPECT_TRUE(cros_healthd::FakeCrosHealthd::Get()
->DidExpectedDiagnosticsParametersMatch());
}
} // namespace ash