3 Unit tests for the PRM Context Buffer Library.
5 Copyright (c) Microsoft Corporation
6 SPDX-License-Identifier: BSD-2-Clause-Patent
19 #include <Guid/ZeroGuid.h>
20 #include <Library/BaseLib.h>
21 #include <Library/BaseMemoryLib.h>
22 #include <Library/DebugLib.h>
23 #include <Library/MemoryAllocationLib.h>
24 #include <Library/PrintLib.h>
25 #include <Library/PrmContextBufferLib.h>
26 #include <Library/UefiBootServicesTableLib.h>
27 #include <Library/UnitTestLib.h>
28 #include <Protocol/PrmConfig.h>
30 #define UNIT_TEST_NAME "PRM Context Buffer Library Unit Test"
31 #define UNIT_TEST_VERSION "0.1"
33 /// === TEST DATA ==================================================================================
35 EFI_HANDLE mTestProtocolHandle
;
37 // *----------------------------------------------------------------------------------*
38 // * Context Structures *
39 // *----------------------------------------------------------------------------------*
41 PRM_MODULE_CONTEXT_BUFFERS
*InstallationStructure
;
43 PRM_GUID_SEARCH_TYPE GuidSearchType
;
45 EFI_GUID
*ExpectedModuleGuid
;
46 EFI_STATUS ExpectedStatus
;
47 } PRM_CONTEXT_BUFFERS_TEST_CONTEXT
;
50 EFI_GUID
*HandlerGuid
;
51 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
52 PRM_CONTEXT_BUFFER
*ExpectedContextBuffer
;
53 EFI_STATUS ExpectedStatus
;
54 } PRM_CONTEXT_BUFFER_TEST_CONTEXT
;
56 // *----------------------------------------------------------------------------------*
58 // *----------------------------------------------------------------------------------*
60 // {52960b90-2f3a-4917-b91a-ed5f599a8809}
61 #define HANDLER_TEST_GUID_1 {0x52960b90, 0x2f3a, 0x4917, { 0xb9, 0x1a, 0xed, 0x5f, 0x59, 0x9a, 0x88, 0x09 }}
62 EFI_GUID mHandlerTestGuid1
= HANDLER_TEST_GUID_1
;
64 // {9316a80d-06dc-417b-b21d-6b3c2ae4ed6f}
65 #define HANDLER_TEST_GUID_2 {0x9316a80d, 0x06dc, 0x417b, { 0xb2, 0x1d, 0x6b, 0x3c, 0x2a, 0xe4, 0xed, 0x6f }}
66 EFI_GUID mHandlerTestGuid2
= HANDLER_TEST_GUID_2
;
68 // {d32ac8ba-6cc6-456f-9ed9-9233fa310434}
69 #define HANDLER_TEST_GUID_3 {0xd32ac8ba, 0x6cc6, 0x456f, { 0x9e, 0xd9, 0x92, 0x33, 0xfa, 0x31, 0x04, 0x34 }}
70 EFI_GUID mHandlerTestGuid3
= HANDLER_TEST_GUID_3
;
72 // {faadaa95-070b-4a34-a919-18305dc07370}
73 #define MODULE_TEST_GUID_1 {0xfaadaa95, 0x070b, 0x4a34, { 0xa9, 0x19, 0x18, 0x30, 0x5d, 0xc0, 0x73, 0x70 }}
74 EFI_GUID mModuleTestGuid1
= MODULE_TEST_GUID_1
;
76 // {0ea24584-731c-4863-9100-75780af509a7}
77 #define MODULE_TEST_GUID_2 {0x0ea24584, 0x731c, 0x4863, { 0x91, 0x00, 0x75, 0x78, 0x0a, 0xf5, 0x09, 0xa7 }}
78 EFI_GUID mModuleTestGuid2
= MODULE_TEST_GUID_2
;
80 // {f456b7a1-82a6-4427-8486-87e3a602df43}
81 #define MODULE_TEST_GUID_3 {0xf456b7a1, 0x82a6, 0x4427, { 0x84, 0x86, 0x87, 0xe3, 0xa6, 0x02, 0xdf, 0x43 }}
82 EFI_GUID mModuleTestGuid3
= MODULE_TEST_GUID_3
;
84 // {4a941a9c-9dcf-471b-94b5-d9e2d8c64a1b}
85 #define NEGATIVE_TEST_GUID {0x4a941a9c, 0x9dcf, 0x471b, {0x94, 0xb5, 0xd9, 0xe2, 0xd8, 0xc6, 0x4a, 0x1b }}
86 EFI_GUID mNegativeTestGuid
= NEGATIVE_TEST_GUID
;
88 // *----------------------------------------------------------------------------------*
89 // * PRM Static Test Structures *
90 // *----------------------------------------------------------------------------------*
92 PRM_DATA_BUFFER mTestStaticDataBuffer1
= {
94 PRM_DATA_BUFFER_HEADER_SIGNATURE
,
95 sizeof (PRM_DATA_BUFFER
)
97 // No data in the buffer (only a header)
100 PRM_CONTEXT_BUFFER mTestPrmContextBuffer1
= {
101 PRM_CONTEXT_BUFFER_SIGNATURE
, // Signature
102 PRM_CONTEXT_BUFFER_INTERFACE_VERSION
, // Version
104 HANDLER_TEST_GUID_1
, // HandlerGuid
105 &mTestStaticDataBuffer1
// StaticDataBuffer
108 PRM_CONTEXT_BUFFER mTestPrmContextBuffer2
[2] = {
111 PRM_CONTEXT_BUFFER_SIGNATURE
, // Signature
112 PRM_CONTEXT_BUFFER_INTERFACE_VERSION
, // Version
114 HANDLER_TEST_GUID_2
, // HandlerGuid
115 NULL
// StaticDataBuffer
119 PRM_CONTEXT_BUFFER_SIGNATURE
, // Signature
120 PRM_CONTEXT_BUFFER_INTERFACE_VERSION
, // Version
122 HANDLER_TEST_GUID_3
, // HandlerGuid
123 &mTestStaticDataBuffer1
// StaticDataBuffer (reuse buffer StaticDataBuffer1)
127 PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers1
= {
130 &mTestPrmContextBuffer1
,
134 PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers2
= {
137 &mTestPrmContextBuffer1
,
141 PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers3
= {
144 &mTestPrmContextBuffer2
[0],
148 // *----------------------------------------------------------------------------------*
150 // *----------------------------------------------------------------------------------*
152 // * Searches by module GUID *
153 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
154 // + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |
155 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
156 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers00
= { &mTestPrmModuleContextBuffers1
, NULL
, ByModuleGuid
, &mModuleTestGuid1
, &mModuleTestGuid1
, EFI_SUCCESS
};
157 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers01
= { &mTestPrmModuleContextBuffers2
, NULL
, ByModuleGuid
, &mModuleTestGuid2
, &mModuleTestGuid2
, EFI_SUCCESS
};
158 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers02
= { &mTestPrmModuleContextBuffers3
, NULL
, ByModuleGuid
, &mModuleTestGuid3
, &mModuleTestGuid3
, EFI_SUCCESS
};
159 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers03
= { &mTestPrmModuleContextBuffers3
, NULL
, ByModuleGuid
, &mNegativeTestGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
160 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers04
= { &mTestPrmModuleContextBuffers1
, NULL
, ByModuleGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
162 // * Searches by handler GUID *
163 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
164 // + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |
165 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
166 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers05
= { &mTestPrmModuleContextBuffers1
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &mModuleTestGuid1
, EFI_SUCCESS
};
167 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers06
= { &mTestPrmModuleContextBuffers1
, NULL
, ByHandlerGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
168 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers07
= { &mTestPrmModuleContextBuffers2
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &mModuleTestGuid2
, EFI_SUCCESS
};
169 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers08
= { &mTestPrmModuleContextBuffers2
, NULL
, ByHandlerGuid
, &mNegativeTestGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
170 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers09
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &gZeroGuid
, EFI_NOT_FOUND
};
171 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers10
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid2
, &mModuleTestGuid3
, EFI_SUCCESS
};
172 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers11
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid3
, &mModuleTestGuid3
, EFI_SUCCESS
};
173 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers12
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
175 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*mContextBuffersArray
[] = {
191 // +----------------------+----------------------------------+------------------------------------------+--------------------+
192 // + HandlerGuid | ContextBuffers | ExpectedContextBuffer | ExpectedStatus |
193 // +----------------------+----------------------------------+------------------------------------------+--------------------+
194 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer00
= { &mHandlerTestGuid1
, &mTestPrmModuleContextBuffers1
, &mTestPrmContextBuffer1
, EFI_SUCCESS
};
195 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer01
= { &mHandlerTestGuid1
, &mTestPrmModuleContextBuffers2
, &mTestPrmContextBuffer1
, EFI_SUCCESS
};
196 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer02
= { &mHandlerTestGuid2
, &mTestPrmModuleContextBuffers3
, &mTestPrmContextBuffer2
[0], EFI_SUCCESS
};
197 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer03
= { &mHandlerTestGuid3
, &mTestPrmModuleContextBuffers3
, &mTestPrmContextBuffer2
[1], EFI_SUCCESS
};
198 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer04
= { &mNegativeTestGuid
, &mTestPrmModuleContextBuffers1
, NULL
, EFI_NOT_FOUND
};
199 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer05
= { &gZeroGuid
, &mTestPrmModuleContextBuffers3
, NULL
, EFI_NOT_FOUND
};
201 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*mContextBufferArray
[] = {
210 /// === HELPER FUNCTIONS ===========================================================================
214 /// === TEST CASES =================================================================================
216 /// ===== BASIC SUITE ==================================================
219 Verifies that passing NULL arguments to all library functions fails with EFI_INVALID_PARAMETER.
221 @param[in] Context [Optional] An optional context parameter.
222 Not used in this unit test.
224 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
225 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
230 NullPointerArgumentsShouldFailGracefully (
231 IN UNIT_TEST_CONTEXT Context
235 PRM_CONTEXT_BUFFER
*ContextBufferPtr
;
236 PRM_MODULE_CONTEXT_BUFFERS ModuleContextBuffers
;
237 PRM_MODULE_CONTEXT_BUFFERS
*ModuleContextBuffersPtr
;
239 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
240 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL
, &ModuleContextBuffers
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
241 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid
, NULL
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
242 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid
, &ModuleContextBuffers
, NULL
), EFI_INVALID_PARAMETER
);
244 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
245 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, NULL
, &ModuleContextBuffersPtr
), EFI_INVALID_PARAMETER
);
246 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, &Guid
, NULL
), EFI_INVALID_PARAMETER
);
248 UT_ASSERT_EQUAL (GetContextBuffer (NULL
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
249 UT_ASSERT_EQUAL (GetContextBuffer (NULL
, &ModuleContextBuffers
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
250 UT_ASSERT_EQUAL (GetContextBuffer (&Guid
, NULL
, &ContextBufferPtr
), EFI_NOT_FOUND
);
251 UT_ASSERT_EQUAL (GetContextBuffer (&Guid
, &ModuleContextBuffers
, NULL
), EFI_INVALID_PARAMETER
);
253 return UNIT_TEST_PASSED
;
256 /// ===== FUNCTIONAL CORRECTNESS SUITE ==================================================
259 Functional Correctness pre-requisite function.
261 Installs a gPrmConfigProtocolGuid protocol instance as specified by the provided
262 context in preparation for unit test execution
264 @param[in] Context [Optional] An optional parameter that enables:
265 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
266 context information for this unit test.
268 @retval UNIT_TEST_PASSED Unit test case prerequisites
270 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.
276 InitializeFunctionalCorrectness (
277 IN UNIT_TEST_CONTEXT Context
281 PRM_CONFIG_PROTOCOL
*PrmConfigProtocol
;
282 PRM_MODULE_CONTEXT_BUFFERS
*ModuleContextBuffers
;
283 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
285 UT_ASSERT_NOT_NULL (Context
);
286 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*)Context
;
287 ModuleContextBuffers
= TestContext
->InstallationStructure
;
289 PrmConfigProtocol
= AllocateZeroPool (sizeof (*PrmConfigProtocol
));
290 if (PrmConfigProtocol
== NULL
) {
291 return UNIT_TEST_ERROR_PREREQUISITE_NOT_MET
;
294 CopyGuid (&PrmConfigProtocol
->ModuleContextBuffers
.ModuleGuid
, &ModuleContextBuffers
->ModuleGuid
);
295 PrmConfigProtocol
->ModuleContextBuffers
.BufferCount
= ModuleContextBuffers
->BufferCount
;
296 PrmConfigProtocol
->ModuleContextBuffers
.Buffer
= ModuleContextBuffers
->Buffer
;
298 Status
= gBS
->InstallProtocolInterface (
299 &TestContext
->Handle
,
300 &gPrmConfigProtocolGuid
,
301 EFI_NATIVE_INTERFACE
,
302 (VOID
*)PrmConfigProtocol
304 UT_ASSERT_NOT_EFI_ERROR (Status
);
306 return UNIT_TEST_PASSED
;
310 Functional Correctness cleanup function.
312 Uninstalls the gPrmConfigProtocolGuid protocol instance as specified by the
313 provided context. This is used to clean up the mocked protocol database after
316 @param[in] Context [Optional] An optional parameter that enables:
317 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
318 context information for this unit test.
320 @retval UNIT_TEST_PASSED Test case cleanup succeeded.
321 @retval UNIT_TEST_ERROR_CLEANUP_FAILED Test case cleanup failed.
327 DeInitializeFunctionalCorrectness (
328 IN UNIT_TEST_CONTEXT Context
332 PRM_CONFIG_PROTOCOL
*PrmConfigProtocol
;
333 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
335 UT_ASSERT_NOT_NULL (Context
);
336 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*)Context
;
338 Status
= gBS
->HandleProtocol (
340 &gPrmConfigProtocolGuid
,
341 (VOID
**)&PrmConfigProtocol
343 UT_ASSERT_NOT_EFI_ERROR (Status
);
345 if (!EFI_ERROR (Status
)) {
346 Status
= gBS
->UninstallProtocolInterface (
348 &gPrmConfigProtocolGuid
,
351 UT_ASSERT_NOT_EFI_ERROR (Status
);
352 if (!EFI_ERROR (Status
)) {
353 FreePool (PrmConfigProtocol
);
357 return UNIT_TEST_PASSED
;
361 Verifies that the correct PRM_MODULE_CONTEXT_BUFFERS structure instance is found
362 for a given PRM module or PRM handler GUID.
364 @param[in] Context [Optional] An optional context parameter.
365 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
366 context information for this unit test.
368 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
369 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
374 VerifyGetModuleContextBuffers (
375 IN UNIT_TEST_CONTEXT Context
379 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
380 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
382 ContextBuffers
= NULL
;
383 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*)Context
;
385 Status
= GetModuleContextBuffers (TestContext
->GuidSearchType
, TestContext
->Guid
, &ContextBuffers
);
386 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
388 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
389 UT_ASSERT_TRUE (CompareGuid (TestContext
->ExpectedModuleGuid
, &ContextBuffers
->ModuleGuid
));
391 "%a: Searching by %a GUID ({%g}) returned ContextBuffers at 0x%x\n",
393 ((TestContext
->GuidSearchType
== ByModuleGuid
) ? "module" : "handler"),
395 (UINTN
)ContextBuffers
399 return UNIT_TEST_PASSED
;
403 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid
404 in the provided PRM_MODULE_CONTEXT_BUFFERS structure.
406 @param[in] Context [Optional] An optional context parameter.
407 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
408 context information for this unit test.
410 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
411 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
416 VerifyFindContextBufferInModuleBuffers (
417 IN UNIT_TEST_CONTEXT Context
421 PRM_CONTEXT_BUFFER
*FoundContextBuffer
;
422 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
423 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*TestContext
;
425 ContextBuffers
= NULL
;
426 FoundContextBuffer
= NULL
;
427 TestContext
= (PRM_CONTEXT_BUFFER_TEST_CONTEXT
*)Context
;
429 Status
= FindContextBufferInModuleBuffers (TestContext
->HandlerGuid
, TestContext
->ContextBuffers
, &FoundContextBuffer
);
430 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
432 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
433 UT_ASSERT_NOT_NULL (FoundContextBuffer
);
434 UT_ASSERT_TRUE (FoundContextBuffer
== TestContext
->ExpectedContextBuffer
);
437 return UNIT_TEST_PASSED
;
441 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid.
443 This function checks both the case when a PRM_MODULE_CONTEXT_BUFFERS structure pointer is provided and
447 - In the future, this function should mock the internal calls to other library functions but the direct
448 calls are left in place for now.
449 - The PrmModuleContextBuffers being NULL is not actually tested at the moment. In the future, that case
450 should also be added.
452 @param[in] Context [Optional] An optional context parameter.
453 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
454 context information for this unit test.
456 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
457 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
462 VerifyGetContextBuffer (
463 IN UNIT_TEST_CONTEXT Context
467 PRM_CONTEXT_BUFFER
*FoundContextBuffer
;
468 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
469 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*TestContext
;
471 ContextBuffers
= NULL
;
472 FoundContextBuffer
= NULL
;
473 TestContext
= (PRM_CONTEXT_BUFFER_TEST_CONTEXT
*)Context
;
475 Status
= GetContextBuffer (TestContext
->HandlerGuid
, TestContext
->ContextBuffers
, &FoundContextBuffer
);
476 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
478 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
479 UT_ASSERT_NOT_NULL (FoundContextBuffer
);
480 UT_ASSERT_TRUE (FoundContextBuffer
== TestContext
->ExpectedContextBuffer
);
483 return UNIT_TEST_PASSED
;
486 /// === TEST ENGINE ================================================================================
489 Entry point for the PRM Context Buffer Library unit tests.
491 @param[in] ImageHandle The firmware allocated handle for the EFI image.
492 @param[in] SystemTable A pointer to the EFI System Table.
494 @retval EFI_SUCCESS The entry point executed successfully.
495 @retval other Some error occurred when executing this entry point.
504 UNIT_TEST_FRAMEWORK_HANDLE Framework
;
505 UNIT_TEST_SUITE_HANDLE BasicTests
;
506 UNIT_TEST_SUITE_HANDLE FunctionalCorrectnessTests
;
507 CHAR8 TestCaseClassNameString
[256];
508 CHAR8 TestCaseDescriptionString
[256];
512 DEBUG ((DEBUG_INFO
, "%a v%a\n", UNIT_TEST_NAME
, UNIT_TEST_VERSION
));
515 // Start setting up the test framework for running the tests.
517 Status
= InitUnitTestFramework (&Framework
, UNIT_TEST_NAME
, gEfiCallerBaseName
, UNIT_TEST_VERSION
);
518 if (EFI_ERROR (Status
)) {
519 DEBUG ((DEBUG_ERROR
, "Failed in InitUnitTestFramework. Status = %r\n", Status
));
524 // Add all test suites and tests.
526 Status
= CreateUnitTestSuite (&BasicTests
, Framework
, "Basic Context Buffer Tests", "PrmContextBufferLib.Basic", NULL
, NULL
);
527 if (EFI_ERROR (Status
)) {
528 DEBUG ((DEBUG_ERROR
, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Basic\n"));
529 Status
= EFI_OUT_OF_RESOURCES
;
536 "PrmContextBufferLib.Basic.NullPointerGracefulFailure",
537 NullPointerArgumentsShouldFailGracefully
,
543 Status
= CreateUnitTestSuite (&FunctionalCorrectnessTests
, Framework
, "Functional Correctness Tests", "PrmContextBufferLib.Functional", NULL
, NULL
);
544 if (EFI_ERROR (Status
)) {
545 DEBUG ((DEBUG_ERROR
, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Functional\n"));
546 Status
= EFI_OUT_OF_RESOURCES
;
551 // Add Functional Correctness unit tests
553 for (Index
= 0; Index
< ARRAY_SIZE (mContextBuffersArray
); Index
++) {
554 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
555 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
558 &TestCaseClassNameString
[0],
559 ARRAY_SIZE (TestCaseClassNameString
),
560 "PrmContextBufferLib.Functional.VerifyGetModuleContextBuffers%d",
564 &TestCaseDescriptionString
[0],
565 ARRAY_SIZE (TestCaseDescriptionString
),
566 "Verify Get PRM Module Context Buffers Structure by %a GUID %d\n",
567 ((mContextBuffersArray
[Index
]->GuidSearchType
== ByModuleGuid
) ? "module" : "handler"),
572 FunctionalCorrectnessTests
,
573 &TestCaseDescriptionString
[0],
574 &TestCaseClassNameString
[0],
575 VerifyGetModuleContextBuffers
,
576 InitializeFunctionalCorrectness
,
577 DeInitializeFunctionalCorrectness
,
578 mContextBuffersArray
[Index
]
582 for (Index
= 0; Index
< ARRAY_SIZE (mContextBufferArray
); Index
++) {
583 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
584 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
587 &TestCaseClassNameString
[0],
588 ARRAY_SIZE (TestCaseClassNameString
),
589 "PrmContextBufferLib.Functional.VerifyFindContextBufferInModuleBuffers%d",
593 &TestCaseDescriptionString
[0],
594 ARRAY_SIZE (TestCaseDescriptionString
),
595 "Verify Find PRM Context Buffer by Handler GUID %d\n",
600 FunctionalCorrectnessTests
,
601 &TestCaseDescriptionString
[0],
602 &TestCaseClassNameString
[0],
603 VerifyFindContextBufferInModuleBuffers
,
606 mContextBufferArray
[Index
]
610 for (Index
= 0; Index
< ARRAY_SIZE (mContextBufferArray
); Index
++) {
611 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
612 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
615 &TestCaseClassNameString
[0],
616 ARRAY_SIZE (TestCaseClassNameString
),
617 "PrmContextBufferLib.Functional.VerifyGetContextBuffer%d",
621 &TestCaseDescriptionString
[0],
622 ARRAY_SIZE (TestCaseDescriptionString
),
623 "Verify Get PRM Context Buffer by Handler GUID %d\n",
628 FunctionalCorrectnessTests
,
629 &TestCaseDescriptionString
[0],
630 &TestCaseClassNameString
[0],
631 VerifyGetContextBuffer
,
634 mContextBufferArray
[Index
]
639 // Execute the tests.
641 Status
= RunAllTestSuites (Framework
);
645 FreeUnitTestFramework (Framework
);