-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CHERRY-PICK] SecurityPkg: Add gmock example
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4389 Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Signed-off-by: Chris Johnson <chris.n.johnson@intel.com> Acked-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Oliver Smith-Denny <osde@linux.microsoft.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> (cherry picked from commit 0657e74)
- Loading branch information
1 parent
ceac29a
commit 3d87cbc
Showing
11 changed files
with
295 additions
and
7 deletions.
There are no files selected for viewing
174 changes: 174 additions & 0 deletions
174
SecurityPkg/Library/SecureBootVariableLib/GoogleTest/SecureBootVariableLibGoogleTest.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
/** @file | ||
Unit tests for the implementation of SecureBootVariableLib. | ||
Copyright (c) 2022, Intel Corporation. All rights reserved. | ||
SPDX-License-Identifier: BSD-2-Clause-Patent | ||
**/ | ||
#include <Library/GoogleTestLib.h> | ||
#include <GoogleTest/Library/MockUefiLib.h> | ||
#include <GoogleTest/Library/MockUefiRuntimeServicesTableLib.h> | ||
|
||
extern "C" { | ||
#include <Uefi.h> | ||
#include <UefiSecureBoot.h> | ||
#include <Guid/AuthenticatedVariableFormat.h> | ||
#include <Guid/ImageAuthentication.h> | ||
#include <Library/SecureBootVariableLib.h> | ||
#include <Library/MemoryAllocationLib.h> | ||
} | ||
|
||
using namespace testing; | ||
|
||
////////////////////////////////////////////////////////////////////////////// | ||
class SetSecureBootModeTest : public Test { | ||
protected: | ||
MockUefiRuntimeServicesTableLib RtServicesMock; | ||
UINT8 SecureBootMode; | ||
EFI_STATUS Status; | ||
|
||
void SetUp() override { | ||
// Any random magic number can be used for these tests | ||
SecureBootMode = 0xAB; | ||
} | ||
}; | ||
|
||
// Test SetSecureBootMode() API from SecureBootVariableLib to verify the | ||
// expected error is returned when the call to gRT->SetVariable() fails. | ||
TEST_F(SetSecureBootModeTest, SetVarError) { | ||
EXPECT_CALL(RtServicesMock, gRT_SetVariable) | ||
.WillOnce(Return(EFI_INVALID_PARAMETER)); | ||
|
||
Status = SetSecureBootMode(SecureBootMode); | ||
EXPECT_EQ(Status, EFI_INVALID_PARAMETER); | ||
} | ||
|
||
// Test SetSecureBootMode() API from SecureBootVariableLib to verify the | ||
// expected secure boot mode is written to the correct variable in the call | ||
// to gRT->SetVariable(). | ||
TEST_F(SetSecureBootModeTest, PropogateModeToSetVar) { | ||
EXPECT_CALL(RtServicesMock, | ||
gRT_SetVariable( | ||
Char16StrEq(EFI_CUSTOM_MODE_NAME), | ||
BufferEq(&gEfiCustomModeEnableGuid, sizeof(EFI_GUID)), | ||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, | ||
sizeof(SecureBootMode), | ||
BufferEq(&SecureBootMode, sizeof(SecureBootMode)))) | ||
.WillOnce(Return(EFI_SUCCESS)); | ||
|
||
Status = SetSecureBootMode(SecureBootMode); | ||
EXPECT_EQ(Status, EFI_SUCCESS); | ||
} | ||
|
||
////////////////////////////////////////////////////////////////////////////// | ||
class GetSetupModeTest : public Test { | ||
protected: | ||
MockUefiRuntimeServicesTableLib RtServicesMock; | ||
UINT8 SetupMode; | ||
EFI_STATUS Status; | ||
UINT8 ExpSetupMode; | ||
|
||
void SetUp() override { | ||
// Any random magic number can be used for these tests | ||
ExpSetupMode = 0xAB; | ||
} | ||
}; | ||
|
||
// Test GetSetupMode() API from SecureBootVariableLib to verify the expected | ||
// error is returned when the call to gRT->GetVariable() fails. | ||
TEST_F(GetSetupModeTest, GetVarError) { | ||
EXPECT_CALL(RtServicesMock, gRT_GetVariable) | ||
.WillOnce(Return(EFI_INVALID_PARAMETER)); | ||
|
||
Status = GetSetupMode (&SetupMode); | ||
EXPECT_EQ(Status, EFI_INVALID_PARAMETER); | ||
} | ||
|
||
// Test GetSetupMode() API from SecureBootVariableLib to verify the expected | ||
// setup mode is returned (and with a success return code) when the mode is | ||
// successfully read from the call to gRT->GetVariable(). | ||
TEST_F(GetSetupModeTest, FetchModeFromGetVar) { | ||
EXPECT_CALL(RtServicesMock, | ||
gRT_GetVariable( | ||
Char16StrEq(EFI_SETUP_MODE_NAME), | ||
BufferEq(&gEfiGlobalVariableGuid, sizeof(EFI_GUID)), | ||
_, | ||
Pointee(Eq(sizeof(SetupMode))), | ||
NotNull())) | ||
.WillOnce(DoAll( | ||
SetArgPointee<3>(sizeof(ExpSetupMode)), | ||
SetArgBuffer<4>(&ExpSetupMode, sizeof(ExpSetupMode)), | ||
Return(EFI_SUCCESS))); | ||
|
||
Status = GetSetupMode (&SetupMode); | ||
ASSERT_EQ(Status, EFI_SUCCESS); | ||
EXPECT_EQ(SetupMode, ExpSetupMode); | ||
} | ||
|
||
////////////////////////////////////////////////////////////////////////////// | ||
class IsSecureBootEnabledTest : public Test { | ||
protected: | ||
MockUefiLib UefiLibMock; | ||
BOOLEAN Enabled; | ||
}; | ||
|
||
// Test IsSecureBootEnabled() API from SecureBootVariableLib to verify FALSE | ||
// is returned when the call to GetEfiGlobalVariable2() fails. | ||
TEST_F(IsSecureBootEnabledTest, GetVarError) { | ||
EXPECT_CALL(UefiLibMock, GetEfiGlobalVariable2) | ||
.WillOnce(Return(EFI_ABORTED)); | ||
|
||
Enabled = IsSecureBootEnabled (); | ||
EXPECT_EQ(Enabled, FALSE); | ||
} | ||
|
||
////////////////////////////////////////////////////////////////////////////// | ||
class IsSecureBootEnabledAllocTest : public IsSecureBootEnabledTest { | ||
protected: | ||
UINT8 *BootEnabledBuffer; | ||
|
||
void SetUp() override { | ||
BootEnabledBuffer = (UINT8*) AllocatePool(1); | ||
ASSERT_NE(BootEnabledBuffer, nullptr); | ||
} | ||
}; | ||
|
||
// Test IsSecureBootEnabled() API from SecureBootVariableLib to verify TRUE | ||
// is returned when the call to GetEfiGlobalVariable2() is successful and | ||
// returns SECURE_BOOT_MODE_ENABLE. | ||
TEST_F(IsSecureBootEnabledAllocTest, IsEnabled) { | ||
*BootEnabledBuffer = SECURE_BOOT_MODE_ENABLE; | ||
EXPECT_CALL(UefiLibMock, | ||
GetEfiGlobalVariable2( | ||
Char16StrEq(EFI_SECURE_BOOT_MODE_NAME), | ||
NotNull(), | ||
_)) | ||
.WillOnce(DoAll( | ||
SetArgBuffer<1>(&BootEnabledBuffer, sizeof(VOID*)), | ||
Return(EFI_SUCCESS))); | ||
|
||
Enabled = IsSecureBootEnabled (); | ||
EXPECT_EQ(Enabled, TRUE); | ||
} | ||
|
||
// Test IsSecureBootEnabled() API from SecureBootVariableLib to verify FALSE | ||
// is returned when the call to GetEfiGlobalVariable2() is successful and | ||
// returns SECURE_BOOT_MODE_DISABLE. | ||
TEST_F(IsSecureBootEnabledAllocTest, IsDisabled) { | ||
*BootEnabledBuffer = SECURE_BOOT_MODE_DISABLE; | ||
EXPECT_CALL(UefiLibMock, | ||
GetEfiGlobalVariable2( | ||
Char16StrEq(EFI_SECURE_BOOT_MODE_NAME), | ||
NotNull(), | ||
_)) | ||
.WillOnce(DoAll( | ||
SetArgBuffer<1>(&BootEnabledBuffer, sizeof(VOID*)), | ||
Return(EFI_SUCCESS))); | ||
|
||
Enabled = IsSecureBootEnabled (); | ||
EXPECT_EQ(Enabled, FALSE); | ||
} | ||
|
||
int main(int argc, char* argv[]) { | ||
testing::InitGoogleTest(&argc, argv); | ||
return RUN_ALL_TESTS(); | ||
} |
32 changes: 32 additions & 0 deletions
32
SecurityPkg/Library/SecureBootVariableLib/GoogleTest/SecureBootVariableLibGoogleTest.inf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
## @file | ||
# Unit test suite for the SecureBootVariableLib using Google Test | ||
# | ||
# Copyright (c) 2022, Intel Corporation. All rights reserved. | ||
# SPDX-License-Identifier: BSD-2-Clause-Patent | ||
## | ||
|
||
[Defines] | ||
INF_VERSION = 0x00010017 | ||
BASE_NAME = SecureBootVariableLibGoogleTest | ||
FILE_GUID = C88372AB-726B-4344-A250-6C7F826C874E | ||
VERSION_STRING = 1.0 | ||
MODULE_TYPE = HOST_APPLICATION | ||
|
||
# | ||
# The following information is for reference only and not required by the build tools. | ||
# | ||
# VALID_ARCHITECTURES = IA32 X64 | ||
# | ||
|
||
[Sources] | ||
SecureBootVariableLibGoogleTest.cpp | ||
|
||
[Packages] | ||
MdePkg/MdePkg.dec | ||
MdeModulePkg/MdeModulePkg.dec | ||
SecurityPkg/SecurityPkg.dec | ||
UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec | ||
|
||
[LibraryClasses] | ||
GoogleTestLib | ||
SecureBootVariableLib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
SecurityPkg/Test/Mock/Include/GoogleTest/Library/MockPlatformPKProtectionLib.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/** @file | ||
Google Test mocks for PlatformPKProtectionLib | ||
Copyright (c) 2022, Intel Corporation. All rights reserved. | ||
SPDX-License-Identifier: BSD-2-Clause-Patent | ||
**/ | ||
|
||
#ifndef MOCK_PLATFORM_PK_PROTECTION_LIB_H_ | ||
#define MOCK_PLATFORM_PK_PROTECTION_LIB_H_ | ||
|
||
#include <Library/GoogleTestLib.h> | ||
#include <Library/FunctionMockLib.h> | ||
extern "C" { | ||
#include <Uefi.h> | ||
#include <Library/PlatformPKProtectionLib.h> | ||
} | ||
|
||
struct MockPlatformPKProtectionLib { | ||
MOCK_INTERFACE_DECLARATION (MockPlatformPKProtectionLib); | ||
|
||
MOCK_FUNCTION_DECLARATION ( | ||
EFI_STATUS, | ||
DisablePKProtection, | ||
() | ||
); | ||
}; | ||
|
||
#endif |
11 changes: 11 additions & 0 deletions
11
.../Test/Mock/Library/GoogleTest/MockPlatformPKProtectionLib/MockPlatformPKProtectionLib.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
/** @file | ||
Google Test mocks for PlatformPKProtectionLib | ||
Copyright (c) 2022, Intel Corporation. All rights reserved. | ||
SPDX-License-Identifier: BSD-2-Clause-Patent | ||
**/ | ||
#include <GoogleTest/Library/MockPlatformPKProtectionLib.h> | ||
|
||
MOCK_INTERFACE_DEFINITION(MockPlatformPKProtectionLib); | ||
|
||
MOCK_FUNCTION_DEFINITION(MockPlatformPKProtectionLib, DisablePKProtection, 0, EFIAPI); |
34 changes: 34 additions & 0 deletions
34
.../Test/Mock/Library/GoogleTest/MockPlatformPKProtectionLib/MockPlatformPKProtectionLib.inf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
## @file | ||
# Google Test mocks for PlatformPKProtectionLib | ||
# | ||
# Copyright (c) 2022, Intel Corporation. All rights reserved. | ||
# SPDX-License-Identifier: BSD-2-Clause-Patent | ||
## | ||
|
||
[Defines] | ||
INF_VERSION = 0x00010005 | ||
BASE_NAME = MockPlatformPKProtectionLib | ||
FILE_GUID = C1383D85-E0ED-44E0-A0A6-125F1D78B6E9 | ||
MODULE_TYPE = HOST_APPLICATION | ||
VERSION_STRING = 1.0 | ||
LIBRARY_CLASS = PlatformPKProtectionLib | ||
|
||
# | ||
# The following information is for reference only and not required by the build tools. | ||
# | ||
# VALID_ARCHITECTURES = IA32 X64 | ||
# | ||
|
||
[Sources] | ||
MockPlatformPKProtectionLib.cpp | ||
|
||
[Packages] | ||
MdePkg/MdePkg.dec | ||
SecurityPkg/SecurityPkg.dec | ||
UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec | ||
|
||
[LibraryClasses] | ||
GoogleTestLib | ||
|
||
[BuildOptions] | ||
MSFT:*_*_*_CC_FLAGS = /EHsc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters