From 68ee42c99126dca11a116fa9c22c428374a0ac80 Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Wed, 17 Jun 2020 12:09:54 -0700 Subject: PrmPkg/DxePrmModuleDiscoveryLib: Add initial host-based unit tests 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 Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Michael Kubacki Acked-by: Michael D Kinney Acked-by: Liming Gao Acked-by: Leif Lindholm Reviewed-by: Ankit Sinha --- .../DxePrmModuleDiscoveryLib.c | 1 - .../DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h | 12 ++ .../UnitTest/DxePrmModuleDiscoveryLibUnitTest.c | 209 +++++++++++++++++++++ .../DxePrmModuleDiscoveryLibUnitTestHost.inf | 39 ++++ PrmPkg/Test/PrmPkgHostTest.dsc | 5 + 5 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c create mode 100644 PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf (limited to 'PrmPkg') diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c b/PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c index 6977799aa8..0dd6a76be4 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/PrmModuleDiscovery.h b/PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h index 79058d1531..ea42cf2725 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/DxePrmModuleDiscoveryLibUnitTest.c b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c new file mode 100644 index 0000000000..ef8abe397c --- /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 +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#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/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf new file mode 100644 index 0000000000..8aae1f7cd7 --- /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 1f44037d01..67fb4f5bd0 100644 --- a/PrmPkg/Test/PrmPkgHostTest.dsc +++ b/PrmPkg/Test/PrmPkgHostTest.dsc @@ -19,7 +19,11 @@ !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 @@ # Unit test host applications # PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibUnitTestHost.inf + PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf -- cgit