]> git.proxmox.com Git - mirror_edk2.git/blame - PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibUnitTest.c
PrmPkg: Apply uncrustify changes
[mirror_edk2.git] / PrmPkg / Library / DxePrmContextBufferLib / UnitTest / DxePrmContextBufferLibUnitTest.c
CommitLineData
82d15dc6
MK
1/** @file\r
2\r
3 Unit tests for the PRM Context Buffer Library.\r
4\r
5 Copyright (c) Microsoft Corporation\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8**/\r
9\r
10#include <stdio.h>\r
11#include <string.h>\r
12#include <stdarg.h>\r
13#include <stddef.h>\r
14#include <setjmp.h>\r
15#include <cmocka.h>\r
16\r
17#include <Uefi.h>\r
18\r
19#include <Guid/ZeroGuid.h>\r
20#include <Library/BaseLib.h>\r
21#include <Library/BaseMemoryLib.h>\r
22#include <Library/DebugLib.h>\r
23#include <Library/MemoryAllocationLib.h>\r
24#include <Library/PrintLib.h>\r
25#include <Library/PrmContextBufferLib.h>\r
26#include <Library/UefiBootServicesTableLib.h>\r
27#include <Library/UnitTestLib.h>\r
28#include <Protocol/PrmConfig.h>\r
29\r
a298a844
MK
30#define UNIT_TEST_NAME "PRM Context Buffer Library Unit Test"\r
31#define UNIT_TEST_VERSION "0.1"\r
82d15dc6 32\r
a298a844 33/// === TEST DATA ==================================================================================\r
82d15dc6
MK
34\r
35EFI_HANDLE mTestProtocolHandle;\r
36\r
a298a844
MK
37// *----------------------------------------------------------------------------------*\r
38// * Context Structures *\r
39// *----------------------------------------------------------------------------------*\r
82d15dc6 40typedef struct {\r
a298a844
MK
41 PRM_MODULE_CONTEXT_BUFFERS *InstallationStructure;\r
42 EFI_HANDLE Handle;\r
43 PRM_GUID_SEARCH_TYPE GuidSearchType;\r
44 EFI_GUID *Guid;\r
45 EFI_GUID *ExpectedModuleGuid;\r
46 EFI_STATUS ExpectedStatus;\r
82d15dc6
MK
47} PRM_CONTEXT_BUFFERS_TEST_CONTEXT;\r
48\r
49typedef struct {\r
a298a844
MK
50 EFI_GUID *HandlerGuid;\r
51 PRM_MODULE_CONTEXT_BUFFERS *ContextBuffers;\r
52 PRM_CONTEXT_BUFFER *ExpectedContextBuffer;\r
53 EFI_STATUS ExpectedStatus;\r
82d15dc6
MK
54} PRM_CONTEXT_BUFFER_TEST_CONTEXT;\r
55\r
a298a844
MK
56// *----------------------------------------------------------------------------------*\r
57// * Test GUIDs *\r
58// *----------------------------------------------------------------------------------*\r
82d15dc6
MK
59\r
60// {52960b90-2f3a-4917-b91a-ed5f599a8809}\r
a298a844
MK
61#define HANDLER_TEST_GUID_1 {0x52960b90, 0x2f3a, 0x4917, { 0xb9, 0x1a, 0xed, 0x5f, 0x59, 0x9a, 0x88, 0x09 }}\r
62EFI_GUID mHandlerTestGuid1 = HANDLER_TEST_GUID_1;\r
82d15dc6
MK
63\r
64// {9316a80d-06dc-417b-b21d-6b3c2ae4ed6f}\r
a298a844
MK
65#define HANDLER_TEST_GUID_2 {0x9316a80d, 0x06dc, 0x417b, { 0xb2, 0x1d, 0x6b, 0x3c, 0x2a, 0xe4, 0xed, 0x6f }}\r
66EFI_GUID mHandlerTestGuid2 = HANDLER_TEST_GUID_2;\r
82d15dc6
MK
67\r
68// {d32ac8ba-6cc6-456f-9ed9-9233fa310434}\r
a298a844
MK
69#define HANDLER_TEST_GUID_3 {0xd32ac8ba, 0x6cc6, 0x456f, { 0x9e, 0xd9, 0x92, 0x33, 0xfa, 0x31, 0x04, 0x34 }}\r
70EFI_GUID mHandlerTestGuid3 = HANDLER_TEST_GUID_3;\r
82d15dc6
MK
71\r
72// {faadaa95-070b-4a34-a919-18305dc07370}\r
a298a844
MK
73#define MODULE_TEST_GUID_1 {0xfaadaa95, 0x070b, 0x4a34, { 0xa9, 0x19, 0x18, 0x30, 0x5d, 0xc0, 0x73, 0x70 }}\r
74EFI_GUID mModuleTestGuid1 = MODULE_TEST_GUID_1;\r
82d15dc6
MK
75\r
76// {0ea24584-731c-4863-9100-75780af509a7}\r
a298a844
MK
77#define MODULE_TEST_GUID_2 {0x0ea24584, 0x731c, 0x4863, { 0x91, 0x00, 0x75, 0x78, 0x0a, 0xf5, 0x09, 0xa7 }}\r
78EFI_GUID mModuleTestGuid2 = MODULE_TEST_GUID_2;\r
82d15dc6
MK
79\r
80// {f456b7a1-82a6-4427-8486-87e3a602df43}\r
a298a844
MK
81#define MODULE_TEST_GUID_3 {0xf456b7a1, 0x82a6, 0x4427, { 0x84, 0x86, 0x87, 0xe3, 0xa6, 0x02, 0xdf, 0x43 }}\r
82EFI_GUID mModuleTestGuid3 = MODULE_TEST_GUID_3;\r
82d15dc6
MK
83\r
84// {4a941a9c-9dcf-471b-94b5-d9e2d8c64a1b}\r
a298a844
MK
85#define NEGATIVE_TEST_GUID {0x4a941a9c, 0x9dcf, 0x471b, {0x94, 0xb5, 0xd9, 0xe2, 0xd8, 0xc6, 0x4a, 0x1b }}\r
86EFI_GUID mNegativeTestGuid = NEGATIVE_TEST_GUID;\r
82d15dc6 87\r
a298a844
MK
88// *----------------------------------------------------------------------------------*\r
89// * PRM Static Test Structures *\r
90// *----------------------------------------------------------------------------------*\r
82d15dc6 91\r
a298a844 92PRM_DATA_BUFFER mTestStaticDataBuffer1 = {\r
82d15dc6
MK
93 {\r
94 PRM_DATA_BUFFER_HEADER_SIGNATURE,\r
95 sizeof (PRM_DATA_BUFFER)\r
96 }\r
97 // No data in the buffer (only a header)\r
98};\r
99\r
a298a844 100PRM_CONTEXT_BUFFER mTestPrmContextBuffer1 = {\r
82d15dc6
MK
101 PRM_CONTEXT_BUFFER_SIGNATURE, // Signature\r
102 PRM_CONTEXT_BUFFER_INTERFACE_VERSION, // Version\r
103 0, // Reserved\r
104 HANDLER_TEST_GUID_1, // HandlerGuid\r
105 &mTestStaticDataBuffer1 // StaticDataBuffer\r
106};\r
107\r
a298a844 108PRM_CONTEXT_BUFFER mTestPrmContextBuffer2[2] = {\r
82d15dc6
MK
109 // Context buffer #1\r
110 {\r
111 PRM_CONTEXT_BUFFER_SIGNATURE, // Signature\r
112 PRM_CONTEXT_BUFFER_INTERFACE_VERSION, // Version\r
113 0, // Reserved\r
114 HANDLER_TEST_GUID_2, // HandlerGuid\r
115 NULL // StaticDataBuffer\r
116 },\r
117 // Context buffer #2\r
118 {\r
119 PRM_CONTEXT_BUFFER_SIGNATURE, // Signature\r
120 PRM_CONTEXT_BUFFER_INTERFACE_VERSION, // Version\r
121 0, // Reserved\r
122 HANDLER_TEST_GUID_3, // HandlerGuid\r
123 &mTestStaticDataBuffer1 // StaticDataBuffer (reuse buffer StaticDataBuffer1)\r
124 }\r
125};\r
126\r
a298a844 127PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers1 = {\r
82d15dc6
MK
128 MODULE_TEST_GUID_1,\r
129 1,\r
130 &mTestPrmContextBuffer1,\r
131 NULL\r
132};\r
133\r
a298a844 134PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers2 = {\r
82d15dc6
MK
135 MODULE_TEST_GUID_2,\r
136 1,\r
137 &mTestPrmContextBuffer1,\r
138 NULL\r
139};\r
140\r
a298a844 141PRM_MODULE_CONTEXT_BUFFERS mTestPrmModuleContextBuffers3 = {\r
82d15dc6
MK
142 MODULE_TEST_GUID_3,\r
143 2,\r
144 &mTestPrmContextBuffer2[0],\r
145 NULL\r
146};\r
147\r
a298a844
MK
148// *----------------------------------------------------------------------------------*\r
149// * Test Contexts *\r
150// *----------------------------------------------------------------------------------*\r
82d15dc6 151\r
a298a844 152// * Searches by module GUID *\r
82d15dc6
MK
153// +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+\r
154// + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |\r
155// +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+\r
a298a844
MK
156PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers00 = { &mTestPrmModuleContextBuffers1, NULL, ByModuleGuid, &mModuleTestGuid1, &mModuleTestGuid1, EFI_SUCCESS };\r
157PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers01 = { &mTestPrmModuleContextBuffers2, NULL, ByModuleGuid, &mModuleTestGuid2, &mModuleTestGuid2, EFI_SUCCESS };\r
158PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers02 = { &mTestPrmModuleContextBuffers3, NULL, ByModuleGuid, &mModuleTestGuid3, &mModuleTestGuid3, EFI_SUCCESS };\r
159PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers03 = { &mTestPrmModuleContextBuffers3, NULL, ByModuleGuid, &mNegativeTestGuid, &gZeroGuid, EFI_NOT_FOUND };\r
160PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers04 = { &mTestPrmModuleContextBuffers1, NULL, ByModuleGuid, &gZeroGuid, &gZeroGuid, EFI_NOT_FOUND };\r
82d15dc6 161\r
a298a844 162// * Searches by handler GUID *\r
82d15dc6
MK
163// +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+\r
164// + InstallationStructure | Handle | GuidSearchType | Guid | ExpectedModuleGuid | ExpectedStatus |\r
165// +--------------------------------+--------+----------------+--------------------+--------------------+--------------------+\r
a298a844
MK
166PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers05 = { &mTestPrmModuleContextBuffers1, NULL, ByHandlerGuid, &mHandlerTestGuid1, &mModuleTestGuid1, EFI_SUCCESS };\r
167PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers06 = { &mTestPrmModuleContextBuffers1, NULL, ByHandlerGuid, &gZeroGuid, &gZeroGuid, EFI_NOT_FOUND };\r
168PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers07 = { &mTestPrmModuleContextBuffers2, NULL, ByHandlerGuid, &mHandlerTestGuid1, &mModuleTestGuid2, EFI_SUCCESS };\r
169PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers08 = { &mTestPrmModuleContextBuffers2, NULL, ByHandlerGuid, &mNegativeTestGuid, &gZeroGuid, EFI_NOT_FOUND };\r
170PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers09 = { &mTestPrmModuleContextBuffers3, NULL, ByHandlerGuid, &mHandlerTestGuid1, &gZeroGuid, EFI_NOT_FOUND };\r
171PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers10 = { &mTestPrmModuleContextBuffers3, NULL, ByHandlerGuid, &mHandlerTestGuid2, &mModuleTestGuid3, EFI_SUCCESS };\r
172PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers11 = { &mTestPrmModuleContextBuffers3, NULL, ByHandlerGuid, &mHandlerTestGuid3, &mModuleTestGuid3, EFI_SUCCESS };\r
173PRM_CONTEXT_BUFFERS_TEST_CONTEXT mContextBuffers12 = { &mTestPrmModuleContextBuffers3, NULL, ByHandlerGuid, &gZeroGuid, &gZeroGuid, EFI_NOT_FOUND };\r
174\r
175PRM_CONTEXT_BUFFERS_TEST_CONTEXT *mContextBuffersArray[] = {\r
82d15dc6
MK
176 &mContextBuffers00,\r
177 &mContextBuffers01,\r
178 &mContextBuffers02,\r
179 &mContextBuffers03,\r
180 &mContextBuffers04,\r
181 &mContextBuffers05,\r
182 &mContextBuffers06,\r
183 &mContextBuffers07,\r
184 &mContextBuffers08,\r
185 &mContextBuffers09,\r
186 &mContextBuffers10,\r
187 &mContextBuffers11,\r
188 &mContextBuffers12\r
189};\r
190\r
191// +----------------------+----------------------------------+------------------------------------------+--------------------+\r
192// + HandlerGuid | ContextBuffers | ExpectedContextBuffer | ExpectedStatus |\r
193// +----------------------+----------------------------------+------------------------------------------+--------------------+\r
a298a844
MK
194PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer00 = { &mHandlerTestGuid1, &mTestPrmModuleContextBuffers1, &mTestPrmContextBuffer1, EFI_SUCCESS };\r
195PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer01 = { &mHandlerTestGuid1, &mTestPrmModuleContextBuffers2, &mTestPrmContextBuffer1, EFI_SUCCESS };\r
196PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer02 = { &mHandlerTestGuid2, &mTestPrmModuleContextBuffers3, &mTestPrmContextBuffer2[0], EFI_SUCCESS };\r
197PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer03 = { &mHandlerTestGuid3, &mTestPrmModuleContextBuffers3, &mTestPrmContextBuffer2[1], EFI_SUCCESS };\r
198PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer04 = { &mNegativeTestGuid, &mTestPrmModuleContextBuffers1, NULL, EFI_NOT_FOUND };\r
199PRM_CONTEXT_BUFFER_TEST_CONTEXT mContextBuffer05 = { &gZeroGuid, &mTestPrmModuleContextBuffers3, NULL, EFI_NOT_FOUND };\r
200\r
201PRM_CONTEXT_BUFFER_TEST_CONTEXT *mContextBufferArray[] = {\r
82d15dc6
MK
202 &mContextBuffer00,\r
203 &mContextBuffer01,\r
204 &mContextBuffer02,\r
205 &mContextBuffer03,\r
206 &mContextBuffer04,\r
207 &mContextBuffer05\r
208};\r
209\r
a298a844 210/// === HELPER FUNCTIONS ===========================================================================\r
82d15dc6
MK
211\r
212// None\r
213\r
a298a844 214/// === TEST CASES =================================================================================\r
82d15dc6 215\r
a298a844 216/// ===== BASIC SUITE ==================================================\r
82d15dc6
MK
217\r
218/**\r
219 Verifies that passing NULL arguments to all library functions fails with EFI_INVALID_PARAMETER.\r
220\r
221 @param[in] Context [Optional] An optional context parameter.\r
222 Not used in this unit test.\r
223\r
224 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
225 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
226\r
227**/\r
228UNIT_TEST_STATUS\r
229EFIAPI\r
230NullPointerArgumentsShouldFailGracefully (\r
a298a844 231 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
232 )\r
233{\r
a298a844
MK
234 EFI_GUID Guid;\r
235 PRM_CONTEXT_BUFFER *ContextBufferPtr;\r
236 PRM_MODULE_CONTEXT_BUFFERS ModuleContextBuffers;\r
237 PRM_MODULE_CONTEXT_BUFFERS *ModuleContextBuffersPtr;\r
82d15dc6
MK
238\r
239 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL, NULL, NULL), EFI_INVALID_PARAMETER);\r
240 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL, &ModuleContextBuffers, &ContextBufferPtr), EFI_INVALID_PARAMETER);\r
241 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid, NULL, &ContextBufferPtr), EFI_INVALID_PARAMETER);\r
242 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid, &ModuleContextBuffers, NULL), EFI_INVALID_PARAMETER);\r
243\r
244 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid, NULL, NULL), EFI_INVALID_PARAMETER);\r
245 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid, NULL, &ModuleContextBuffersPtr), EFI_INVALID_PARAMETER);\r
246 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid, &Guid, NULL), EFI_INVALID_PARAMETER);\r
247\r
248 UT_ASSERT_EQUAL (GetContextBuffer (NULL, NULL, NULL), EFI_INVALID_PARAMETER);\r
249 UT_ASSERT_EQUAL (GetContextBuffer (NULL, &ModuleContextBuffers, &ContextBufferPtr), EFI_INVALID_PARAMETER);\r
250 UT_ASSERT_EQUAL (GetContextBuffer (&Guid, NULL, &ContextBufferPtr), EFI_NOT_FOUND);\r
251 UT_ASSERT_EQUAL (GetContextBuffer (&Guid, &ModuleContextBuffers, NULL), EFI_INVALID_PARAMETER);\r
252\r
253 return UNIT_TEST_PASSED;\r
254}\r
255\r
a298a844 256/// ===== FUNCTIONAL CORRECTNESS SUITE ==================================================\r
82d15dc6
MK
257\r
258/**\r
259 Functional Correctness pre-requisite function.\r
260\r
261 Installs a gPrmConfigProtocolGuid protocol instance as specified by the provided\r
262 context in preparation for unit test execution\r
263\r
264 @param[in] Context [Optional] An optional parameter that enables:\r
265 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
266 context information for this unit test.\r
267\r
268 @retval UNIT_TEST_PASSED Unit test case prerequisites\r
269 are met.\r
270 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped.\r
271\r
272**/\r
273STATIC\r
274UNIT_TEST_STATUS\r
275EFIAPI\r
276InitializeFunctionalCorrectness (\r
a298a844 277 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
278 )\r
279{\r
a298a844
MK
280 EFI_STATUS Status;\r
281 PRM_CONFIG_PROTOCOL *PrmConfigProtocol;\r
282 PRM_MODULE_CONTEXT_BUFFERS *ModuleContextBuffers;\r
283 PRM_CONTEXT_BUFFERS_TEST_CONTEXT *TestContext;\r
82d15dc6
MK
284\r
285 UT_ASSERT_NOT_NULL (Context);\r
a298a844 286 TestContext = (PRM_CONTEXT_BUFFERS_TEST_CONTEXT *)Context;\r
82d15dc6
MK
287 ModuleContextBuffers = TestContext->InstallationStructure;\r
288\r
289 PrmConfigProtocol = AllocateZeroPool (sizeof (*PrmConfigProtocol));\r
290 if (PrmConfigProtocol == NULL) {\r
291 return UNIT_TEST_ERROR_PREREQUISITE_NOT_MET;\r
292 }\r
293\r
294 CopyGuid (&PrmConfigProtocol->ModuleContextBuffers.ModuleGuid, &ModuleContextBuffers->ModuleGuid);\r
295 PrmConfigProtocol->ModuleContextBuffers.BufferCount = ModuleContextBuffers->BufferCount;\r
a298a844 296 PrmConfigProtocol->ModuleContextBuffers.Buffer = ModuleContextBuffers->Buffer;\r
82d15dc6
MK
297\r
298 Status = gBS->InstallProtocolInterface (\r
a298a844
MK
299 &TestContext->Handle,\r
300 &gPrmConfigProtocolGuid,\r
301 EFI_NATIVE_INTERFACE,\r
302 (VOID *)PrmConfigProtocol\r
303 );\r
82d15dc6
MK
304 UT_ASSERT_NOT_EFI_ERROR (Status);\r
305\r
306 return UNIT_TEST_PASSED;\r
307}\r
308\r
309/**\r
310 Functional Correctness cleanup function.\r
311\r
312 Uninstalls the gPrmConfigProtocolGuid protocol instance as specified by the\r
313 provided context. This is used to clean up the mocked protocol database after\r
314 unit test execution.\r
315\r
316 @param[in] Context [Optional] An optional parameter that enables:\r
317 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
318 context information for this unit test.\r
319\r
320 @retval UNIT_TEST_PASSED Test case cleanup succeeded.\r
321 @retval UNIT_TEST_ERROR_CLEANUP_FAILED Test case cleanup failed.\r
322\r
323**/\r
324STATIC\r
325UNIT_TEST_STATUS\r
326EFIAPI\r
327DeInitializeFunctionalCorrectness (\r
a298a844 328 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
329 )\r
330{\r
a298a844
MK
331 EFI_STATUS Status;\r
332 PRM_CONFIG_PROTOCOL *PrmConfigProtocol;\r
333 PRM_CONTEXT_BUFFERS_TEST_CONTEXT *TestContext;\r
82d15dc6
MK
334\r
335 UT_ASSERT_NOT_NULL (Context);\r
a298a844 336 TestContext = (PRM_CONTEXT_BUFFERS_TEST_CONTEXT *)Context;\r
82d15dc6
MK
337\r
338 Status = gBS->HandleProtocol (\r
339 TestContext->Handle,\r
340 &gPrmConfigProtocolGuid,\r
a298a844 341 (VOID **)&PrmConfigProtocol\r
82d15dc6
MK
342 );\r
343 UT_ASSERT_NOT_EFI_ERROR (Status);\r
344\r
345 if (!EFI_ERROR (Status)) {\r
346 Status = gBS->UninstallProtocolInterface (\r
347 TestContext->Handle,\r
348 &gPrmConfigProtocolGuid,\r
349 PrmConfigProtocol\r
a298a844 350 );\r
82d15dc6
MK
351 UT_ASSERT_NOT_EFI_ERROR (Status);\r
352 if (!EFI_ERROR (Status)) {\r
353 FreePool (PrmConfigProtocol);\r
354 }\r
355 }\r
356\r
357 return UNIT_TEST_PASSED;\r
358}\r
359\r
360/**\r
361 Verifies that the correct PRM_MODULE_CONTEXT_BUFFERS structure instance is found\r
362 for a given PRM module or PRM handler GUID.\r
363\r
364 @param[in] Context [Optional] An optional context parameter.\r
365 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
366 context information for this unit test.\r
367\r
368 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
369 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
370\r
371**/\r
372UNIT_TEST_STATUS\r
373EFIAPI\r
374VerifyGetModuleContextBuffers (\r
a298a844 375 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
376 )\r
377{\r
a298a844
MK
378 EFI_STATUS Status;\r
379 PRM_MODULE_CONTEXT_BUFFERS *ContextBuffers;\r
380 PRM_CONTEXT_BUFFERS_TEST_CONTEXT *TestContext;\r
82d15dc6
MK
381\r
382 ContextBuffers = NULL;\r
a298a844 383 TestContext = (PRM_CONTEXT_BUFFERS_TEST_CONTEXT *)Context;\r
82d15dc6
MK
384\r
385 Status = GetModuleContextBuffers (TestContext->GuidSearchType, TestContext->Guid, &ContextBuffers);\r
386 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
387\r
388 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
389 UT_ASSERT_TRUE (CompareGuid (TestContext->ExpectedModuleGuid, &ContextBuffers->ModuleGuid));\r
390 UT_LOG_INFO (\r
391 "%a: Searching by %a GUID ({%g}) returned ContextBuffers at 0x%x\n",\r
392 __FUNCTION__,\r
393 ((TestContext->GuidSearchType == ByModuleGuid) ? "module" : "handler"),\r
394 TestContext->Guid,\r
a298a844 395 (UINTN)ContextBuffers\r
82d15dc6
MK
396 );\r
397 }\r
398\r
399 return UNIT_TEST_PASSED;\r
400}\r
401\r
402/**\r
403 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid\r
404 in the provided PRM_MODULE_CONTEXT_BUFFERS structure.\r
405\r
406 @param[in] Context [Optional] An optional context parameter.\r
407 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
408 context information for this unit test.\r
409\r
410 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
411 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
412\r
413**/\r
414UNIT_TEST_STATUS\r
415EFIAPI\r
416VerifyFindContextBufferInModuleBuffers (\r
a298a844 417 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
418 )\r
419{\r
a298a844
MK
420 EFI_STATUS Status;\r
421 PRM_CONTEXT_BUFFER *FoundContextBuffer;\r
422 PRM_MODULE_CONTEXT_BUFFERS *ContextBuffers;\r
423 PRM_CONTEXT_BUFFER_TEST_CONTEXT *TestContext;\r
82d15dc6 424\r
a298a844 425 ContextBuffers = NULL;\r
82d15dc6 426 FoundContextBuffer = NULL;\r
a298a844 427 TestContext = (PRM_CONTEXT_BUFFER_TEST_CONTEXT *)Context;\r
82d15dc6
MK
428\r
429 Status = FindContextBufferInModuleBuffers (TestContext->HandlerGuid, TestContext->ContextBuffers, &FoundContextBuffer);\r
430 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
431\r
432 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
433 UT_ASSERT_NOT_NULL (FoundContextBuffer);\r
434 UT_ASSERT_TRUE (FoundContextBuffer == TestContext->ExpectedContextBuffer);\r
435 }\r
436\r
437 return UNIT_TEST_PASSED;\r
438}\r
439\r
440/**\r
441 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid.\r
442\r
443 This function checks both the case when a PRM_MODULE_CONTEXT_BUFFERS structure pointer is provided and\r
444 not provided.\r
445\r
446 NOTES:\r
447 - In the future, this function should mock the internal calls to other library functions but the direct\r
448 calls are left in place for now.\r
449 - The PrmModuleContextBuffers being NULL is not actually tested at the moment. In the future, that case\r
450 should also be added.\r
451\r
452 @param[in] Context [Optional] An optional context parameter.\r
453 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
454 context information for this unit test.\r
455\r
456 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
457 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
458\r
459**/\r
460UNIT_TEST_STATUS\r
461EFIAPI\r
462VerifyGetContextBuffer (\r
a298a844 463 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
464 )\r
465{\r
a298a844
MK
466 EFI_STATUS Status;\r
467 PRM_CONTEXT_BUFFER *FoundContextBuffer;\r
468 PRM_MODULE_CONTEXT_BUFFERS *ContextBuffers;\r
469 PRM_CONTEXT_BUFFER_TEST_CONTEXT *TestContext;\r
82d15dc6 470\r
a298a844 471 ContextBuffers = NULL;\r
82d15dc6 472 FoundContextBuffer = NULL;\r
a298a844 473 TestContext = (PRM_CONTEXT_BUFFER_TEST_CONTEXT *)Context;\r
82d15dc6
MK
474\r
475 Status = GetContextBuffer (TestContext->HandlerGuid, TestContext->ContextBuffers, &FoundContextBuffer);\r
476 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
477\r
478 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
479 UT_ASSERT_NOT_NULL (FoundContextBuffer);\r
480 UT_ASSERT_TRUE (FoundContextBuffer == TestContext->ExpectedContextBuffer);\r
481 }\r
482\r
483 return UNIT_TEST_PASSED;\r
484}\r
485\r
a298a844 486/// === TEST ENGINE ================================================================================\r
82d15dc6
MK
487\r
488/**\r
489 Entry point for the PRM Context Buffer Library unit tests.\r
490\r
491 @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
492 @param[in] SystemTable A pointer to the EFI System Table.\r
493\r
494 @retval EFI_SUCCESS The entry point executed successfully.\r
495 @retval other Some error occurred when executing this entry point.\r
496\r
497**/\r
a298a844
MK
498int\r
499main (\r
500 )\r
82d15dc6
MK
501{\r
502 EFI_STATUS Status;\r
503 UINTN Index;\r
504 UNIT_TEST_FRAMEWORK_HANDLE Framework;\r
505 UNIT_TEST_SUITE_HANDLE BasicTests;\r
506 UNIT_TEST_SUITE_HANDLE FunctionalCorrectnessTests;\r
507 CHAR8 TestCaseClassNameString[256];\r
508 CHAR8 TestCaseDescriptionString[256];\r
509\r
510 Framework = NULL;\r
511\r
512 DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION));\r
513\r
514 //\r
515 // Start setting up the test framework for running the tests.\r
516 //\r
517 Status = InitUnitTestFramework (&Framework, UNIT_TEST_NAME, gEfiCallerBaseName, UNIT_TEST_VERSION);\r
518 if (EFI_ERROR (Status)) {\r
519 DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));\r
520 goto EXIT;\r
521 }\r
522\r
523 //\r
524 // Add all test suites and tests.\r
525 //\r
526 Status = CreateUnitTestSuite (&BasicTests, Framework, "Basic Context Buffer Tests", "PrmContextBufferLib.Basic", NULL, NULL);\r
527 if (EFI_ERROR (Status)) {\r
528 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Basic\n"));\r
529 Status = EFI_OUT_OF_RESOURCES;\r
530 goto EXIT;\r
531 }\r
532\r
533 AddTestCase (\r
534 BasicTests,\r
535 "",\r
536 "PrmContextBufferLib.Basic.NullPointerGracefulFailure",\r
537 NullPointerArgumentsShouldFailGracefully,\r
538 NULL,\r
539 NULL,\r
540 NULL\r
541 );\r
542\r
543 Status = CreateUnitTestSuite (&FunctionalCorrectnessTests, Framework, "Functional Correctness Tests", "PrmContextBufferLib.Functional", NULL, NULL);\r
544 if (EFI_ERROR (Status)) {\r
545 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Functional\n"));\r
546 Status = EFI_OUT_OF_RESOURCES;\r
547 goto EXIT;\r
548 }\r
549\r
550 //\r
551 // Add Functional Correctness unit tests\r
552 //\r
553 for (Index = 0; Index < ARRAY_SIZE (mContextBuffersArray); Index++) {\r
554 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
555 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
556\r
557 AsciiSPrint (\r
558 &TestCaseClassNameString[0],\r
559 ARRAY_SIZE (TestCaseClassNameString),\r
560 "PrmContextBufferLib.Functional.VerifyGetModuleContextBuffers%d",\r
561 Index + 1\r
562 );\r
563 AsciiSPrint (\r
564 &TestCaseDescriptionString[0],\r
565 ARRAY_SIZE (TestCaseDescriptionString),\r
566 "Verify Get PRM Module Context Buffers Structure by %a GUID %d\n",\r
567 ((mContextBuffersArray[Index]->GuidSearchType == ByModuleGuid) ? "module" : "handler"),\r
568 Index + 1\r
569 );\r
570\r
571 AddTestCase (\r
572 FunctionalCorrectnessTests,\r
573 &TestCaseDescriptionString[0],\r
574 &TestCaseClassNameString[0],\r
575 VerifyGetModuleContextBuffers,\r
576 InitializeFunctionalCorrectness,\r
577 DeInitializeFunctionalCorrectness,\r
578 mContextBuffersArray[Index]\r
579 );\r
580 }\r
581\r
582 for (Index = 0; Index < ARRAY_SIZE (mContextBufferArray); Index++) {\r
583 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
584 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
585\r
586 AsciiSPrint (\r
587 &TestCaseClassNameString[0],\r
588 ARRAY_SIZE (TestCaseClassNameString),\r
589 "PrmContextBufferLib.Functional.VerifyFindContextBufferInModuleBuffers%d",\r
590 Index + 1\r
591 );\r
592 AsciiSPrint (\r
593 &TestCaseDescriptionString[0],\r
594 ARRAY_SIZE (TestCaseDescriptionString),\r
595 "Verify Find PRM Context Buffer by Handler GUID %d\n",\r
596 Index + 1\r
597 );\r
598\r
599 AddTestCase (\r
600 FunctionalCorrectnessTests,\r
601 &TestCaseDescriptionString[0],\r
602 &TestCaseClassNameString[0],\r
603 VerifyFindContextBufferInModuleBuffers,\r
604 NULL,\r
605 NULL,\r
606 mContextBufferArray[Index]\r
607 );\r
608 }\r
609\r
610 for (Index = 0; Index < ARRAY_SIZE (mContextBufferArray); Index++) {\r
611 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
612 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
613\r
614 AsciiSPrint (\r
615 &TestCaseClassNameString[0],\r
616 ARRAY_SIZE (TestCaseClassNameString),\r
617 "PrmContextBufferLib.Functional.VerifyGetContextBuffer%d",\r
618 Index + 1\r
619 );\r
620 AsciiSPrint (\r
621 &TestCaseDescriptionString[0],\r
622 ARRAY_SIZE (TestCaseDescriptionString),\r
623 "Verify Get PRM Context Buffer by Handler GUID %d\n",\r
624 Index + 1\r
625 );\r
626\r
627 AddTestCase (\r
628 FunctionalCorrectnessTests,\r
629 &TestCaseDescriptionString[0],\r
630 &TestCaseClassNameString[0],\r
631 VerifyGetContextBuffer,\r
632 NULL,\r
633 NULL,\r
634 mContextBufferArray[Index]\r
635 );\r
636 }\r
637\r
638 //\r
639 // Execute the tests.\r
640 //\r
641 Status = RunAllTestSuites (Framework);\r
642\r
643EXIT:\r
a298a844 644 if (Framework) {\r
82d15dc6
MK
645 FreeUnitTestFramework (Framework);\r
646 }\r
647\r
648 return Status;\r
649}\r