]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PrmPkg/DxePrmModuleDiscoveryLib: Add initial host-based unit tests
authorMichael Kubacki <michael.kubacki@microsoft.com>
Wed, 17 Jun 2020 19:09:54 +0000 (12:09 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 5 Apr 2022 00:42:38 +0000 (00:42 +0000)
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>
PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c
PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h
PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c [new file with mode: 0644]
PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf [new file with mode: 0644]
PrmPkg/Test/PrmPkgHostTest.dsc

index 6977799aa8f35e67dac93691186765c23b3d75e8..0dd6a76be4d78f1ef9ff4169b834ae92a6b8da56 100644 (file)
@@ -87,7 +87,6 @@ GetNextPrmModuleEntry (
                                           otherwise, NULL is returned.\r
 \r
 **/\r
-STATIC\r
 PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY *\r
 CreateNewPrmModuleImageContextListEntry (\r
   VOID\r
index 79058d15317e1f4117c285d470479dff66b3e76c..ea42cf272550a8395264434bdde378640b216336 100644 (file)
@@ -24,4 +24,16 @@ typedef struct {
 \r
 #pragma pack(pop)\r
 \r
+/**\r
+  Creates a new PRM Module Image Context linked list entry.\r
+\r
+  @retval PrmModuleImageContextListEntry  If successful, a pointer a PRM Module Image Context linked list entry\r
+                                          otherwise, NULL is returned.\r
+\r
+**/\r
+PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY *\r
+CreateNewPrmModuleImageContextListEntry (\r
+  VOID\r
+  );\r
+\r
 #endif\r
diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTest.c
new file mode 100644 (file)
index 0000000..ef8abe3
--- /dev/null
@@ -0,0 +1,209 @@
+/** @file\r
+\r
+  Unit tests for the PRM Module Discovery Library.\r
+\r
+  Copyright (c) Microsoft Corporation\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <stdarg.h>\r
+#include <stddef.h>\r
+#include <setjmp.h>\r
+#include <cmocka.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/PrmModuleDiscoveryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UnitTestLib.h>\r
+\r
+#include "../PrmModuleDiscovery.h"\r
+\r
+#define UNIT_TEST_NAME          "PRM Module Discovery Library Unit Test"\r
+#define UNIT_TEST_VERSION       "0.1"\r
+\r
+///=== TEST CASES =================================================================================\r
+\r
+///===== CREATE NEW PRM MODULE IMAGE CONTEXT LIST ENTRY TESTS SUITE ==================================================\r
+\r
+/**\r
+  Verifies that the buffer returned can be deallocated.\r
+\r
+  @param[in]  Context             [Optional] An optional context parameter.\r
+                                  Not used in this unit test.\r
+\r
+  @retval  UNIT_TEST_PASSED                      Unit test case prerequisites are met.\r
+  @retval  UNIT_TEST_ERROR_PREREQUISITE_NOT_MET  Test case should be skipped..\r
+\r
+**/\r
+UNIT_TEST_STATUS\r
+EFIAPI\r
+PrmModuleImageContextListEntryShouldDeallocate (\r
+  IN UNIT_TEST_CONTEXT            Context\r
+  )\r
+{\r
+  PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY   *ListEntry;\r
+\r
+  ListEntry = CreateNewPrmModuleImageContextListEntry ();\r
+\r
+  UT_ASSERT_NOT_NULL (ListEntry);\r
+  if (ListEntry != NULL) {\r
+    FreePool (ListEntry);\r
+  }\r
+\r
+  return UNIT_TEST_PASSED;\r
+}\r
+\r
+/**\r
+  Verifies that the list entry signature is set to the appropriate value.\r
+\r
+  @param[in]  Context             [Optional] An optional context parameter.\r
+                                  Not used in this unit test.\r
+\r
+  @retval  UNIT_TEST_PASSED                      Unit test case prerequisites are met.\r
+  @retval  UNIT_TEST_ERROR_PREREQUISITE_NOT_MET  Test case should be skipped..\r
+\r
+**/\r
+UNIT_TEST_STATUS\r
+EFIAPI\r
+PrmModuleImageContextListEntrySignatureShouldBeValid (\r
+  IN UNIT_TEST_CONTEXT            Context\r
+  )\r
+{\r
+  PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY   *ListEntry;\r
+\r
+  ListEntry = CreateNewPrmModuleImageContextListEntry ();\r
+\r
+  UT_ASSERT_TRUE (ListEntry->Signature == PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY_SIGNATURE);\r
+\r
+  if (ListEntry != NULL) {\r
+    FreePool (ListEntry);\r
+  }\r
+\r
+  return UNIT_TEST_PASSED;\r
+}\r
+\r
+/**\r
+  Verifies that the Context buffer in the list entry is initialized to zero.\r
+\r
+  @param[in]  Context             [Optional] An optional context parameter.\r
+                                  Not used in this unit test.\r
+\r
+  @retval  UNIT_TEST_PASSED                      Unit test case prerequisites are met.\r
+  @retval  UNIT_TEST_ERROR_PREREQUISITE_NOT_MET  Test case should be skipped..\r
+\r
+**/\r
+UNIT_TEST_STATUS\r
+EFIAPI\r
+PrmModuleImageContextListEntryImageContextShouldBeZeroed (\r
+  IN UNIT_TEST_CONTEXT            Context\r
+  )\r
+{\r
+  PRM_MODULE_IMAGE_CONTEXT_LIST_ENTRY   *ListEntry;\r
+  PRM_MODULE_IMAGE_CONTEXT              ImageContext;\r
+\r
+  ListEntry = CreateNewPrmModuleImageContextListEntry ();\r
+\r
+  ZeroMem (&ImageContext, sizeof (ImageContext));\r
+  UT_ASSERT_MEM_EQUAL (&ListEntry->Context, &ImageContext, sizeof (ImageContext));\r
+\r
+  if (ListEntry != NULL) {\r
+    FreePool (ListEntry);\r
+  }\r
+\r
+  return UNIT_TEST_PASSED;\r
+}\r
+\r
+///=== TEST ENGINE ================================================================================\r
+\r
+/**\r
+  Entry point for the PRM Context Buffer Library unit tests.\r
+\r
+  @param[in] ImageHandle  The firmware allocated handle for the EFI image.\r
+  @param[in] SystemTable  A pointer to the EFI System Table.\r
+\r
+  @retval EFI_SUCCESS     The entry point executed successfully.\r
+  @retval other           Some error occurred when executing this entry point.\r
+\r
+**/\r
+int main ()\r
+{\r
+  EFI_STATUS                  Status;\r
+  UNIT_TEST_FRAMEWORK_HANDLE  Framework;\r
+  UNIT_TEST_SUITE_HANDLE      CreateNewPrmModuleImageContextListEntryTests;\r
+\r
+  Framework = NULL;\r
+\r
+  DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION));\r
+\r
+  //\r
+  // Start setting up the test framework for running the tests.\r
+  //\r
+  Status = InitUnitTestFramework (&Framework, UNIT_TEST_NAME, gEfiCallerBaseName, UNIT_TEST_VERSION);\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));\r
+    goto EXIT;\r
+  }\r
+\r
+  Status =  CreateUnitTestSuite (\r
+              &CreateNewPrmModuleImageContextListEntryTests,\r
+              Framework,\r
+              "Create New PRM Module Image Context List Entry Tests",\r
+              "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry",\r
+              NULL,\r
+              NULL\r
+              );\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry\n"));\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto EXIT;\r
+  }\r
+\r
+  AddTestCase (\r
+    CreateNewPrmModuleImageContextListEntryTests,\r
+    "",\r
+    "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntryShouldDeallocate",\r
+    PrmModuleImageContextListEntryShouldDeallocate,\r
+    NULL,\r
+    NULL,\r
+    NULL\r
+    );\r
+\r
+  AddTestCase (\r
+    CreateNewPrmModuleImageContextListEntryTests,\r
+    "",\r
+    "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntrySignatureShouldBeValid",\r
+    PrmModuleImageContextListEntrySignatureShouldBeValid,\r
+    NULL,\r
+    NULL,\r
+    NULL\r
+    );\r
+\r
+  AddTestCase (\r
+    CreateNewPrmModuleImageContextListEntryTests,\r
+    "",\r
+    "PrmModuleDiscoveryLib.CreateNewPrmModuleImageContextListEntry.ListEntryImageContextShouldBeZeroed",\r
+    PrmModuleImageContextListEntryImageContextShouldBeZeroed,\r
+    NULL,\r
+    NULL,\r
+    NULL\r
+    );\r
+\r
+  //\r
+  // Execute the tests.\r
+  //\r
+  Status = RunAllTestSuites (Framework);\r
+\r
+EXIT:\r
+  if (Framework)\r
+  {\r
+    FreeUnitTestFramework (Framework);\r
+  }\r
+\r
+  return Status;\r
+}\r
diff --git a/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf b/PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf
new file mode 100644 (file)
index 0000000..8aae1f7
--- /dev/null
@@ -0,0 +1,39 @@
+## @file\r
+#  PRM Module Discovery Library Host-Based Unit Tests\r
+#\r
+#  Copyright (c) Microsoft Corporation\r
+#\r
+#  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010006\r
+  BASE_NAME                      = PrmModuleDiscoveryLibUnitTestHost\r
+  FILE_GUID                      = 864886C5-5458-4FF5-A160-4D5B2EAEC558\r
+  MODULE_TYPE                    = HOST_APPLICATION\r
+  VERSION_STRING                 = 1.0\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64\r
+#\r
+\r
+[Sources]\r
+  DxePrmModuleDiscoveryLibUnitTest.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
+  UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec\r
+  PrmPkg/PrmPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  BaseMemoryLib\r
+  DebugLib\r
+  MemoryAllocationLib\r
+  PrmModuleDiscoveryLib\r
+  UefiBootServicesTableLib\r
+  UnitTestLib\r
index 1f44037d0102109904552bcda2eeb77198bc7617..67fb4f5bd0d27f3d6af2f6c69ff7425116eab64e 100644 (file)
 !include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc\r
 \r
 [LibraryClasses]\r
+  PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf\r
+  PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
   PrmContextBufferLib|PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.inf\r
+  PrmModuleDiscoveryLib|PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.inf\r
+  PrmPeCoffLib|PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.inf\r
   UefiBootServicesTableLib|PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf\r
 \r
 [Components]\r
@@ -32,3 +36,4 @@
   # Unit test host applications\r
   #\r
   PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibUnitTestHost.inf\r
+  PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscoveryLibUnitTestHost.inf\r