]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c
MdePkg: Apply uncrustify changes
[mirror_edk2.git] / MdePkg / Test / UnitTest / Library / BaseLib / Base64UnitTest.c
CommitLineData
e50c2bb3
MK
1/** @file\r
2 Unit tests of Base64 conversion APIs in BaseLib.\r
3\r
4 Copyright (C) Microsoft Corporation.\r
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#include <Uefi.h>\r
10#include <Library/BaseLib.h>\r
11#include <Library/BaseMemoryLib.h>\r
12#include <Library/DebugLib.h>\r
13#include <Library/MemoryAllocationLib.h>\r
14#include <Library/UnitTestLib.h>\r
15\r
16#define UNIT_TEST_APP_NAME "BaseLib Unit Test Application"\r
17#define UNIT_TEST_APP_VERSION "1.0"\r
18\r
19/**\r
20 RFC 4648 https://tools.ietf.org/html/rfc4648 test vectors\r
21\r
22 BASE64("") = ""\r
23 BASE64("f") = "Zg=="\r
24 BASE64("fo") = "Zm8="\r
25 BASE64("foo") = "Zm9v"\r
26 BASE64("foob") = "Zm9vYg=="\r
27 BASE64("fooba") = "Zm9vYmE="\r
28 BASE64("foobar") = "Zm9vYmFy"\r
29\r
30 The test vectors are using ascii strings for the binary data\r
31 */\r
32\r
33typedef struct {\r
2f88bd3a
MK
34 CHAR8 *TestInput;\r
35 CHAR8 *TestOutput;\r
36 EFI_STATUS ExpectedStatus;\r
37 VOID *BufferToFree;\r
38 UINTN ExpectedSize;\r
e50c2bb3
MK
39} BASIC_TEST_CONTEXT;\r
40\r
2f88bd3a
MK
41#define B64_TEST_1 ""\r
42#define BIN_TEST_1 ""\r
e50c2bb3 43\r
2f88bd3a
MK
44#define B64_TEST_2 "Zg=="\r
45#define BIN_TEST_2 "f"\r
e50c2bb3 46\r
2f88bd3a
MK
47#define B64_TEST_3 "Zm8="\r
48#define BIN_TEST_3 "fo"\r
e50c2bb3 49\r
2f88bd3a
MK
50#define B64_TEST_4 "Zm9v"\r
51#define BIN_TEST_4 "foo"\r
e50c2bb3 52\r
2f88bd3a
MK
53#define B64_TEST_5 "Zm9vYg=="\r
54#define BIN_TEST_5 "foob"\r
e50c2bb3 55\r
2f88bd3a
MK
56#define B64_TEST_6 "Zm9vYmE="\r
57#define BIN_TEST_6 "fooba"\r
e50c2bb3 58\r
2f88bd3a
MK
59#define B64_TEST_7 "Zm9vYmFy"\r
60#define BIN_TEST_7 "foobar"\r
e50c2bb3
MK
61\r
62// Adds all white space - also ends the last quantum with only spaces afterwards\r
2f88bd3a
MK
63#define B64_TEST_8_IN " \t\v Zm9\r\nvYmFy \f "\r
64#define BIN_TEST_8 "foobar"\r
e50c2bb3
MK
65\r
66// Not a quantum multiple of 4\r
67#define B64_ERROR_1 "Zm9vymFy="\r
68\r
69// Invalid characters in the string\r
70#define B64_ERROR_2 "Zm$vymFy"\r
71\r
72// Too many '=' characters\r
2f88bd3a 73#define B64_ERROR_3 "Z==="\r
e50c2bb3
MK
74\r
75// Poorly placed '='\r
2f88bd3a 76#define B64_ERROR_4 "Zm=vYmFy"\r
e50c2bb3 77\r
2f88bd3a 78#define MAX_TEST_STRING_SIZE (200)\r
e50c2bb3
MK
79\r
80// ------------------------------------------------ Input----------Output-----------Result-------Free--Expected Output Size\r
2f88bd3a
MK
81static BASIC_TEST_CONTEXT mBasicEncodeTest1 = { BIN_TEST_1, B64_TEST_1, EFI_SUCCESS, NULL, sizeof (B64_TEST_1) };\r
82static BASIC_TEST_CONTEXT mBasicEncodeTest2 = { BIN_TEST_2, B64_TEST_2, EFI_SUCCESS, NULL, sizeof (B64_TEST_2) };\r
83static BASIC_TEST_CONTEXT mBasicEncodeTest3 = { BIN_TEST_3, B64_TEST_3, EFI_SUCCESS, NULL, sizeof (B64_TEST_3) };\r
84static BASIC_TEST_CONTEXT mBasicEncodeTest4 = { BIN_TEST_4, B64_TEST_4, EFI_SUCCESS, NULL, sizeof (B64_TEST_4) };\r
85static BASIC_TEST_CONTEXT mBasicEncodeTest5 = { BIN_TEST_5, B64_TEST_5, EFI_SUCCESS, NULL, sizeof (B64_TEST_5) };\r
86static BASIC_TEST_CONTEXT mBasicEncodeTest6 = { BIN_TEST_6, B64_TEST_6, EFI_SUCCESS, NULL, sizeof (B64_TEST_6) };\r
87static BASIC_TEST_CONTEXT mBasicEncodeTest7 = { BIN_TEST_7, B64_TEST_7, EFI_SUCCESS, NULL, sizeof (B64_TEST_7) };\r
88static BASIC_TEST_CONTEXT mBasicEncodeError1 = { BIN_TEST_7, B64_TEST_1, EFI_BUFFER_TOO_SMALL, NULL, sizeof (B64_TEST_7) };\r
89\r
90static BASIC_TEST_CONTEXT mBasicDecodeTest1 = { B64_TEST_1, BIN_TEST_1, EFI_SUCCESS, NULL, sizeof (BIN_TEST_1)-1 };\r
91static BASIC_TEST_CONTEXT mBasicDecodeTest2 = { B64_TEST_2, BIN_TEST_2, EFI_SUCCESS, NULL, sizeof (BIN_TEST_2)-1 };\r
92static BASIC_TEST_CONTEXT mBasicDecodeTest3 = { B64_TEST_3, BIN_TEST_3, EFI_SUCCESS, NULL, sizeof (BIN_TEST_3)-1 };\r
93static BASIC_TEST_CONTEXT mBasicDecodeTest4 = { B64_TEST_4, BIN_TEST_4, EFI_SUCCESS, NULL, sizeof (BIN_TEST_4)-1 };\r
94static BASIC_TEST_CONTEXT mBasicDecodeTest5 = { B64_TEST_5, BIN_TEST_5, EFI_SUCCESS, NULL, sizeof (BIN_TEST_5)-1 };\r
95static BASIC_TEST_CONTEXT mBasicDecodeTest6 = { B64_TEST_6, BIN_TEST_6, EFI_SUCCESS, NULL, sizeof (BIN_TEST_6)-1 };\r
96static BASIC_TEST_CONTEXT mBasicDecodeTest7 = { B64_TEST_7, BIN_TEST_7, EFI_SUCCESS, NULL, sizeof (BIN_TEST_7)-1 };\r
97static BASIC_TEST_CONTEXT mBasicDecodeTest8 = { B64_TEST_8_IN, BIN_TEST_8, EFI_SUCCESS, NULL, sizeof (BIN_TEST_8)-1 };\r
98\r
99static BASIC_TEST_CONTEXT mBasicDecodeError1 = { B64_ERROR_1, B64_ERROR_1, EFI_INVALID_PARAMETER, NULL, 0 };\r
100static BASIC_TEST_CONTEXT mBasicDecodeError2 = { B64_ERROR_2, B64_ERROR_2, EFI_INVALID_PARAMETER, NULL, 0 };\r
101static BASIC_TEST_CONTEXT mBasicDecodeError3 = { B64_ERROR_3, B64_ERROR_3, EFI_INVALID_PARAMETER, NULL, 0 };\r
102static BASIC_TEST_CONTEXT mBasicDecodeError4 = { B64_ERROR_4, B64_ERROR_4, EFI_INVALID_PARAMETER, NULL, 0 };\r
103static BASIC_TEST_CONTEXT mBasicDecodeError5 = { B64_TEST_7, BIN_TEST_1, EFI_BUFFER_TOO_SMALL, NULL, sizeof (BIN_TEST_7)-1 };\r
e50c2bb3
MK
104\r
105/**\r
106 Simple clean up method to make sure tests clean up even if interrupted and fail\r
107 in the middle.\r
108**/\r
109STATIC\r
110VOID\r
111EFIAPI\r
112CleanUpB64TestContext (\r
113 IN UNIT_TEST_CONTEXT Context\r
114 )\r
115{\r
116 BASIC_TEST_CONTEXT *Btc;\r
117\r
118 Btc = (BASIC_TEST_CONTEXT *)Context;\r
119 if (Btc != NULL) {\r
2f88bd3a 120 // free string if set\r
e50c2bb3
MK
121 if (Btc->BufferToFree != NULL) {\r
122 FreePool (Btc->BufferToFree);\r
123 Btc->BufferToFree = NULL;\r
124 }\r
125 }\r
126}\r
127\r
128/**\r
129 Unit test for Base64 encode APIs of BaseLib.\r
130\r
131 @param[in] Context [Optional] An optional parameter that enables:\r
132 1) test-case reuse with varied parameters and\r
133 2) test-case re-entry for Target tests that need a\r
134 reboot. This parameter is a VOID* and it is the\r
135 responsibility of the test author to ensure that the\r
136 contents are well understood by all test cases that may\r
137 consume it.\r
138\r
139 @retval UNIT_TEST_PASSED The Unit test has completed and the test\r
140 case was successful.\r
141 @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.\r
142**/\r
143STATIC\r
144UNIT_TEST_STATUS\r
145EFIAPI\r
146RfcEncodeTest (\r
147 IN UNIT_TEST_CONTEXT Context\r
148 )\r
149{\r
150 BASIC_TEST_CONTEXT *Btc;\r
151 CHAR8 *b64String;\r
152 CHAR8 *binString;\r
153 UINTN b64StringSize;\r
154 EFI_STATUS Status;\r
155 UINT8 *BinData;\r
156 UINTN BinSize;\r
157 CHAR8 *b64WorkString;\r
158 UINTN ReturnSize;\r
159 INTN CompareStatus;\r
160 UINTN indx;\r
161\r
2f88bd3a 162 Btc = (BASIC_TEST_CONTEXT *)Context;\r
e50c2bb3
MK
163 binString = Btc->TestInput;\r
164 b64String = Btc->TestOutput;\r
165\r
166 //\r
167 // Only testing the the translate functionality, so preallocate the proper\r
168 // string buffer.\r
169 //\r
170\r
2f88bd3a
MK
171 b64StringSize = AsciiStrnSizeS (b64String, MAX_TEST_STRING_SIZE);\r
172 BinSize = AsciiStrnLenS (binString, MAX_TEST_STRING_SIZE);\r
173 BinData = (UINT8 *)binString;\r
e50c2bb3 174\r
2f88bd3a
MK
175 b64WorkString = (CHAR8 *)AllocatePool (b64StringSize);\r
176 UT_ASSERT_NOT_NULL (b64WorkString);\r
e50c2bb3
MK
177\r
178 Btc->BufferToFree = b64WorkString;\r
2f88bd3a 179 ReturnSize = b64StringSize;\r
e50c2bb3 180\r
2f88bd3a 181 Status = Base64Encode (BinData, BinSize, b64WorkString, &ReturnSize);\r
e50c2bb3 182\r
2f88bd3a 183 UT_ASSERT_STATUS_EQUAL (Status, Btc->ExpectedStatus);\r
e50c2bb3 184\r
2f88bd3a 185 UT_ASSERT_EQUAL (ReturnSize, Btc->ExpectedSize);\r
e50c2bb3
MK
186\r
187 if (!EFI_ERROR (Btc->ExpectedStatus)) {\r
188 if (ReturnSize != 0) {\r
189 CompareStatus = AsciiStrnCmp (b64String, b64WorkString, ReturnSize);\r
190 if (CompareStatus != 0) {\r
191 UT_LOG_ERROR ("b64 string compare error - size=%d\n", ReturnSize);\r
192 for (indx = 0; indx < ReturnSize; indx++) {\r
193 UT_LOG_ERROR (" %2.2x", 0xff & b64String[indx]);\r
194 }\r
2f88bd3a 195\r
e50c2bb3
MK
196 UT_LOG_ERROR ("\n b64 work string:\n");\r
197 for (indx = 0; indx < ReturnSize; indx++) {\r
198 UT_LOG_ERROR (" %2.2x", 0xff & b64WorkString[indx]);\r
199 }\r
2f88bd3a 200\r
e50c2bb3
MK
201 UT_LOG_ERROR ("\n");\r
202 }\r
2f88bd3a 203\r
e50c2bb3
MK
204 UT_ASSERT_EQUAL (CompareStatus, 0);\r
205 }\r
206 }\r
207\r
208 Btc->BufferToFree = NULL;\r
209 FreePool (b64WorkString);\r
210 return UNIT_TEST_PASSED;\r
211}\r
212\r
213/**\r
214 Unit test for Base64 decode APIs of BaseLib.\r
215\r
216 @param[in] Context [Optional] An optional parameter that enables:\r
217 1) test-case reuse with varied parameters and\r
218 2) test-case re-entry for Target tests that need a\r
219 reboot. This parameter is a VOID* and it is the\r
220 responsibility of the test author to ensure that the\r
221 contents are well understood by all test cases that may\r
222 consume it.\r
223\r
224 @retval UNIT_TEST_PASSED The Unit test has completed and the test\r
225 case was successful.\r
226 @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.\r
227**/\r
228STATIC\r
229UNIT_TEST_STATUS\r
230EFIAPI\r
2f88bd3a 231RfcDecodeTest (\r
e50c2bb3
MK
232 IN UNIT_TEST_CONTEXT Context\r
233 )\r
234{\r
2f88bd3a
MK
235 BASIC_TEST_CONTEXT *Btc;\r
236 CHAR8 *b64String;\r
237 CHAR8 *binString;\r
e50c2bb3
MK
238 EFI_STATUS Status;\r
239 UINTN b64StringLen;\r
240 UINTN ReturnSize;\r
2f88bd3a 241 UINT8 *BinData;\r
e50c2bb3
MK
242 UINTN BinSize;\r
243 INTN CompareStatus;\r
244 UINTN indx;\r
245\r
2f88bd3a 246 Btc = (BASIC_TEST_CONTEXT *)Context;\r
e50c2bb3
MK
247 b64String = Btc->TestInput;\r
248 binString = Btc->TestOutput;\r
249\r
250 //\r
251 // Only testing the the translate functionality\r
252 //\r
253\r
254 b64StringLen = AsciiStrnLenS (b64String, MAX_TEST_STRING_SIZE);\r
2f88bd3a 255 BinSize = AsciiStrnLenS (binString, MAX_TEST_STRING_SIZE);\r
e50c2bb3
MK
256\r
257 BinData = AllocatePool (BinSize);\r
2f88bd3a 258 UT_ASSERT_NOT_NULL (BinData);\r
e50c2bb3 259\r
090e267b 260 Btc->BufferToFree = BinData;\r
2f88bd3a 261 ReturnSize = BinSize;\r
090e267b 262\r
e50c2bb3
MK
263 Status = Base64Decode (b64String, b64StringLen, BinData, &ReturnSize);\r
264\r
265 UT_ASSERT_STATUS_EQUAL (Status, Btc->ExpectedStatus);\r
266\r
267 // If an error is not expected, check the results\r
268 if (EFI_ERROR (Btc->ExpectedStatus)) {\r
269 if (Btc->ExpectedStatus == EFI_BUFFER_TOO_SMALL) {\r
270 UT_ASSERT_EQUAL (ReturnSize, Btc->ExpectedSize);\r
271 }\r
272 } else {\r
273 UT_ASSERT_EQUAL (ReturnSize, Btc->ExpectedSize);\r
274 if (ReturnSize != 0) {\r
275 CompareStatus = CompareMem (binString, BinData, ReturnSize);\r
276 if (CompareStatus != 0) {\r
277 UT_LOG_ERROR ("bin string compare error - size=%d\n", ReturnSize);\r
278 for (indx = 0; indx < ReturnSize; indx++) {\r
279 UT_LOG_ERROR (" %2.2x", 0xff & binString[indx]);\r
280 }\r
2f88bd3a 281\r
e50c2bb3
MK
282 UT_LOG_ERROR ("\nBinData:\n");\r
283 for (indx = 0; indx < ReturnSize; indx++) {\r
284 UT_LOG_ERROR (" %2.2x", 0xff & BinData[indx]);\r
285 }\r
2f88bd3a 286\r
e50c2bb3
MK
287 UT_LOG_ERROR ("\n");\r
288 }\r
2f88bd3a 289\r
e50c2bb3
MK
290 UT_ASSERT_EQUAL (CompareStatus, 0);\r
291 }\r
292 }\r
293\r
294 Btc->BufferToFree = NULL;\r
295 FreePool (BinData);\r
296 return UNIT_TEST_PASSED;\r
297}\r
298\r
1c877c71
MK
299#define SOURCE_STRING L"Hello"\r
300\r
301STATIC\r
302UNIT_TEST_STATUS\r
303EFIAPI\r
304SafeStringContraintCheckTest (\r
305 IN UNIT_TEST_CONTEXT Context\r
306 )\r
307{\r
308 RETURN_STATUS Status;\r
309 CHAR16 Destination[20];\r
310 CHAR16 AllZero[20];\r
311\r
312 //\r
313 // Zero buffer used to verify Destination is not modified\r
314 //\r
315 ZeroMem (AllZero, sizeof (AllZero));\r
316\r
317 //\r
318 // Positive test case copy source unicode string to destination\r
319 //\r
320 ZeroMem (Destination, sizeof (Destination));\r
321 Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), SOURCE_STRING);\r
322 UT_ASSERT_NOT_EFI_ERROR (Status);\r
323 UT_ASSERT_MEM_EQUAL (Destination, SOURCE_STRING, sizeof (SOURCE_STRING));\r
324\r
325 //\r
326 // Positive test case with DestMax the same as Source size\r
327 //\r
328 ZeroMem (Destination, sizeof (Destination));\r
329 Status = StrCpyS (Destination, sizeof (SOURCE_STRING) / sizeof (CHAR16), SOURCE_STRING);\r
330 UT_ASSERT_NOT_EFI_ERROR (Status);\r
331 UT_ASSERT_MEM_EQUAL (Destination, SOURCE_STRING, sizeof (SOURCE_STRING));\r
332\r
333 //\r
334 // Negative test case with Destination NULL\r
335 //\r
336 ZeroMem (Destination, sizeof (Destination));\r
337 Status = StrCpyS (NULL, sizeof (Destination) / sizeof (CHAR16), SOURCE_STRING);\r
338 UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER);\r
339 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
340\r
341 //\r
342 // Negative test case with Source NULL\r
343 //\r
344 ZeroMem (Destination, sizeof (Destination));\r
345 Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), NULL);\r
346 UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER);\r
347 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
348\r
349 //\r
350 // Negative test case with DestMax too big\r
351 //\r
352 ZeroMem (Destination, sizeof (Destination));\r
353 Status = StrCpyS (Destination, MAX_UINTN, SOURCE_STRING);\r
354 UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER);\r
355 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
356\r
357 //\r
358 // Negative test case with DestMax 0\r
359 //\r
360 ZeroMem (Destination, sizeof (Destination));\r
361 Status = StrCpyS (Destination, 0, SOURCE_STRING);\r
362 UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER);\r
363 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
364\r
365 //\r
366 // Negative test case with DestMax smaller than Source size\r
367 //\r
368 ZeroMem (Destination, sizeof (Destination));\r
369 Status = StrCpyS (Destination, 1, SOURCE_STRING);\r
370 UT_ASSERT_STATUS_EQUAL (Status, RETURN_BUFFER_TOO_SMALL);\r
371 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
372\r
373 //\r
374 // Negative test case with DestMax smaller than Source size by one character\r
375 //\r
376 ZeroMem (Destination, sizeof (Destination));\r
377 Status = StrCpyS (Destination, sizeof (SOURCE_STRING) / sizeof (CHAR16) - 1, SOURCE_STRING);\r
378 UT_ASSERT_STATUS_EQUAL (Status, RETURN_BUFFER_TOO_SMALL);\r
379 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
380\r
381 //\r
382 // Negative test case with overlapping Destination and Source\r
383 //\r
384 ZeroMem (Destination, sizeof (Destination));\r
385 Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), Destination);\r
386 UT_ASSERT_STATUS_EQUAL (Status, RETURN_ACCESS_DENIED);\r
387 UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));\r
388\r
389 return UNIT_TEST_PASSED;\r
390}\r
391\r
e50c2bb3
MK
392/**\r
393 Initialze the unit test framework, suite, and unit tests for the\r
394 Base64 conversion APIs of BaseLib and run the unit tests.\r
395\r
396 @retval EFI_SUCCESS All test cases were dispatched.\r
397 @retval EFI_OUT_OF_RESOURCES There are not enough resources available to\r
398 initialize the unit tests.\r
399**/\r
400STATIC\r
401EFI_STATUS\r
402EFIAPI\r
403UnitTestingEntry (\r
404 VOID\r
405 )\r
406{\r
407 EFI_STATUS Status;\r
408 UNIT_TEST_FRAMEWORK_HANDLE Fw;\r
409 UNIT_TEST_SUITE_HANDLE b64EncodeTests;\r
410 UNIT_TEST_SUITE_HANDLE b64DecodeTests;\r
1c877c71 411 UNIT_TEST_SUITE_HANDLE SafeStringTests;\r
e50c2bb3
MK
412\r
413 Fw = NULL;\r
414\r
415 DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION));\r
416\r
417 //\r
418 // Start setting up the test framework for running the tests.\r
419 //\r
420 Status = InitUnitTestFramework (&Fw, UNIT_TEST_APP_NAME, gEfiCallerBaseName, UNIT_TEST_APP_VERSION);\r
421 if (EFI_ERROR (Status)) {\r
2f88bd3a
MK
422 DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));\r
423 goto EXIT;\r
e50c2bb3
MK
424 }\r
425\r
426 //\r
427 // Populate the B64 Encode Unit Test Suite.\r
428 //\r
429 Status = CreateUnitTestSuite (&b64EncodeTests, Fw, "b64 Encode binary to Ascii string", "BaseLib.b64Encode", NULL, NULL);\r
430 if (EFI_ERROR (Status)) {\r
431 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for b64EncodeTests\n"));\r
432 Status = EFI_OUT_OF_RESOURCES;\r
433 goto EXIT;\r
434 }\r
435\r
436 // --------------Suite-----------Description--------------Class Name----------Function--------Pre---Post-------------------Context-----------\r
437 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - Empty", "Test1", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest1);\r
438 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - f", "Test2", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest2);\r
439 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - fo", "Test3", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest3);\r
440 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - foo", "Test4", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest4);\r
441 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - foob", "Test5", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest5);\r
442 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - fooba", "Test6", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest6);\r
443 AddTestCase (b64EncodeTests, "RFC 4686 Test Vector - foobar", "Test7", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeTest7);\r
444 AddTestCase (b64EncodeTests, "Too small of output buffer", "Error1", RfcEncodeTest, NULL, CleanUpB64TestContext, &mBasicEncodeError1);\r
445 //\r
446 // Populate the B64 Decode Unit Test Suite.\r
447 //\r
448 Status = CreateUnitTestSuite (&b64DecodeTests, Fw, "b64 Decode Ascii string to binary", "BaseLib.b64Decode", NULL, NULL);\r
449 if (EFI_ERROR (Status)) {\r
2f88bd3a
MK
450 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for b64Decode Tests\n"));\r
451 Status = EFI_OUT_OF_RESOURCES;\r
452 goto EXIT;\r
e50c2bb3
MK
453 }\r
454\r
2f88bd3a
MK
455 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - Empty", "Test1", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest1);\r
456 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - f", "Test2", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest2);\r
457 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - fo", "Test3", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest3);\r
458 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - foo", "Test4", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest4);\r
459 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - foob", "Test5", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest5);\r
460 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - fooba", "Test6", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest6);\r
461 AddTestCase (b64DecodeTests, "RFC 4686 Test Vector - foobar", "Test7", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest7);\r
462 AddTestCase (b64DecodeTests, "Ignore Whitespace test", "Test8", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeTest8);\r
e50c2bb3
MK
463\r
464 AddTestCase (b64DecodeTests, "Not a quantum multiple of 4", "Error1", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError1);\r
465 AddTestCase (b64DecodeTests, "Invalid characters in the string", "Error2", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError2);\r
466 AddTestCase (b64DecodeTests, "Too many padding characters", "Error3", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError3);\r
467 AddTestCase (b64DecodeTests, "Incorrectly placed padding character", "Error4", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError4);\r
468 AddTestCase (b64DecodeTests, "Too small of output buffer", "Error5", RfcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError5);\r
469\r
1c877c71
MK
470 //\r
471 // Populate the safe string Unit Test Suite.\r
472 //\r
473 Status = CreateUnitTestSuite (&SafeStringTests, Fw, "Safe String", "BaseLib.SafeString", NULL, NULL);\r
474 if (EFI_ERROR (Status)) {\r
475 DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for SafeStringTests\n"));\r
476 Status = EFI_OUT_OF_RESOURCES;\r
477 goto EXIT;\r
478 }\r
479\r
480 // --------------Suite-----------Description--------------Class Name----------Function--------Pre---Post-------------------Context-----------\r
481 AddTestCase (SafeStringTests, "SAFE_STRING_CONSTRAINT_CHECK", "SafeStringContraintCheckTest", SafeStringContraintCheckTest, NULL, NULL, NULL);\r
482\r
e50c2bb3
MK
483 //\r
484 // Execute the tests.\r
485 //\r
486 Status = RunAllTestSuites (Fw);\r
487\r
488EXIT:\r
489 if (Fw) {\r
490 FreeUnitTestFramework (Fw);\r
491 }\r
492\r
493 return Status;\r
494}\r
495\r
496/**\r
497 Standard UEFI entry point for target based unit test execution from UEFI Shell.\r
498**/\r
499EFI_STATUS\r
500EFIAPI\r
501BaseLibUnitTestAppEntry (\r
502 IN EFI_HANDLE ImageHandle,\r
503 IN EFI_SYSTEM_TABLE *SystemTable\r
504 )\r
505{\r
506 return UnitTestingEntry ();\r
507}\r
508\r
509/**\r
510 Standard POSIX C entry point for host based unit test execution.\r
511**/\r
512int\r
513main (\r
2f88bd3a
MK
514 int argc,\r
515 char *argv[]\r
e50c2bb3
MK
516 )\r
517{\r
518 return UnitTestingEntry ();\r
519}\r