| // Copyright 2024 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "runtime_probe/functions/tpm.h" | |
| #include <utility> | |
| #include <base/check.h> | |
| #include <gtest/gtest.h> | |
| #include <mojo/core/embedder/embedder.h> | |
| #include <mojo/public/cpp/bindings/receiver.h> | |
| #include <diagnostics/mojom/public/cros_healthd.mojom.h> | |
| #include <diagnostics/mojom/public/cros_healthd_probe.mojom.h> | |
| #include "runtime_probe/utils/function_test_utils.h" | |
| #include "runtime_probe/utils/mojo_test_utils.h" | |
| namespace runtime_probe { | |
| class TpmTest : public BaseFunctionTest { | |
| public: | |
| void SetUp() override { | |
| mock_context()->SetCrosHealthdProbeService(&fake_service_); | |
| } | |
| protected: | |
| FakeCrosHealthdProbeService fake_service_; | |
| }; | |
| TEST_F(TpmTest, Suceed) { | |
| auto probe_function = CreateProbeFunction<TpmFunction>(); | |
| auto tpm_info = cros_healthd_mojom::TpmInfo::New(); | |
| tpm_info->version = cros_healthd_mojom::TpmVersion::New(); | |
| tpm_info->version->spec_level = 162; | |
| tpm_info->version->manufacturer = 0x43524f53; | |
| tpm_info->version->vendor_specific = "xCG fTPM"; | |
| auto tpm_result = | |
| cros_healthd_mojom::TpmResult::NewTpmInfo(std::move(tpm_info)); | |
| fake_service_.SetTpmResult(std::move(tpm_result)); | |
| auto ans = CreateProbeResultFromJson(R"JSON( | |
| [ | |
| { | |
| "manufacturer": "0x43524f53", | |
| "spec_level": "162", | |
| "vendor_specific": "xCG fTPM" | |
| } | |
| ] | |
| )JSON"); | |
| EXPECT_EQ(EvalProbeFunction(probe_function.get()), ans); | |
| } | |
| TEST_F(TpmTest, UnknownVendor) { | |
| auto probe_function = CreateProbeFunction<TpmFunction>(); | |
| auto tpm_info = cros_healthd_mojom::TpmInfo::New(); | |
| tpm_info->version = cros_healthd_mojom::TpmVersion::New(); | |
| auto tpm_result = | |
| cros_healthd_mojom::TpmResult::NewTpmInfo(std::move(tpm_info)); | |
| fake_service_.SetTpmResult(std::move(tpm_result)); | |
| auto ans = CreateProbeResultFromJson(R"JSON( | |
| [ | |
| { | |
| "manufacturer": "0x0", | |
| "spec_level": "0", | |
| "vendor_specific": "unknown" | |
| } | |
| ] | |
| )JSON"); | |
| EXPECT_EQ(EvalProbeFunction(probe_function.get()), ans); | |
| } | |
| TEST_F(TpmTest, Tpm2Simulator) { | |
| auto probe_function = CreateProbeFunction<TpmFunction>(); | |
| auto tpm_info = cros_healthd_mojom::TpmInfo::New(); | |
| tpm_info->version = cros_healthd_mojom::TpmVersion::New(); | |
| tpm_info->version->manufacturer = 0x53494d55; | |
| auto tpm_result = | |
| cros_healthd_mojom::TpmResult::NewTpmInfo(std::move(tpm_info)); | |
| fake_service_.SetTpmResult(std::move(tpm_result)); | |
| auto ans = CreateProbeResultFromJson(R"JSON( | |
| [] | |
| )JSON"); | |
| EXPECT_EQ(EvalProbeFunction(probe_function.get()), ans); | |
| } | |
| TEST_F(TpmTest, ProbeError) { | |
| auto probe_function = CreateProbeFunction<TpmFunction>(); | |
| auto tpm_result = cros_healthd_mojom::TpmResult::NewError( | |
| cros_healthd_mojom::ProbeError::New()); | |
| fake_service_.SetTpmResult(std::move(tpm_result)); | |
| auto ans = CreateProbeResultFromJson(R"JSON( | |
| [] | |
| )JSON"); | |
| EXPECT_EQ(EvalProbeFunction(probe_function.get()), ans); | |
| } | |
| } // namespace runtime_probe |