From: Michael Kubacki <michael.kuba...@microsoft.com> Adds host-based unit tests for DxePrmModuleDiscoveryLib. This is an initial set of support, more tests should be added in the future.
Cc: Andrew Fish <af...@apple.com> Cc: Kang Gao <kang....@intel.com> Cc: Michael D Kinney <michael.d.kin...@intel.com> Cc: Michael Kubacki <michael.kuba...@microsoft.com> Cc: Leif Lindholm <l...@nuviainc.com> Cc: Benjamin You <benjamin....@intel.com> Cc: Liu Yun <yun.y....@intel.com> Cc: Ankit Sinha <ankit.si...@intel.com> Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> --- PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c | 1 - PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c | 209 ++++++++++++++++++++ PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h | 12 ++ PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf | 39 ++++ PrmPkg/Test/PrmPkgHostTest.dsc | 5 + 5 files changed, 265 insertions(+), 1 deletion(-) diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c b/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c index 6977799aa8f3..0dd6a76be4d7 100644 --- a/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c +++ b/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c @@ -87,7 +87,6 @@ GetNextPrmModuleEntry ( otherwise, NULL is returned. **/ -STATIC PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY * CreateNewPrmModuleImageContextListEntry ( VOID diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c new file mode 100644 index 000000000000..ef8abe397cd4 --- /dev/null +++ b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c @@ -0,0 +1,209 @@ +/** @file + + Unit tests for the PRM Module Discovery Library. + + Copyright (c) Microsoft Corporation + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#include <Library/BaseLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/PrmModuleDiscoveryLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UnitTestLib.h> + +#include "../PrmModuleDiscovery.h" + +#define UNIT_TEST_NAME "PRM Module Discovery Library Unit Test" +#define UNIT_TEST_VERSION "0.1" + +///=== TEST CASES ================================================================================= + +///===== CREATE NEW PRM MODULE IMAGE CONTEXT LIST ENTRY TESTS SUITE ================================================== + +/** + Verifies that the buffer returned can be deallocated. + + @param[in] Context [Optional] An optional context parameter. + Not used in this unit test. + + @retval UNIT_TEST_PASSED Unit test case prerequisites are met. + @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.. + +**/ +UNIT_TEST_STATUS +EFIAPI +PrmModuleImageContextListEntryShouldDeallocate ( + IN UNIT_TEST_CONTEXT Context + ) +{ + PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY *ListEntry; + + ListEntry = CreateNewPrmModuleImageContextListEntry (); + + UT_ASSERT_NOT_NULL (ListEntry); + if (ListEntry != NULL) { + FreePool (ListEntry); + } + + return UNIT_TEST_PASSED; +} + +/** + Verifies that the list entry signature is set to the appropriate value. + + @param[in] Context [Optional] An optional context parameter. + Not used in this unit test. + + @retval UNIT_TEST_PASSED Unit test case prerequisites are met. + @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.. + +**/ +UNIT_TEST_STATUS +EFIAPI +PrmModuleImageContextListEntrySignatureShouldBeValid ( + IN UNIT_TEST_CONTEXT Context + ) +{ + PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY *ListEntry; + + ListEntry = CreateNewPrmModuleImageContextListEntry (); + + UT_ASSERT_TRUE (ListEntry->Signature == PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY_SIGNATURE); + + if (ListEntry != NULL) { + FreePool (ListEntry); + } + + return UNIT_TEST_PASSED; +} + +/** + Verifies that the Context buffer in the list entry is initialized to zero. + + @param[in] Context [Optional] An optional context parameter. + Not used in this unit test. + + @retval UNIT_TEST_PASSED Unit test case prerequisites are met. + @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.. + +**/ +UNIT_TEST_STATUS +EFIAPI +PrmModuleImageContextListEntryImageContextShouldBeZeroed ( + IN UNIT_TEST_CONTEXT Context + ) +{ + PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY *ListEntry; + PRM_MODULE_IMAGE_CONTEXT ImageContext; + + ListEntry = CreateNewPrmModuleImageContextListEntry (); + + ZeroMem (&ImageContext, sizeof (ImageContext)); + UT_ASSERT_MEM_EQUAL (&ListEntry->Context, &ImageContext, sizeof (ImageContext)); + + if (ListEntry != NULL) { + FreePool (ListEntry); + } + + return UNIT_TEST_PASSED; +} + +///=== TEST ENGINE ================================================================================ + +/** + Entry point for the PRM Context Buffer Library unit tests. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point executed successfully. + @retval other Some error occurred when executing this entry point. + +**/ +int main () +{ + EFI_STATUS Status; + UNIT_TEST_FRAMEWORK_HANDLE Framework; + UNIT_TEST_SUITE_HANDLE CreateNewPrmModuleImageContextListEntryTests; + + Framework = NULL; + + DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION)); + + // + // Start setting up the test framework for running the tests. + // + Status = InitUnitTestFramework (&Framework, UNIT_TEST_NAME, gEfiCallerBaseName, UNIT_TEST_VERSION); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status)); + goto EXIT; + } + + Status = CreateUnitTestSuite ( + &CreateNewPrmModuleImageContextListEntryTests, + Framework, + "Create New PRM Module Image Context List Entry Tests", + "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry", + NULL, + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry\n")); + Status = EFI_OUT_OF_RESOURCES; + goto EXIT; + } + + AddTestCase ( + CreateNewPrmModuleImageContextListEntryTests, + "", + "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntryShouldDeallocate", + PrmModuleImageContextListEntryShouldDeallocate, + NULL, + NULL, + NULL + ); + + AddTestCase ( + CreateNewPrmModuleImageContextListEntryTests, + "", + "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntrySignatureShouldBeValid", + PrmModuleImageContextListEntrySignatureShouldBeValid, + NULL, + NULL, + NULL + ); + + AddTestCase ( + CreateNewPrmModuleImageContextListEntryTests, + "", + "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntryImageContextShouldBeZeroed", + PrmModuleImageContextListEntryImageContextShouldBeZeroed, + NULL, + NULL, + NULL + ); + + // + // Execute the tests. + // + Status = RunAllTestSuites (Framework); + +EXIT: + if (Framework) + { + FreeUnitTestFramework (Framework); + } + + return Status; +} diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h b/PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h index 79058d15317e..ea42cf272550 100644 --- a/PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h +++ b/PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h @@ -24,4 +24,16 @@ typedef struct { #pragma pack(pop) +/** + Creates a new PRM Module Image Context linked list entry. + + @retval PrmModuleImageContextListEntry If successful, a pointer a PRM Module Image Context linked list entry + otherwise, NULL is returned. + +**/ +PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY * +CreateNewPrmModuleImageContextListEntry ( + VOID + ); + #endif diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf new file mode 100644 index 000000000000..8aae1f7cd78a --- /dev/null +++ b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf @@ -0,0 +1,39 @@ +## @file +# PRM Module Discovery Library Host-Based Unit Tests +# +# Copyright (c) Microsoft Corporation +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x00010006 + BASE_NAME = PrmModuleDiscoveryLibUnitTestHost + FILE_GUID = 864886C5-5458-4FF5-A160-4D5B2EAEC558 + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 +# + +[Sources] + DxePrmModuleDiscoveryLibUnitTest.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec + PrmPkg/PrmPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + MemoryAllocationLib + PrmModuleDiscoveryLib + UefiBootServicesTableLib + UnitTestLib diff --git a/PrmPkg/Test/PrmPkgHostTest.dsc b/PrmPkg/Test/PrmPkgHostTest.dsc index 1f44037d0102..67fb4f5bd0d2 100644 --- a/PrmPkg/Test/PrmPkgHostTest.dsc +++ b/PrmPkg/Test/PrmPkgHostTest.dsc @@ -19,7 +19,11 @@ [Defines] !include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc [LibraryClasses] + PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf + PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf PrmContextBufferLib|PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.inf + PrmModuleDiscoveryLib|PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.inf + PrmPeCoffLib|PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.inf UefiBootServicesTableLib|PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf [Components] @@ -32,3 +36,4 @@ [Components] # Unit test host applications # PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibUnitTestHost.inf + PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf -- 2.28.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#87873): https://edk2.groups.io/g/devel/message/87873 Mute This Topic: https://groups.io/mt/89956033/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-