]> git.proxmox.com Git - mirror_edk2.git/blame - PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibUnitTest.c
PrmPkg/DxePrmContextBufferLib: Fix unit test GCC compilation errors
[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
6d2baf9d
MK
240 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (NULL, &ModuleContextBuffers, (CONST PRM_CONTEXT_BUFFER **)&ContextBufferPtr), EFI_INVALID_PARAMETER);\r
241 UT_ASSERT_EQUAL (FindContextBufferInModuleBuffers (&Guid, NULL, (CONST PRM_CONTEXT_BUFFER **)&ContextBufferPtr), EFI_INVALID_PARAMETER);\r
82d15dc6
MK
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
6d2baf9d 245 UT_ASSERT_EQUAL (GetModuleContextBuffers (ByModuleGuid, NULL, (CONST PRM_MODULE_CONTEXT_BUFFERS **)&ModuleContextBuffersPtr), EFI_INVALID_PARAMETER);\r
82d15dc6
MK
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
6d2baf9d
MK
249 UT_ASSERT_EQUAL (GetContextBuffer (NULL, &ModuleContextBuffers, (CONST PRM_CONTEXT_BUFFER **)&ContextBufferPtr), EFI_INVALID_PARAMETER);\r
250 UT_ASSERT_EQUAL (GetContextBuffer (&Guid, NULL, (CONST PRM_CONTEXT_BUFFER **)&ContextBufferPtr), EFI_NOT_FOUND);\r
82d15dc6
MK
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
6d2baf9d 325VOID\r
82d15dc6
MK
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 334\r
a298a844 335 TestContext = (PRM_CONTEXT_BUFFERS_TEST_CONTEXT *)Context;\r
82d15dc6
MK
336\r
337 Status = gBS->HandleProtocol (\r
338 TestContext->Handle,\r
339 &gPrmConfigProtocolGuid,\r
a298a844 340 (VOID **)&PrmConfigProtocol\r
82d15dc6 341 );\r
82d15dc6
MK
342\r
343 if (!EFI_ERROR (Status)) {\r
344 Status = gBS->UninstallProtocolInterface (\r
345 TestContext->Handle,\r
346 &gPrmConfigProtocolGuid,\r
347 PrmConfigProtocol\r
a298a844 348 );\r
82d15dc6
MK
349 if (!EFI_ERROR (Status)) {\r
350 FreePool (PrmConfigProtocol);\r
351 }\r
352 }\r
82d15dc6
MK
353}\r
354\r
355/**\r
356 Verifies that the correct PRM_MODULE_CONTEXT_BUFFERS structure instance is found\r
357 for a given PRM module or PRM handler GUID.\r
358\r
359 @param[in] Context [Optional] An optional context parameter.\r
360 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
361 context information for this unit test.\r
362\r
363 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
364 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
365\r
366**/\r
367UNIT_TEST_STATUS\r
368EFIAPI\r
369VerifyGetModuleContextBuffers (\r
a298a844 370 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
371 )\r
372{\r
a298a844
MK
373 EFI_STATUS Status;\r
374 PRM_MODULE_CONTEXT_BUFFERS *ContextBuffers;\r
375 PRM_CONTEXT_BUFFERS_TEST_CONTEXT *TestContext;\r
82d15dc6
MK
376\r
377 ContextBuffers = NULL;\r
a298a844 378 TestContext = (PRM_CONTEXT_BUFFERS_TEST_CONTEXT *)Context;\r
82d15dc6 379\r
6d2baf9d 380 Status = GetModuleContextBuffers (TestContext->GuidSearchType, TestContext->Guid, (CONST PRM_MODULE_CONTEXT_BUFFERS **)&ContextBuffers);\r
82d15dc6
MK
381 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
382\r
383 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
384 UT_ASSERT_TRUE (CompareGuid (TestContext->ExpectedModuleGuid, &ContextBuffers->ModuleGuid));\r
385 UT_LOG_INFO (\r
386 "%a: Searching by %a GUID ({%g}) returned ContextBuffers at 0x%x\n",\r
387 __FUNCTION__,\r
388 ((TestContext->GuidSearchType == ByModuleGuid) ? "module" : "handler"),\r
389 TestContext->Guid,\r
a298a844 390 (UINTN)ContextBuffers\r
82d15dc6
MK
391 );\r
392 }\r
393\r
394 return UNIT_TEST_PASSED;\r
395}\r
396\r
397/**\r
398 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid\r
399 in the provided PRM_MODULE_CONTEXT_BUFFERS structure.\r
400\r
401 @param[in] Context [Optional] An optional context parameter.\r
402 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
403 context information for this unit test.\r
404\r
405 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
406 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
407\r
408**/\r
409UNIT_TEST_STATUS\r
410EFIAPI\r
411VerifyFindContextBufferInModuleBuffers (\r
a298a844 412 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
413 )\r
414{\r
a298a844
MK
415 EFI_STATUS Status;\r
416 PRM_CONTEXT_BUFFER *FoundContextBuffer;\r
a298a844 417 PRM_CONTEXT_BUFFER_TEST_CONTEXT *TestContext;\r
82d15dc6 418\r
82d15dc6 419 FoundContextBuffer = NULL;\r
a298a844 420 TestContext = (PRM_CONTEXT_BUFFER_TEST_CONTEXT *)Context;\r
82d15dc6 421\r
6d2baf9d 422 Status = FindContextBufferInModuleBuffers (TestContext->HandlerGuid, TestContext->ContextBuffers, (CONST PRM_CONTEXT_BUFFER **)&FoundContextBuffer);\r
82d15dc6
MK
423 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
424\r
425 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
426 UT_ASSERT_NOT_NULL (FoundContextBuffer);\r
427 UT_ASSERT_TRUE (FoundContextBuffer == TestContext->ExpectedContextBuffer);\r
428 }\r
429\r
430 return UNIT_TEST_PASSED;\r
431}\r
432\r
433/**\r
434 Verifies that the expected PRM_CONTEXT_BUFFER instance is found for the given HandlerGuid.\r
435\r
436 This function checks both the case when a PRM_MODULE_CONTEXT_BUFFERS structure pointer is provided and\r
437 not provided.\r
438\r
439 NOTES:\r
440 - In the future, this function should mock the internal calls to other library functions but the direct\r
441 calls are left in place for now.\r
442 - The PrmModuleContextBuffers being NULL is not actually tested at the moment. In the future, that case\r
443 should also be added.\r
444\r
445 @param[in] Context [Optional] An optional context parameter.\r
446 A pointer to a PRM_CONTEXT_BUFFERS_TEST_CONTEXT structure with\r
447 context information for this unit test.\r
448\r
449 @retval UNIT_TEST_PASSED Unit test case prerequisites are met.\r
450 @retval UNIT_TEST_ERROR_PREREQUISITE_NOT_MET Test case should be skipped..\r
451\r
452**/\r
453UNIT_TEST_STATUS\r
454EFIAPI\r
455VerifyGetContextBuffer (\r
a298a844 456 IN UNIT_TEST_CONTEXT Context\r
82d15dc6
MK
457 )\r
458{\r
a298a844
MK
459 EFI_STATUS Status;\r
460 PRM_CONTEXT_BUFFER *FoundContextBuffer;\r
a298a844 461 PRM_CONTEXT_BUFFER_TEST_CONTEXT *TestContext;\r
82d15dc6 462\r
82d15dc6 463 FoundContextBuffer = NULL;\r
a298a844 464 TestContext = (PRM_CONTEXT_BUFFER_TEST_CONTEXT *)Context;\r
82d15dc6 465\r
6d2baf9d
MK
466 Status = GetContextBuffer (TestContext->HandlerGuid, TestContext->ContextBuffers, (CONST PRM_CONTEXT_BUFFER **)&FoundContextBuffer);\r
467\r
82d15dc6
MK
468 UT_ASSERT_STATUS_EQUAL (Status, TestContext->ExpectedStatus);\r
469\r
470 if (!EFI_ERROR (TestContext->ExpectedStatus)) {\r
471 UT_ASSERT_NOT_NULL (FoundContextBuffer);\r
472 UT_ASSERT_TRUE (FoundContextBuffer == TestContext->ExpectedContextBuffer);\r
473 }\r
474\r
475 return UNIT_TEST_PASSED;\r
476}\r
477\r
a298a844 478/// === TEST ENGINE ================================================================================\r
82d15dc6
MK
479\r
480/**\r
481 Entry point for the PRM Context Buffer Library unit tests.\r
482\r
483 @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
484 @param[in] SystemTable A pointer to the EFI System Table.\r
485\r
486 @retval EFI_SUCCESS The entry point executed successfully.\r
487 @retval other Some error occurred when executing this entry point.\r
488\r
489**/\r
a298a844
MK
490int\r
491main (\r
492 )\r
82d15dc6
MK
493{\r
494 EFI_STATUS Status;\r
495 UINTN Index;\r
496 UNIT_TEST_FRAMEWORK_HANDLE Framework;\r
497 UNIT_TEST_SUITE_HANDLE BasicTests;\r
498 UNIT_TEST_SUITE_HANDLE FunctionalCorrectnessTests;\r
499 CHAR8 TestCaseClassNameString[256];\r
500 CHAR8 TestCaseDescriptionString[256];\r
501\r
502 Framework = NULL;\r
503\r
504 DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION));\r
505\r
506 //\r
507 // Start setting up the test framework for running the tests.\r
508 //\r
509 Status = InitUnitTestFramework (&Framework, UNIT_TEST_NAME, gEfiCallerBaseName, UNIT_TEST_VERSION);\r
510 if (EFI_ERROR (Status)) {\r
511 DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));\r
512 goto EXIT;\r
513 }\r
514\r
515 //\r
516 // Add all test suites and tests.\r
517 //\r
518 Status = CreateUnitTestSuite (&BasicTests, Framework, "Basic Context Buffer Tests", "PrmContextBufferLib.Basic", NULL, NULL);\r
519 if (EFI_ERROR (Status)) {\r
520 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Basic\n"));\r
521 Status = EFI_OUT_OF_RESOURCES;\r
522 goto EXIT;\r
523 }\r
524\r
525 AddTestCase (\r
526 BasicTests,\r
527 "",\r
528 "PrmContextBufferLib.Basic.NullPointerGracefulFailure",\r
529 NullPointerArgumentsShouldFailGracefully,\r
530 NULL,\r
531 NULL,\r
532 NULL\r
533 );\r
534\r
535 Status = CreateUnitTestSuite (&FunctionalCorrectnessTests, Framework, "Functional Correctness Tests", "PrmContextBufferLib.Functional", NULL, NULL);\r
536 if (EFI_ERROR (Status)) {\r
537 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for PrmContextBufferLib.Functional\n"));\r
538 Status = EFI_OUT_OF_RESOURCES;\r
539 goto EXIT;\r
540 }\r
541\r
542 //\r
543 // Add Functional Correctness unit tests\r
544 //\r
545 for (Index = 0; Index < ARRAY_SIZE (mContextBuffersArray); Index++) {\r
546 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
547 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
548\r
549 AsciiSPrint (\r
550 &TestCaseClassNameString[0],\r
551 ARRAY_SIZE (TestCaseClassNameString),\r
552 "PrmContextBufferLib.Functional.VerifyGetModuleContextBuffers%d",\r
553 Index + 1\r
554 );\r
555 AsciiSPrint (\r
556 &TestCaseDescriptionString[0],\r
557 ARRAY_SIZE (TestCaseDescriptionString),\r
558 "Verify Get PRM Module Context Buffers Structure by %a GUID %d\n",\r
559 ((mContextBuffersArray[Index]->GuidSearchType == ByModuleGuid) ? "module" : "handler"),\r
560 Index + 1\r
561 );\r
562\r
563 AddTestCase (\r
564 FunctionalCorrectnessTests,\r
565 &TestCaseDescriptionString[0],\r
566 &TestCaseClassNameString[0],\r
567 VerifyGetModuleContextBuffers,\r
568 InitializeFunctionalCorrectness,\r
569 DeInitializeFunctionalCorrectness,\r
570 mContextBuffersArray[Index]\r
571 );\r
572 }\r
573\r
574 for (Index = 0; Index < ARRAY_SIZE (mContextBufferArray); Index++) {\r
575 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
576 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
577\r
578 AsciiSPrint (\r
579 &TestCaseClassNameString[0],\r
580 ARRAY_SIZE (TestCaseClassNameString),\r
581 "PrmContextBufferLib.Functional.VerifyFindContextBufferInModuleBuffers%d",\r
582 Index + 1\r
583 );\r
584 AsciiSPrint (\r
585 &TestCaseDescriptionString[0],\r
586 ARRAY_SIZE (TestCaseDescriptionString),\r
587 "Verify Find PRM Context Buffer by Handler GUID %d\n",\r
588 Index + 1\r
589 );\r
590\r
591 AddTestCase (\r
592 FunctionalCorrectnessTests,\r
593 &TestCaseDescriptionString[0],\r
594 &TestCaseClassNameString[0],\r
595 VerifyFindContextBufferInModuleBuffers,\r
596 NULL,\r
597 NULL,\r
598 mContextBufferArray[Index]\r
599 );\r
600 }\r
601\r
602 for (Index = 0; Index < ARRAY_SIZE (mContextBufferArray); Index++) {\r
603 ZeroMem (&TestCaseClassNameString[0], ARRAY_SIZE (TestCaseClassNameString));\r
604 ZeroMem (&TestCaseDescriptionString[0], ARRAY_SIZE (TestCaseDescriptionString));\r
605\r
606 AsciiSPrint (\r
607 &TestCaseClassNameString[0],\r
608 ARRAY_SIZE (TestCaseClassNameString),\r
609 "PrmContextBufferLib.Functional.VerifyGetContextBuffer%d",\r
610 Index + 1\r
611 );\r
612 AsciiSPrint (\r
613 &TestCaseDescriptionString[0],\r
614 ARRAY_SIZE (TestCaseDescriptionString),\r
615 "Verify Get PRM Context Buffer by Handler GUID %d\n",\r
616 Index + 1\r
617 );\r
618\r
619 AddTestCase (\r
620 FunctionalCorrectnessTests,\r
621 &TestCaseDescriptionString[0],\r
622 &TestCaseClassNameString[0],\r
623 VerifyGetContextBuffer,\r
624 NULL,\r
625 NULL,\r
626 mContextBufferArray[Index]\r
627 );\r
628 }\r
629\r
630 //\r
631 // Execute the tests.\r
632 //\r
633 Status = RunAllTestSuites (Framework);\r
634\r
635EXIT:\r
a298a844 636 if (Framework) {\r
82d15dc6
MK
637 FreeUnitTestFramework (Framework);\r
638 }\r
639\r
640 return Status;\r
641}\r