From 1bb79b6817adea53cd33e7ec7e5c652b346f964b Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Wed, 11 Sep 2024 14:16:22 -0700 Subject: [PATCH] AdvLoggerPkg: Add AdvancedLoggerMmCoreGoogleTest --- .../AdvancedLoggerMmCoreGoogleTest.cpp | 175 ++++++++++++++++++ .../AdvancedLoggerMmCoreGoogleTest.inf | 53 ++++++ AdvLoggerPkg/Test/AdvLoggerHostTest.dsc | 11 +- 3 files changed, 230 insertions(+), 9 deletions(-) create mode 100644 AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.cpp create mode 100644 AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.inf diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.cpp b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.cpp new file mode 100644 index 0000000000..30785f347b --- /dev/null +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.cpp @@ -0,0 +1,175 @@ +/** @file AdvancedLoggerMmCoreGoogleTest.cpp + + This file contains the unit tests for the Advanced Logger MM Core Library. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include +#include +#include +#include + +extern "C" { + #include + #include + #include + #include + #include + #include // to mock (MU_BASECORE MdeModulePkg) + #include + #include // to mock (MU_BASECORE MdePkg) + #include // to mock OR NULL lib? (MU_BASECORE MdePkg) + #include // to mock (MU_BASECORE MdePkg) + #include // to mock (MU_BASECORE MdePkg) + #include // to mock (MU_BASECORE MdeModulePkg) + #include "../../AdvancedLoggerCommon.h" + + extern ADVANCED_LOGGER_INFO *mLoggerInfo; + extern UINT32 mBufferSize; + extern EFI_PHYSICAL_ADDRESS mMaxAddress; + + // Static function declaration + BOOLEAN + ValidateInfoBlock ( + VOID + ); +} + +using namespace testing; + +/** + Test class for AdvancedLoggerMmCore +**/ +class AdvancedLoggerMmCoreTest : public Test { +protected: + UINTN DebugLevel; + CHAR8 *Buffer; + UINTN NumberOfBytes; + EFI_HANDLE ImageHandle; + EFI_SYSTEM_TABLE SystemTable; + BOOLEAN status; + ADVANCED_LOGGER_INFO testLoggerInfo; + // StrictMock gHobLib; + // StrictMock gALHdwPortLib; + + void + SetUp ( + ) override + { + CHAR8 OutputBuf[] = "MyUnitTestLog"; + + NumberOfBytes = sizeof (OutputBuf); + Buffer = OutputBuf; + DebugLevel = DEBUG_ERROR; + ImageHandle = (EFI_HANDLE)0x12345678; + testLoggerInfo.Signature = ADVANCED_LOGGER_SIGNATURE; + testLoggerInfo.Version = ADVANCED_LOGGER_VERSION; + testLoggerInfo.LogBufferOffset = (ALIGN_VALUE (sizeof (testLoggerInfo), 8)); + testLoggerInfo.LogCurrentOffset = (ALIGN_VALUE (sizeof (testLoggerInfo), 8)); + mLoggerInfo = NULL; + } +}; + +// +// Test ValidateInfoBlock +// +TEST_F (AdvancedLoggerMmCoreTest, AdvLoggerGetInfoFail) { + // NULL LoggerInfo + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + + // Invalid Signature + mLoggerInfo = &testLoggerInfo; + mLoggerInfo->Signature = SIGNATURE_32 ('T', 'E', 'S', 'T'); + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + mLoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; + + // Mismatched Version is okay? Wouldn't expect mismatched version with valid signature? + + // Invalid Buffer Offset + mLoggerInfo->LogBufferOffset = (UINT32)0; + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + mLoggerInfo->LogBufferOffset = (ALIGN_VALUE (sizeof (testLoggerInfo), 8)); + + // Invalid Current Offset + mLoggerInfo->LogCurrentOffset = (UINT32)0; + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + mLoggerInfo->LogCurrentOffset = (ALIGN_VALUE (sizeof (testLoggerInfo), 8)); + + // Invalid Buffer Size + mLoggerInfo->LogBufferSize = (UINT32)0; + mBufferSize = (UINT32)0x1000; + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); +} + +/*/* Commented out, need mock libraries to be implemented. +// Test AdvancedLoggerGetLoggerInfo NULL HOB +TEST_F (AdvancedLoggerMmCoreTest, AdvLoggerGetInfoNullHob) { + // PcdAdvancedLoggerFixedInRAM is FALSE, so expect to get the logger info from the HOB + // GetFirstGuidHob and GetNextGuidHob are not mocked + EXPECT_CALL ( + gHobLib, + GetFirstGuidHob ( + BufferEq (&gAdvancedLoggerHobGuid, sizeof (EFI_GUID)) + ) + ) + .WillOnce ( + Return (NULL) + ); + + mLoggerInfo = AdvancedLoggerGetLoggerInfo (); + + EXPECT_EQ (mLoggerInfo, nullptr); +} + +// Test AdvancedLoggerGetLoggerInfo Success +TEST_F (AdvancedLoggerMmCoreTest, AdvLoggerGetInfoSuccess) { + EXPECT_CALL ( + gHobLib, + GetFirstGuidHob ( + BufferEq (&gAdvancedLoggerHobGuid, sizeof (EFI_GUID)) + ) + ) + .WillOnce ( + Return (NULL) // Need to mock the HOB to return a valid logger info + + ); + + EXPECT_CALL ( + gALHdwPortLib, + AdvancedLoggerHdwPortInitialize () + ) + .WillOnce ( + Return (EFI_SUCCESS) + ); + + mLoggerInfo = AdvancedLoggerGetLoggerInfo (); + EXPECT_NE (mLoggerInfo, nullptr); + + // expect mLoggerInfo->Signature to be ADVANCED_LOGGER_SIGNATURE + // expect mMAXAddress to be 0x1000 +} + +// Test Advanced Logger constructor +TEST_F (AdvancedLoggerMmCoreTest, AdvLoggerContructorSuccess) { + MmCoreAdvancedLoggerLibConstructor (ImageHandle, SystemTable); +} +*/ + +int +main ( + int argc, + char *argv[] + ) +{ + InitGoogleTest (&argc, argv); + return RUN_ALL_TESTS (); +} diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.inf b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.inf new file mode 100644 index 0000000000..92d11e53a6 --- /dev/null +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.inf @@ -0,0 +1,53 @@ +## @file AdvancedLoggerMmCoreGoogleTest.inf +# +# MM_CORE instance of the Advanced Logger library. +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 1.29 + BASE_NAME = AdvancedLoggerMmCoreLibGoogleTest + FILE_GUID = 4161C933-AEFC-43A5-8D5F-F1E9E9586A03 + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + AdvancedLoggerMmCoreGoogleTest.cpp + ../AdvancedLoggerLib.c # Source for externs + +[Packages] + MdePkg/MdePkg.dec + AdvLoggerPkg/AdvLoggerPkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec + +[LibraryClasses] + GoogleTestLib + BaseLib + DebugLib + AdvancedLoggerHdwPortLib + # BaseMemoryLib + HobLib + # MemoryAllocationLib + PcdLib + SynchronizationLib + TimerLib + VariablePolicyHelperLib + +[Guids] + gAdvancedLoggerHobGuid + +[Pcd] + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES + +[FeaturePcd] + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable + +[Depex] + TRUE \ No newline at end of file diff --git a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc index 9d8ed9bda8..965179717a 100644 --- a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc +++ b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc @@ -42,8 +42,6 @@ MemoryAllocationLib|MdePkg/Test/Mock/Library/GoogleTest/MockMemoryAllocationLib/MockMemoryAllocationLib.inf UefiBootServicesTableLib|MdePkg/Test/Mock/Library/GoogleTest/MockUefiBootServicesTableLib/MockUefiBootServicesTableLib.inf HobLib|MdePkg/Test/Mock/Library/GoogleTest/MockHobLib/MockHobLib.inf - -[LibraryClasses.X64] SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf # To mock AdvancedLoggerHdwPortLib|AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf @@ -54,22 +52,17 @@ # ################################################################################ [Components] - # - # Build AdvancedLoggerPkg mock libraries - # - AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf - # # Build HOST_APPLICATIONs that test AdvLoggerPkg # AdvLoggerPkg/AdvLoggerOsConnectorPrm/Library/AdvLoggerOsConnectorPrmConfigLib/GoogleTest/AdvLoggerPrmConfigLibGoogleTest.inf AdvLoggerPkg/AdvLoggerOsConnectorPrm/GoogleTest/AdvLoggerOsConnectorPrmGoogleTest.inf AdvLoggerPkg/Library/AdvancedLoggerLib/Dxe/GoogleTest/AdvancedLoggerDxeLibGoogleTest.inf + AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf + AdvLoggerPkg/Library/AdvancedLoggerLib/MmCore/GoogleTest/AdvancedLoggerMmCoreGoogleTest.inf AdvLoggerPkg/Library/AdvancedLoggerLib/Pei/GoogleTest/AdvancedLoggerPeiLibGoogleTest.inf { AdvancedLoggerLib|AdvLoggerPkg/Library/AdvancedLoggerLib/Pei/AdvancedLoggerLib.inf PeiServicesLib|MdePkg/Test/Mock/Library/GoogleTest/MockPeiServicesLib/MockPeiServicesLib.inf } -[Components.X64] - AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf