| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include <gmock/gmock.h> | |
| #include <gtest/gtest.h> | |
| #include <optional> | |
| #include "libcrossystem/crossystem.h" | |
| #include "libcrossystem/crossystem_fake.h" | |
| namespace crossystem { | |
| namespace { | |
| using ::testing::Return; | |
| constexpr char kCheckFailedRegex[] = "Check failed.*"; | |
| class CrossystemTest : public ::testing::Test { | |
| protected: | |
| void SetUp() override { | |
| auto fake = std::make_unique<fake::CrossystemFake>(); | |
| fake_ = fake.get(); | |
| crossystem_ = std::make_unique<Crossystem>(std::move(fake)); | |
| } | |
| std::unique_ptr<Crossystem> crossystem_; | |
| fake::CrossystemFake* fake_; | |
| }; | |
| TEST_F(CrossystemTest, GetBooleanPropertyTrue) { | |
| fake_->VbSetSystemPropertyInt("fake", 1); | |
| EXPECT_EQ(crossystem_->GetSystemPropertyBool("fake"), | |
| std::make_optional(true)); | |
| } | |
| TEST_F(CrossystemTest, GetBooleanPropertyFalse) { | |
| fake_->VbSetSystemPropertyInt("fake", 0); | |
| EXPECT_EQ(crossystem_->GetSystemPropertyBool("fake"), | |
| std::make_optional(false)); | |
| } | |
| TEST_F(CrossystemTest, GetBooleanPropertyDoesNotExist) { | |
| EXPECT_EQ(crossystem_->GetSystemPropertyBool("fake"), std::nullopt); | |
| } | |
| TEST_F(CrossystemTest, GetBooleanPropertyNegative) { | |
| fake_->VbSetSystemPropertyInt("fake", -1); | |
| EXPECT_DEATH(crossystem_->GetSystemPropertyBool("fake"), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, SetBooleanPropertyTrueSucceeds) { | |
| EXPECT_TRUE(crossystem_->SetSystemPropertyBool("fake", true)); | |
| EXPECT_EQ(fake_->VbGetSystemPropertyInt("fake"), 1); | |
| } | |
| TEST_F(CrossystemTest, SetBooleanPropertyTrueFails) { | |
| fake_->SetSystemPropertyReadOnlyStatus("fake", true); | |
| EXPECT_FALSE(crossystem_->SetSystemPropertyBool("fake", true)); | |
| } | |
| TEST_F(CrossystemTest, SetBooleanPropertyFalseSucceeds) { | |
| EXPECT_TRUE(crossystem_->SetSystemPropertyBool("fake", false)); | |
| EXPECT_EQ(fake_->VbGetSystemPropertyInt("fake"), 0); | |
| } | |
| TEST_F(CrossystemTest, SetBooleanPropertyFalseFails) { | |
| fake_->SetSystemPropertyReadOnlyStatus("fake", true); | |
| EXPECT_FALSE(crossystem_->SetSystemPropertyBool("fake", false)); | |
| } | |
| TEST_F(CrossystemTest, IsHardwareWriteProtectEnabledTrue) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kHardwareWriteProtect, 1); | |
| EXPECT_TRUE(crossystem_->HardwareWriteProtectIsEnabled()); | |
| } | |
| TEST_F(CrossystemTest, IsHardwareWriteProtectEnabledFalse) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kHardwareWriteProtect, 0); | |
| EXPECT_FALSE(crossystem_->HardwareWriteProtectIsEnabled()); | |
| } | |
| TEST_F(CrossystemTest, IsHardwareWriteProtectEnabledNotBoolean) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kHardwareWriteProtect, -1); | |
| EXPECT_DEATH(crossystem_->HardwareWriteProtectIsEnabled(), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, IsHardwareWriteProtectEnabledPropertyDoesNotExist) { | |
| EXPECT_DEATH(crossystem_->HardwareWriteProtectIsEnabled(), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, GetHardwareID) { | |
| fake_->VbSetSystemPropertyString(Crossystem::kHardwareId, "abc123"); | |
| EXPECT_EQ(crossystem_->GetHardwareID(), "abc123"); | |
| } | |
| TEST_F(CrossystemTest, GetHardwareIDNotSet) { | |
| EXPECT_DEATH(crossystem_->GetHardwareID(), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, OnlyBootSignedKernelTrue) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kDevBootSignedOnly, 1); | |
| EXPECT_TRUE(crossystem_->OnlyBootSignedKernel()); | |
| } | |
| TEST_F(CrossystemTest, OnlyBootSignedKernelFalse) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kDevBootSignedOnly, 0); | |
| EXPECT_FALSE(crossystem_->OnlyBootSignedKernel()); | |
| } | |
| TEST_F(CrossystemTest, OnlyBootSignedKernelNotBoolean) { | |
| fake_->VbSetSystemPropertyInt(Crossystem::kDevBootSignedOnly, -1); | |
| EXPECT_DEATH(crossystem_->OnlyBootSignedKernel(), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, OnlyBootSignedKernelPropertyDoesNotExist) { | |
| EXPECT_DEATH(crossystem_->OnlyBootSignedKernel(), kCheckFailedRegex); | |
| } | |
| TEST_F(CrossystemTest, GetMiniOsPriority) { | |
| const std::string kPriorityValue{"abc123"}; | |
| fake_->VbSetSystemPropertyString(Crossystem::kMiniosPriorityProperty, | |
| kPriorityValue); | |
| EXPECT_THAT(crossystem_->GetMiniOsPriority(), | |
| testing::Optional(kPriorityValue)); | |
| } | |
| TEST_F(CrossystemTest, GetMiniOsPriorityNotSet) { | |
| EXPECT_EQ(crossystem_->GetMiniOsPriority(), std::nullopt); | |
| } | |
| } // namespace | |
| } // namespace crossystem |