/** @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; | |
} |