--- /dev/null
+/** @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