summaryrefslogtreecommitdiffstats
path: root/PrmPkg
diff options
context:
space:
mode:
authorMichael Kubacki <michael.kubacki@microsoft.com>2020-06-17 12:09:54 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-04-05 00:42:38 +0000
commit68ee42c99126dca11a116fa9c22c428374a0ac80 (patch)
treeb0392ad1339acc7a0b8c8f57e16e9b3e15f2b8bb /PrmPkg
parent82d15dc6c11c4b38b9b2fbfad4768b2f56363844 (diff)
downloadedk2-68ee42c99126dca11a116fa9c22c428374a0ac80.tar.gz
edk2-68ee42c99126dca11a116fa9c22c428374a0ac80.tar.bz2
edk2-68ee42c99126dca11a116fa9c22c428374a0ac80.zip
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 <afish@apple.com> Cc: Kang Gao <kang.gao@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Michael Kubacki <michael.kubacki@microsoft.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Benjamin You <benjamin.you@intel.com> Cc: Liu Yun <yun.y.liu@intel.com> Cc: Ankit Sinha <ankit.sinha@intel.com> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com> Acked-by: Liming Gao <gaoliming@byosoft.com.cn> Acked-by: Leif Lindholm <quic_llindhol@quicinc.com> Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
Diffstat (limited to 'PrmPkg')
-rw-r--r--PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c1
-rw-r--r--PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h12
-rw-r--r--PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c209
-rw-r--r--PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf39
-rw-r--r--PrmPkg/Test/PrmPkgHostTest.dsc5
5 files changed, 265 insertions, 1 deletions
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 <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/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