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],
149 //*----------------------------------------------------------------------------------*
151 //*----------------------------------------------------------------------------------*
153 //* Searches by module GUID *
154 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
155 // + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |
156 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
157 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers00
= { &mTestPrmModuleContextBuffers1
, NULL
, ByModuleGuid
, &mModuleTestGuid1
, &mModuleTestGuid1
, EFI_SUCCESS
};
158 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers01
= { &mTestPrmModuleContextBuffers2
, NULL
, ByModuleGuid
, &mModuleTestGuid2
, &mModuleTestGuid2
, EFI_SUCCESS
};
159 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers02
= { &mTestPrmModuleContextBuffers3
, NULL
, ByModuleGuid
, &mModuleTestGuid3
, &mModuleTestGuid3
, EFI_SUCCESS
};
160 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers03
= { &mTestPrmModuleContextBuffers3
, NULL
, ByModuleGuid
, &mNegativeTestGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
161 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers04
= { &mTestPrmModuleContextBuffers1
, NULL
, ByModuleGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
163 //* Searches by handler GUID *
164 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
165 // + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |
166 // +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+
167 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers05
= { &mTestPrmModuleContextBuffers1
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &mModuleTestGuid1
, EFI_SUCCESS
};
168 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers06
= { &mTestPrmModuleContextBuffers1
, NULL
, ByHandlerGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
169 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers07
= { &mTestPrmModuleContextBuffers2
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &mModuleTestGuid2
, EFI_SUCCESS
};
170 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers08
= { &mTestPrmModuleContextBuffers2
, NULL
, ByHandlerGuid
, &mNegativeTestGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
171 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers09
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid1
, &gZeroGuid
, EFI_NOT_FOUND
};
172 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers10
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid2
, &mModuleTestGuid3
, EFI_SUCCESS
};
173 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers11
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &mHandlerTestGuid3
, &mModuleTestGuid3
, EFI_SUCCESS
};
174 PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers12
= { &mTestPrmModuleContextBuffers3
, NULL
, ByHandlerGuid
, &gZeroGuid
, &gZeroGuid
, EFI_NOT_FOUND
};
176 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*mContextBuffersArray
[] = {
192 // +----------------------+----------------------------------+------------------------------------------+--------------------+
193 // + HandlerGuid | ContextBuffers | ExpectedContextBuffer | ExpectedStatus |
194 // +----------------------+----------------------------------+------------------------------------------+--------------------+
195 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer00
= { &mHandlerTestGuid1
, &mTestPrmModuleContextBuffers1
, &mTestPrmContextBuffer1
, EFI_SUCCESS
};
196 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer01
= { &mHandlerTestGuid1
, &mTestPrmModuleContextBuffers2
, &mTestPrmContextBuffer1
, EFI_SUCCESS
};
197 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer02
= { &mHandlerTestGuid2
, &mTestPrmModuleContextBuffers3
, &mTestPrmContextBuffer2
[0], EFI_SUCCESS
};
198 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer03
= { &mHandlerTestGuid3
, &mTestPrmModuleContextBuffers3
, &mTestPrmContextBuffer2
[1], EFI_SUCCESS
};
199 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer04
= { &mNegativeTestGuid
, &mTestPrmModuleContextBuffers1
, NULL
, EFI_NOT_FOUND
};
200 PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer05
= { &gZeroGuid
, &mTestPrmModuleContextBuffers3
, NULL
, EFI_NOT_FOUND
};
202 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*mContextBufferArray
[] = {
211 ///=== HELPER FUNCTIONS ===========================================================================
215 ///=== TEST CASES =================================================================================
217 ///===== BASIC SUITE ==================================================
220 Verifies that passing NULL arguments to all library functions fails with EFI_INVALID_PARAMETER.
222 @param[in] Context [Optional] An optional context parameter.
223 Not used in this unit test.
225 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
226 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
231 NullPointerArgumentsShouldFailGracefully (
232 IN UNIT_TEST_CONTEXT Context
236 PRM_CONTEXT_BUFFER
*ContextBufferPtr
;
237 PRM_MODULE_CONTEXT_BUFFERS ModuleContextBuffers
;
238 PRM_MODULE_CONTEXT_BUFFERS
*ModuleContextBuffersPtr
;
240 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
241 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL
, &ModuleContextBuffers
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
242 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid
, NULL
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
243 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid
, &ModuleContextBuffers
, NULL
), EFI_INVALID_PARAMETER
);
245 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
246 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, NULL
, &ModuleContextBuffersPtr
), EFI_INVALID_PARAMETER
);
247 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid
, &Guid
, NULL
), EFI_INVALID_PARAMETER
);
249 UT_ASSERT_EQUAL (GetContextBuffer (NULL
, NULL
, NULL
), EFI_INVALID_PARAMETER
);
250 UT_ASSERT_EQUAL (GetContextBuffer (NULL
, &ModuleContextBuffers
, &ContextBufferPtr
), EFI_INVALID_PARAMETER
);
251 UT_ASSERT_EQUAL (GetContextBuffer (&Guid
, NULL
, &ContextBufferPtr
), EFI_NOT_FOUND
);
252 UT_ASSERT_EQUAL (GetContextBuffer (&Guid
, &ModuleContextBuffers
, NULL
), EFI_INVALID_PARAMETER
);
254 return UNIT_TEST_PASSED
;
257 ///===== FUNCTIONAL CORRECTNESS SUITE ==================================================
260 Functional Correctness pre-requisite function.
262 Installs a gPrmConfigProtocolGuid protocol instance as specified by the provided
263 context in preparation for unit test execution
265 @param[in] Context [Optional] An optional parameter that enables:
266 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
267 context information for this unit test.
269 @retval UNIT_TEST_PASSED Unit test case prerequisites
271 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.
277 InitializeFunctionalCorrectness (
278 IN UNIT_TEST_CONTEXT Context
282 PRM_CONFIG_PROTOCOL
*PrmConfigProtocol
;
283 PRM_MODULE_CONTEXT_BUFFERS
*ModuleContextBuffers
;
284 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
286 UT_ASSERT_NOT_NULL (Context
);
287 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*) Context
;
288 ModuleContextBuffers
= TestContext
->InstallationStructure
;
290 PrmConfigProtocol
= AllocateZeroPool (sizeof (*PrmConfigProtocol
));
291 if (PrmConfigProtocol
== NULL
) {
292 return UNIT_TEST_ERROR_PREREQUISITE_NOT_MET
;
295 CopyGuid (&PrmConfigProtocol
->ModuleContextBuffers
.ModuleGuid
, &ModuleContextBuffers
->ModuleGuid
);
296 PrmConfigProtocol
->ModuleContextBuffers
.BufferCount
= ModuleContextBuffers
->BufferCount
;
297 PrmConfigProtocol
->ModuleContextBuffers
.Buffer
= ModuleContextBuffers
->Buffer
;
299 Status
= gBS
->InstallProtocolInterface (
300 &TestContext
->Handle
,
301 &gPrmConfigProtocolGuid
,
302 EFI_NATIVE_INTERFACE
,
303 (VOID
*) PrmConfigProtocol
305 UT_ASSERT_NOT_EFI_ERROR (Status
);
307 return UNIT_TEST_PASSED
;
311 Functional Correctness cleanup function.
313 Uninstalls the gPrmConfigProtocolGuid protocol instance as specified by the
314 provided context. This is used to clean up the mocked protocol database after
317 @param[in] Context [Optional] An optional parameter that enables:
318 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
319 context information for this unit test.
321 @retval UNIT_TEST_PASSED Test case cleanup succeeded.
322 @retval UNIT_TEST_ERROR_CLEANUP_FAILED Test case cleanup failed.
328 DeInitializeFunctionalCorrectness (
329 IN UNIT_TEST_CONTEXT Context
333 PRM_CONFIG_PROTOCOL
*PrmConfigProtocol
;
334 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
336 UT_ASSERT_NOT_NULL (Context
);
337 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*) Context
;
339 Status
= gBS
->HandleProtocol (
341 &gPrmConfigProtocolGuid
,
342 (VOID
**) &PrmConfigProtocol
344 UT_ASSERT_NOT_EFI_ERROR (Status
);
346 if (!EFI_ERROR (Status
)) {
347 Status
= gBS
->UninstallProtocolInterface (
349 &gPrmConfigProtocolGuid
,
352 UT_ASSERT_NOT_EFI_ERROR (Status
);
353 if (!EFI_ERROR (Status
)) {
354 FreePool (PrmConfigProtocol
);
358 return UNIT_TEST_PASSED
;
362 Verifies that the correct PRM_MODULE_CONTEXT_BUFFERS structure instance is found
363 for a given PRM module or PRM handler GUID.
365 @param[in] Context [Optional] An optional context parameter.
366 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
367 context information for this unit test.
369 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
370 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
375 VerifyGetModuleContextBuffers (
376 IN UNIT_TEST_CONTEXT Context
380 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
381 PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*TestContext
;
383 ContextBuffers
= NULL
;
384 TestContext
= (PRM_CONTEXT_BUFFERS_TEST_CONTEXT
*) Context
;
386 Status
= GetModuleContextBuffers (TestContext
->GuidSearchType
, TestContext
->Guid
, &ContextBuffers
);
387 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
389 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
390 UT_ASSERT_TRUE (CompareGuid (TestContext
->ExpectedModuleGuid
, &ContextBuffers
->ModuleGuid
));
392 "%a: Searching by %a GUID ({%g}) returned ContextBuffers at 0x%x\n",
394 ((TestContext
->GuidSearchType
== ByModuleGuid
) ? "module" : "handler"),
396 (UINTN
) ContextBuffers
400 return UNIT_TEST_PASSED
;
404 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid
405 in the provided PRM_MODULE_CONTEXT_BUFFERS structure.
407 @param[in] Context [Optional] An optional context parameter.
408 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
409 context information for this unit test.
411 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
412 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
417 VerifyFindContextBufferInModuleBuffers (
418 IN UNIT_TEST_CONTEXT Context
422 PRM_CONTEXT_BUFFER
*FoundContextBuffer
;
423 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
424 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*TestContext
;
426 ContextBuffers
= NULL
;
427 FoundContextBuffer
= NULL
;
428 TestContext
= (PRM_CONTEXT_BUFFER_TEST_CONTEXT
*) Context
;
430 Status
= FindContextBufferInModuleBuffers (TestContext
->HandlerGuid
, TestContext
->ContextBuffers
, &FoundContextBuffer
);
431 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
433 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
434 UT_ASSERT_NOT_NULL (FoundContextBuffer
);
435 UT_ASSERT_TRUE (FoundContextBuffer
== TestContext
->ExpectedContextBuffer
);
438 return UNIT_TEST_PASSED
;
442 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid.
444 This function checks both the case when a PRM_MODULE_CONTEXT_BUFFERS structure pointer is provided and
448 - In the future, this function should mock the internal calls to other library functions but the direct
449 calls are left in place for now.
450 - The PrmModuleContextBuffers being NULL is not actually tested at the moment. In the future, that case
451 should also be added.
453 @param[in] Context [Optional] An optional context parameter.
454 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with
455 context information for this unit test.
457 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.
458 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..
463 VerifyGetContextBuffer (
464 IN UNIT_TEST_CONTEXT Context
468 PRM_CONTEXT_BUFFER
*FoundContextBuffer
;
469 PRM_MODULE_CONTEXT_BUFFERS
*ContextBuffers
;
470 PRM_CONTEXT_BUFFER_TEST_CONTEXT
*TestContext
;
472 ContextBuffers
= NULL
;
473 FoundContextBuffer
= NULL
;
474 TestContext
= (PRM_CONTEXT_BUFFER_TEST_CONTEXT
*) Context
;
476 Status
= GetContextBuffer (TestContext
->HandlerGuid
, TestContext
->ContextBuffers
, &FoundContextBuffer
);
477 UT_ASSERT_STATUS_EQUAL (Status
, TestContext
->ExpectedStatus
);
479 if (!EFI_ERROR (TestContext
->ExpectedStatus
)) {
480 UT_ASSERT_NOT_NULL (FoundContextBuffer
);
481 UT_ASSERT_TRUE (FoundContextBuffer
== TestContext
->ExpectedContextBuffer
);
484 return UNIT_TEST_PASSED
;
487 ///=== TEST ENGINE ================================================================================
490 Entry point for the PRM Context Buffer Library unit tests.
492 @param[in] ImageHandle The firmware allocated handle for the EFI image.
493 @param[in] SystemTable A pointer to the EFI System Table.
495 @retval EFI_SUCCESS The entry point executed successfully.
496 @retval other Some error occurred when executing this entry point.
503 UNIT_TEST_FRAMEWORK_HANDLE Framework
;
504 UNIT_TEST_SUITE_HANDLE BasicTests
;
505 UNIT_TEST_SUITE_HANDLE FunctionalCorrectnessTests
;
506 CHAR8 TestCaseClassNameString
[256];
507 CHAR8 TestCaseDescriptionString
[256];
511 DEBUG ((DEBUG_INFO
, "%a v%a\n", UNIT_TEST_NAME
, UNIT_TEST_VERSION
));
514 // Start setting up the test framework for running the tests.
516 Status
= InitUnitTestFramework (&Framework
, UNIT_TEST_NAME
, gEfiCallerBaseName
, UNIT_TEST_VERSION
);
517 if (EFI_ERROR (Status
)) {
518 DEBUG ((DEBUG_ERROR
, "Failed in InitUnitTestFramework. Status = %r\n", Status
));
523 // Add all test suites and tests.
525 Status
= CreateUnitTestSuite (&BasicTests
, Framework
, "Basic Context Buffer Tests", "PrmContextBufferLib.Basic", NULL
, NULL
);
526 if (EFI_ERROR (Status
)) {
527 DEBUG ((DEBUG_ERROR
, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Basic\n"));
528 Status
= EFI_OUT_OF_RESOURCES
;
535 "PrmContextBufferLib.Basic.NullPointerGracefulFailure",
536 NullPointerArgumentsShouldFailGracefully
,
542 Status
= CreateUnitTestSuite (&FunctionalCorrectnessTests
, Framework
, "Functional Correctness Tests", "PrmContextBufferLib.Functional", NULL
, NULL
);
543 if (EFI_ERROR (Status
)) {
544 DEBUG ((DEBUG_ERROR
, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Functional\n"));
545 Status
= EFI_OUT_OF_RESOURCES
;
550 // Add Functional Correctness unit tests
552 for (Index
= 0; Index
< ARRAY_SIZE (mContextBuffersArray
); Index
++) {
553 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
554 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
557 &TestCaseClassNameString
[0],
558 ARRAY_SIZE (TestCaseClassNameString
),
559 "PrmContextBufferLib.Functional.VerifyGetModuleContextBuffers%d",
563 &TestCaseDescriptionString
[0],
564 ARRAY_SIZE (TestCaseDescriptionString
),
565 "Verify Get PRM Module Context Buffers Structure by %a GUID %d\n",
566 ((mContextBuffersArray
[Index
]->GuidSearchType
== ByModuleGuid
) ? "module" : "handler"),
571 FunctionalCorrectnessTests
,
572 &TestCaseDescriptionString
[0],
573 &TestCaseClassNameString
[0],
574 VerifyGetModuleContextBuffers
,
575 InitializeFunctionalCorrectness
,
576 DeInitializeFunctionalCorrectness
,
577 mContextBuffersArray
[Index
]
581 for (Index
= 0; Index
< ARRAY_SIZE (mContextBufferArray
); Index
++) {
582 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
583 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
586 &TestCaseClassNameString
[0],
587 ARRAY_SIZE (TestCaseClassNameString
),
588 "PrmContextBufferLib.Functional.VerifyFindContextBufferInModuleBuffers%d",
592 &TestCaseDescriptionString
[0],
593 ARRAY_SIZE (TestCaseDescriptionString
),
594 "Verify Find PRM Context Buffer by Handler GUID %d\n",
599 FunctionalCorrectnessTests
,
600 &TestCaseDescriptionString
[0],
601 &TestCaseClassNameString
[0],
602 VerifyFindContextBufferInModuleBuffers
,
605 mContextBufferArray
[Index
]
609 for (Index
= 0; Index
< ARRAY_SIZE (mContextBufferArray
); Index
++) {
610 ZeroMem (&TestCaseClassNameString
[0], ARRAY_SIZE (TestCaseClassNameString
));
611 ZeroMem (&TestCaseDescriptionString
[0], ARRAY_SIZE (TestCaseDescriptionString
));
614 &TestCaseClassNameString
[0],
615 ARRAY_SIZE (TestCaseClassNameString
),
616 "PrmContextBufferLib.Functional.VerifyGetContextBuffer%d",
620 &TestCaseDescriptionString
[0],
621 ARRAY_SIZE (TestCaseDescriptionString
),
622 "Verify Get PRM Context Buffer by Handler GUID %d\n",
627 FunctionalCorrectnessTests
,
628 &TestCaseDescriptionString
[0],
629 &TestCaseClassNameString
[0],
630 VerifyGetContextBuffer
,
633 mContextBufferArray
[Index
]
638 // Execute the tests.
640 Status
= RunAllTestSuites (Framework
);
645 FreeUnitTestFramework (Framework
);