From e5341454918961b68dbef529fc9006640d4dfb24 Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Wed, 28 Aug 2024 14:09:28 -0700 Subject: [PATCH 1/5] AdvLoggerPkg: Add GoogleTest for AdvancedLoggerDxeCore --- .../AdvancedLoggerDxeCoreGoogleTest.cpp | 112 ++++++++++++++++++ .../AdvancedLoggerDxeCoreGoogleTest.inf | 53 +++++++++ AdvLoggerPkg/Test/AdvLoggerHostTest.dsc | 1 + 3 files changed, 166 insertions(+) create mode 100644 AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp create mode 100644 AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp new file mode 100644 index 0000000000..b28584117f --- /dev/null +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp @@ -0,0 +1,112 @@ +/** @file AdvancedLoggerDxeCoreGoogleTest.cpp + + This file contains the unit tests for the Advanced Logger DXE Core Library. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +// #include + +extern "C" { + #include + #include + #include + #include + #include + #include + #include // to mock? + #include + #include // to mock? + #include // to mock? + #include // to mock? + #include // to mock? + #include // to mock? + #include // to mock? + #include // to mock? + #include // to mock? + #include "../../AdvancedLoggerCommon.h" + + // extern ADVANCED_LOGGER_PROTOCOL *mLoggerProtocol; + extern ADVANCED_LOGGER_INFO *mLoggerInfo; + extern UINT32 mBufferSize; + extern EFI_PHYSICAL_ADDRESS mMaxAddress; + extern BOOLEAN mInitialized; +} + +using namespace testing; + +/** + Test class for AdvancedLoggerDxeCore +**/ +class AdvancedLoggerDxeCoreTest : public Test { +protected: + // StrictMock AdvLoggerProtocolMock; + UINTN DebugLevel; + CHAR8 *Buffer; + UINTN NumberOfBytes; + EFI_HANDLE ImageHandle; + EFI_SYSTEM_TABLE *SystemTable; + ADVANCED_LOGGER_INFO *loggerInfo; + BOOLEAN status; + + void + SetUp ( + ) override + { + CHAR8 OutputBuf[] = "MyUnitTestLog"; + + NumberOfBytes = sizeof (OutputBuf); + Buffer = OutputBuf; + DebugLevel = DEBUG_ERROR; + mInitialized = FALSE; + // gALProtocol->Signature = ADVANCED_LOGGER_PROTOCOL_SIGNATURE; + // gALProtocol->Version = ADVANCED_LOGGER_PROTOCOL_VERSION; + ImageHandle = (EFI_HANDLE)0x12345678; + SystemTable = (EFI_SYSTEM_TABLE *)0x87654321; + } +}; + +// +// Test ValidateInfoBlock +// +TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { + // mLoggerInfo NULL + mLoggerInfo = NULL; + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + + // Invalid Signature + mLoggerInfo = (ADVANCED_LOGGER_INFO *)AllocatePool (sizeof (ADVANCED_LOGGER_INFO)); + mLoggerInfo->Signature = SIGNATURE_32('T','E','S','T'); + status = ValidateInfoBlock (); + EXPECT_EQ (status, FALSE); + + // TODO Test offset and size +} + + +/* TODO need to mock PCD library, and more +// Test AdvancedLoggerGetLoggerInfo +TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoSuccess) { + loggerInfo = AdvancedLoggerGetLoggerInfo (); +} +*/ + +/* TODO need to test AdvancedLoggerGetLoggerInfo +// Test DxeCore Advanced Logger initialization +TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerContructorSuccess) { + DxeCoreAdvancedLoggerLibConstructor (ImageHandle, SystemTable); +} +*/ + +int +main ( + int argc, + char *argv[] + ) +{ + InitGoogleTest (&argc, argv); + return RUN_ALL_TESTS (); +} diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf new file mode 100644 index 0000000000..55ad3c2933 --- /dev/null +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf @@ -0,0 +1,53 @@ +## @file AdvancedLoggerDxeCoreGoogleTest.inf +# +# DXE_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 = DxeCoreAdvancedLoggerLib + FILE_GUID = 01D768B5-B788-4253-86AD-B0524563BABC + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + AdvancedLoggerDxeCoreGoogleTest.cpp + +[Packages] + MdePkg/MdePkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec + MdeModulePkg/MdeModulePkg.dec + AdvLoggerPkg/AdvLoggerPkg.dec + +[LibraryClasses] + AdvancedLoggerLib + UnitTestLib + +[Guids] + gAdvancedLoggerHobGuid + gEfiEndOfDxeEventGroupGuid + gAdvancedLoggerPreDxeLogsGuid + +[Protocols] + gAdvancedLoggerProtocolGuid ## CONSUMES + gEdkiiVariablePolicyProtocolGuid ## CONSUMES + gEfiRealTimeClockArchProtocolGuid ## CONSUMES + gEfiVariableWriteArchProtocolGuid ## CONSUMES + +[FixedPcd] + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPages + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel + +[FeaturePcd] + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerLocator + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerFixedInRAM + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable diff --git a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc index d6fc1430a6..389998a9fa 100644 --- a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc +++ b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc @@ -55,3 +55,4 @@ AdvancedLoggerLib|AdvLoggerPkg/Library/AdvancedLoggerLib/Pei/AdvancedLoggerLib.inf PeiServicesLib|MdePkg/Test/Mock/Library/GoogleTest/MockPeiServicesLib/MockPeiServicesLib.inf } + AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf From eda0b5099635d7023a77028fa2612a10f60fc05f Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Thu, 29 Aug 2024 14:01:37 -0700 Subject: [PATCH 2/5] temp --- .../DxeCore/AdvancedLoggerLib.c | 3 +- .../AdvancedLoggerDxeCoreGoogleTest.cpp | 82 +++++++++++++------ .../AdvancedLoggerDxeCoreGoogleTest.inf | 21 ++++- AdvLoggerPkg/Test/AdvLoggerHostTest.dsc | 11 +++ 4 files changed, 87 insertions(+), 30 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c index bce40dc971..33ccb624ec 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c @@ -6,7 +6,8 @@ **/ -#include +#include +#include #include diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp index b28584117f..6f7e36fd1e 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp @@ -7,25 +7,29 @@ **/ #include +// #include +// #include // #include extern "C" { - #include + #include // should include basetype and base #include #include + #include #include #include - #include // to mock? + #include // to mock #include - #include // to mock? - #include // to mock? - #include // to mock? - #include // to mock? - #include // to mock? - #include // to mock? - #include // to mock? - #include // to mock? + + #include // to mock + #include // to mock + //#include // to mock + #include // to mock + #include // to mock + #include // to mock + #include // to mock + #include "../../AdvancedLoggerCommon.h" // extern ADVANCED_LOGGER_PROTOCOL *mLoggerProtocol; @@ -33,6 +37,12 @@ extern "C" { extern UINT32 mBufferSize; extern EFI_PHYSICAL_ADDRESS mMaxAddress; extern BOOLEAN mInitialized; + + // Static function declaration + BOOLEAN + ValidateInfoBlock ( + VOID + ); } using namespace testing; @@ -47,9 +57,9 @@ class AdvancedLoggerDxeCoreTest : public Test { CHAR8 *Buffer; UINTN NumberOfBytes; EFI_HANDLE ImageHandle; - EFI_SYSTEM_TABLE *SystemTable; - ADVANCED_LOGGER_INFO *loggerInfo; + EFI_SYSTEM_TABLE SystemTable; BOOLEAN status; + ADVANCED_LOGGER_INFO testLoggerInfo; void SetUp ( @@ -57,14 +67,17 @@ class AdvancedLoggerDxeCoreTest : public Test { { CHAR8 OutputBuf[] = "MyUnitTestLog"; - NumberOfBytes = sizeof (OutputBuf); - Buffer = OutputBuf; - DebugLevel = DEBUG_ERROR; - mInitialized = FALSE; + NumberOfBytes = sizeof (OutputBuf); + Buffer = OutputBuf; + DebugLevel = DEBUG_ERROR; + mInitialized = FALSE; // gALProtocol->Signature = ADVANCED_LOGGER_PROTOCOL_SIGNATURE; // gALProtocol->Version = ADVANCED_LOGGER_PROTOCOL_VERSION; - ImageHandle = (EFI_HANDLE)0x12345678; - SystemTable = (EFI_SYSTEM_TABLE *)0x87654321; + 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)); } }; @@ -72,20 +85,38 @@ class AdvancedLoggerDxeCoreTest : public Test { // Test ValidateInfoBlock // TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { - // mLoggerInfo NULL + // NULL Info block mLoggerInfo = NULL; - status = ValidateInfoBlock (); + status = ValidateInfoBlock (); EXPECT_EQ (status, FALSE); // Invalid Signature - mLoggerInfo = (ADVANCED_LOGGER_INFO *)AllocatePool (sizeof (ADVANCED_LOGGER_INFO)); - mLoggerInfo->Signature = SIGNATURE_32('T','E','S','T'); - status = ValidateInfoBlock (); + mLoggerInfo = &testLoggerInfo; + mLoggerInfo->Signature = SIGNATURE_32 ('T', 'E', 'S', 'T'); + status = ValidateInfoBlock (); EXPECT_EQ (status, FALSE); + mLoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; - // TODO Test offset and size -} + // TODO Mismatched Version is okay? + + // 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); +} /* TODO need to mock PCD library, and more // Test AdvancedLoggerGetLoggerInfo @@ -100,7 +131,6 @@ TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerContructorSuccess) { DxeCoreAdvancedLoggerLibConstructor (ImageHandle, SystemTable); } */ - int main ( int argc, diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf index 55ad3c2933..d0642e651b 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf @@ -20,16 +20,27 @@ [Sources] AdvancedLoggerDxeCoreGoogleTest.cpp + ../../AdvancedLoggerCommon.c + ../AdvancedLoggerLib.c # Source for externs [Packages] MdePkg/MdePkg.dec - UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec MdeModulePkg/MdeModulePkg.dec AdvLoggerPkg/AdvLoggerPkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec [LibraryClasses] - AdvancedLoggerLib - UnitTestLib + GoogleTestLib + BaseLib + DebugLib + AdvancedLoggerHdwPortLib + # BaseMemoryLib + HobLib + # MemoryAllocationLib + PcdLib + SynchronizationLib + TimerLib + VariablePolicyHelperLib [Guids] gAdvancedLoggerHobGuid @@ -51,3 +62,7 @@ gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerLocator gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerFixedInRAM gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable + +[BuildOptions] + # MSFT:*_*_*_CC_FLAGS = /std:c++latest + # MSFT:*_*_*_CC_FLAGS = /EHsc \ No newline at end of file diff --git a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc index 389998a9fa..4b55beb84c 100644 --- a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc +++ b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc @@ -30,6 +30,11 @@ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf + SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf # TODO mock + VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf # TODO mock # # Mocked Libs @@ -38,6 +43,10 @@ MemoryAllocationLib|MdePkg/Test/Mock/Library/GoogleTest/MockMemoryAllocationLib/MockMemoryAllocationLib.inf UefiBootServicesTableLib|MdePkg/Test/Mock/Library/GoogleTest/MockUefiBootServicesTableLib/MockUefiBootServicesTableLib.inf + [LibraryClasses.X64] + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf # TODO mock + AdvancedLoggerHdwPortLib|AdvLoggerPkg/Library/AdvancedLoggerHdwPortLib/AdvancedLoggerHdwPortLib.inf + ################################################################################ # # Components section - list of all Components needed by this Platform. @@ -55,4 +64,6 @@ 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 From fd8fbdb828b3af518ddc3be38d6c3299621bd6f8 Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Mon, 9 Sep 2024 11:31:10 -0700 Subject: [PATCH 3/5] Add comments on libraries to mock. Use null libraries where possible. --- .../AdvancedLoggerDxeCoreGoogleTest.cpp | 37 ++++++++----------- AdvLoggerPkg/Test/AdvLoggerHostTest.dsc | 8 ++-- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp index 6f7e36fd1e..8791e17ede 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp @@ -7,32 +7,31 @@ **/ #include -// #include -// #include -// #include +#include +#include +#include +#include extern "C" { - #include // should include basetype and base + #include #include #include #include #include #include - #include // to mock + #include // to mock (MU_BASECORE MdeModulePkg) #include - #include // to mock - #include // to mock - //#include // to mock - #include // to mock - #include // to mock - #include // to mock - #include // to mock + #include // to mock or NULL lib? (MU_PLUS) + #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_PROTOCOL *mLoggerProtocol; extern ADVANCED_LOGGER_INFO *mLoggerInfo; extern UINT32 mBufferSize; extern EFI_PHYSICAL_ADDRESS mMaxAddress; @@ -52,7 +51,6 @@ using namespace testing; **/ class AdvancedLoggerDxeCoreTest : public Test { protected: - // StrictMock AdvLoggerProtocolMock; UINTN DebugLevel; CHAR8 *Buffer; UINTN NumberOfBytes; @@ -71,8 +69,6 @@ class AdvancedLoggerDxeCoreTest : public Test { Buffer = OutputBuf; DebugLevel = DEBUG_ERROR; mInitialized = FALSE; - // gALProtocol->Signature = ADVANCED_LOGGER_PROTOCOL_SIGNATURE; - // gALProtocol->Version = ADVANCED_LOGGER_PROTOCOL_VERSION; ImageHandle = (EFI_HANDLE)0x12345678; testLoggerInfo.Signature = ADVANCED_LOGGER_SIGNATURE; testLoggerInfo.Version = ADVANCED_LOGGER_VERSION; @@ -97,7 +93,7 @@ TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { EXPECT_EQ (status, FALSE); mLoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; - // TODO Mismatched Version is okay? + // Mismatched Version is okay? Wouldn't expect mismatched version with valid signature? // Invalid Buffer Offset mLoggerInfo->LogBufferOffset = (UINT32)0; @@ -118,19 +114,18 @@ TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { EXPECT_EQ (status, FALSE); } -/* TODO need to mock PCD library, and more +/* Commented out, need mock libraries to be implemented. // Test AdvancedLoggerGetLoggerInfo TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoSuccess) { - loggerInfo = AdvancedLoggerGetLoggerInfo (); + mLoggerInfo = AdvancedLoggerGetLoggerInfo (); } -*/ -/* TODO need to test AdvancedLoggerGetLoggerInfo // Test DxeCore Advanced Logger initialization TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerContructorSuccess) { DxeCoreAdvancedLoggerLibConstructor (ImageHandle, SystemTable); } */ + int main ( int argc, diff --git a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc index 4b55beb84c..68cf87bcf3 100644 --- a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc +++ b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc @@ -33,8 +33,7 @@ PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf - HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf # TODO mock - VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf # TODO mock + VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf # To mock # # Mocked Libs @@ -42,10 +41,11 @@ UefiRuntimeLib|MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeLib/MockUefiRuntimeLib.inf 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 # TODO mock - AdvancedLoggerHdwPortLib|AdvLoggerPkg/Library/AdvancedLoggerHdwPortLib/AdvancedLoggerHdwPortLib.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf # To mock + AdvancedLoggerHdwPortLib|AdvLoggerPkg/Library/AdvancedLoggerHdwPortLibNull/AdvancedLoggerHdwPortLibNull.inf ################################################################################ # From 28cf0adb262da1d7436a238dedcd2b8ad2a22ae3 Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Mon, 9 Sep 2024 16:40:50 -0700 Subject: [PATCH 4/5] AdvLoggerPkg: Add mock for AdvancedLoggerHdwPortLib --- .../Library/MockAdvancedLoggerHdwPortLib.h | 37 +++++++++++++++++++ .../MockAdvancedLoggerHdwPortLib.cpp | 13 +++++++ .../MockAdvancedLoggerHdwPortLib.inf | 34 +++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 AdvLoggerPkg/Test/Mock/Include/GoogleTest/Library/MockAdvancedLoggerHdwPortLib.h create mode 100644 AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.cpp create mode 100644 AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf diff --git a/AdvLoggerPkg/Test/Mock/Include/GoogleTest/Library/MockAdvancedLoggerHdwPortLib.h b/AdvLoggerPkg/Test/Mock/Include/GoogleTest/Library/MockAdvancedLoggerHdwPortLib.h new file mode 100644 index 0000000000..67bbcd7971 --- /dev/null +++ b/AdvLoggerPkg/Test/Mock/Include/GoogleTest/Library/MockAdvancedLoggerHdwPortLib.h @@ -0,0 +1,37 @@ +/** @file MockAdvancedLoggerHdwPortLib.h + Google Test mocks for AdvancedLoggerHdwPortLib + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef MOCK_ADVANCED_LOGGER_HDW_PORT_LIB_H_ +#define MOCK_ADVANCED_LOGGER_HDW_PORT_LIB_H_ + +#include +#include +extern "C" { + #include + #include + #include +} + +struct MockAdvancedLoggerHdwPortLib { + MOCK_INTERFACE_DECLARATION (MockAdvancedLoggerHdwPortLib); + + MOCK_FUNCTION_DECLARATION ( + EFI_STATUS, + AdvancedLoggerHdwPortInitialize, + () + ); + + MOCK_FUNCTION_DECLARATION ( + UINTN, + AdvancedLoggerHdwPortWrite, + (IN UINTN DebugLevel, + IN UINT8 *Buffer, + IN UINTN NumberOfBytes) + ); +}; + +#endif diff --git a/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.cpp b/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.cpp new file mode 100644 index 0000000000..c075adc1df --- /dev/null +++ b/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.cpp @@ -0,0 +1,13 @@ +/** @file MockAdvancedLoggerHdwPortLib.cpp + Google Test mocks for AdvancedLoggerHdwPortLib + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +MOCK_INTERFACE_DEFINITION (MockAdvancedLoggerHdwPortLib); + +MOCK_FUNCTION_DEFINITION (MockAdvancedLoggerHdwPortLib, AdvancedLoggerHdwPortInitialize, 0, EFIAPI); +MOCK_FUNCTION_DEFINITION (MockAdvancedLoggerHdwPortLib, AdvancedLoggerHdwPortWrite, 3, EFIAPI); diff --git a/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf b/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf new file mode 100644 index 0000000000..4d02e08cf7 --- /dev/null +++ b/AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf @@ -0,0 +1,34 @@ +## @file MockAdvancedLoggerHdwPortLib.inf +# Google Test mocks for AdvancedLoggerHdwPortLib +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = MockAdvancedLoggerHdwPortLib + FILE_GUID = 88069e60-ae8b-5d10-a654-9aa6ce8b328c + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + LIBRARY_CLASS = AdvancedLoggerHdwPortLib + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + MockAdvancedLoggerHdwPortLib.cpp + +[Packages] + AdvLoggerPkg/AdvLoggerPkg.dec + MdePkg/MdePkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec + +[LibraryClasses] + GoogleTestLib + +[BuildOptions] + MSFT:*_*_*_CC_FLAGS = /EHs /bigobj From 6e164d5615e0a43e038109ae1fbeb080b8b317ab Mon Sep 17 00:00:00 2001 From: Vivian Nowka-Keane Date: Mon, 9 Sep 2024 16:41:24 -0700 Subject: [PATCH 5/5] AdvLoggerPkg: Add more tests to DxeCore GoogleTest --- .../AdvancedLoggerDxeCoreGoogleTest.cpp | 94 ++++++++++++++++--- .../AdvancedLoggerDxeCoreGoogleTest.inf | 2 +- AdvLoggerPkg/Test/AdvLoggerHostTest.dsc | 12 ++- 3 files changed, 89 insertions(+), 19 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp index 8791e17ede..37208956c4 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.cpp @@ -9,27 +9,24 @@ #include #include #include -#include #include +#include +#include extern "C" { #include #include #include - #include #include #include #include // to mock (MU_BASECORE MdeModulePkg) #include - - #include // to mock or NULL lib? (MU_PLUS) #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; @@ -58,6 +55,8 @@ class AdvancedLoggerDxeCoreTest : public Test { EFI_SYSTEM_TABLE SystemTable; BOOLEAN status; ADVANCED_LOGGER_INFO testLoggerInfo; + // StrictMock gHobLib; + // StrictMock gALHdwPortLib; void SetUp ( @@ -65,15 +64,16 @@ class AdvancedLoggerDxeCoreTest : public Test { { CHAR8 OutputBuf[] = "MyUnitTestLog"; - NumberOfBytes = sizeof (OutputBuf); - Buffer = OutputBuf; - DebugLevel = DEBUG_ERROR; - mInitialized = FALSE; + NumberOfBytes = sizeof (OutputBuf); + Buffer = OutputBuf; + DebugLevel = DEBUG_ERROR; + mInitialized = FALSE; 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; } }; @@ -81,9 +81,8 @@ class AdvancedLoggerDxeCoreTest : public Test { // Test ValidateInfoBlock // TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { - // NULL Info block - mLoggerInfo = NULL; - status = ValidateInfoBlock (); + // NULL LoggerInfo + status = ValidateInfoBlock (); EXPECT_EQ (status, FALSE); // Invalid Signature @@ -114,13 +113,78 @@ TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoFail) { EXPECT_EQ (status, FALSE); } -/* Commented out, need mock libraries to be implemented. -// Test AdvancedLoggerGetLoggerInfo +// Test AdvancedLoggerGetLoggerInfo when the logger info is already initialized +// and is currently valid. +TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoAlreadyInitializedValid) { + mInitialized = TRUE; + mLoggerInfo = &testLoggerInfo; + + ADVANCED_LOGGER_INFO *LocalLoggerInfo = AdvancedLoggerGetLoggerInfo (); + + EXPECT_EQ (LocalLoggerInfo, mLoggerInfo); +} + +// Test AdvancedLoggerGetLoggerInfo when the logger info is already initialized +// and is currently INVALID. +TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerGetInfoAlreadyInitializedInvalid) { + mInitialized = TRUE; + mLoggerInfo = &testLoggerInfo; + mLoggerInfo->Signature = SIGNATURE_32 ('T', 'E', 'S', 'T'); + + ADVANCED_LOGGER_INFO *LocalLoggerInfo = AdvancedLoggerGetLoggerInfo (); + + EXPECT_EQ (LocalLoggerInfo, nullptr); +} + +/*/* Commented out, need mock libraries to be implemented. +// Test AdvancedLoggerGetLoggerInfo NULL HOB +TEST_F (AdvancedLoggerDxeCoreTest, 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 (AdvancedLoggerDxeCoreTest, 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 DxeCore Advanced Logger initialization +// Test DxeCore Advanced Logger constructor TEST_F (AdvancedLoggerDxeCoreTest, AdvLoggerContructorSuccess) { DxeCoreAdvancedLoggerLibConstructor (ImageHandle, SystemTable); } diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf index d0642e651b..26d1129b66 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/GoogleTest/AdvancedLoggerDxeCoreGoogleTest.inf @@ -9,7 +9,7 @@ [Defines] INF_VERSION = 1.29 - BASE_NAME = DxeCoreAdvancedLoggerLib + BASE_NAME = AdvancedLoggerDxeCoreLibGoogleTest FILE_GUID = 01D768B5-B788-4253-86AD-B0524563BABC MODULE_TYPE = HOST_APPLICATION VERSION_STRING = 1.0 diff --git a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc index 68cf87bcf3..9d8ed9bda8 100644 --- a/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc +++ b/AdvLoggerPkg/Test/AdvLoggerHostTest.dsc @@ -43,9 +43,10 @@ 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/Library/AdvancedLoggerHdwPortLibNull/AdvancedLoggerHdwPortLibNull.inf +[LibraryClasses.X64] + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf # To mock + AdvancedLoggerHdwPortLib|AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf + ################################################################################ # @@ -53,6 +54,11 @@ # ################################################################################ [Components] + # + # Build AdvancedLoggerPkg mock libraries + # + AdvLoggerPkg/Test/Mock/Library/GoogleTest/MockAdvancedLoggerHdwPortLib/MockAdvancedLoggerHdwPortLib.inf + # # Build HOST_APPLICATIONs that test AdvLoggerPkg #