[PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test


wenyi,xie
 

Adding two unit test case for UefiSortLib. One is a test on
sorting an array of UINT32 by using PerformQuickSort, another
is a test on comparing the same buffer by using StringCompare.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf | 32 ++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | 188 ++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>
gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDisable|TRUE
}
+
+ MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ }
diff --git a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32), (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) * TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer);
+ UT_ASSERT_TRUE (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME, gEfiCallerBaseName, UNIT_TEST_APP_VERSION);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib Sort Tests", "UefiSortLib.SortLib", NULL, NULL);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for UefiSortLib API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ // --------------Suite--------Description------------Name--------------Function----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort", SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare", CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1


Wu, Hao A
 

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A
<hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib
unit test

Adding two unit test case for UefiSortLib. One is a test on sorting an array of
UINT32 by using PerformQuickSort, another is a test on comparing the same
buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

I will wait a couple days before merging to see if any additional comment from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf | 32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+ MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not required by the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) *
+ TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer); UT_ASSERT_TRUE
+ (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib
+ Sort Tests", "UefiSortLib.SortLib", NULL, NULL); if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name--------------Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1


Wu, Hao A
 

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io; Wang, Jian
J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Wu,
Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib
unit test

Adding two unit test case for UefiSortLib. One is a test on sorting an
array of
UINT32 by using PerformQuickSort, another is a test on comparing the
same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style check failures when merging the patch.
Could you help to resolve them and then create a test pull request on the GitHub for verification? Thanks in advance.
(I think you can take the case under MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/ for reference.)

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64
2021-08-02T01:09:28.5960733Z ==============================================================================
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line with arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z ==============================================================================
2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3510020Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3513605Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3517536Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3545461Z [command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build -c .pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based BaseTools
2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg: EccCheck Test NO-TARGET --
2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0703421Z ERROR - *Line number: 77
2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR -
2021-08-02T01:09:33.0716634Z ERROR - EFI coding style error
2021-08-02T01:09:33.0717372Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0718214Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0719195Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0720631Z ERROR - *Line number: 78
2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR -
2021-08-02T01:09:33.0724953Z ERROR - EFI coding style error
2021-08-02T01:09:33.0725713Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0726562Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0727526Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0728345Z ERROR - *Line number: 79
2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR -
2021-08-02T01:09:33.0732496Z ERROR - EFI coding style error
2021-08-02T01:09:33.0733224Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0734114Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0737620Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0739185Z ERROR - *Line number: 117
2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR -
2021-08-02T01:09:33.0744829Z ERROR - EFI coding style error
2021-08-02T01:09:33.0745459Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0746821Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0747774Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0749076Z ERROR - *Line number: 117
2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR -
2021-08-02T01:09:33.0751607Z ERROR - EFI coding style error
2021-08-02T01:09:33.0754599Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0761175Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0762167Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0763160Z ERROR - *Line number: 117
2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR -
2021-08-02T01:09:33.0764843Z ERROR - EFI coding style error
2021-08-02T01:09:33.0766810Z ERROR - *Error code: 8006
2021-08-02T01:09:33.0767819Z ERROR - *Function name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0769619Z ERROR - *Line number: 181
2021-08-02T01:09:33.0773329Z ERROR - *The function name [main] does not follow the rules
2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0796985Z ERROR - *Line number: 178
2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in comment
2021-08-02T01:09:33.0798208Z ERROR -
2021-08-02T01:09:33.0798859Z ERROR - --->Test Failed: EccCheck Test NO-TARGET returned 1
2021-08-02T01:09:33.0807351Z PROGRESS - --Running MdeModulePkg: Dsc Complete Check Test NO-TARGET --
2021-08-02T01:09:33.1524790Z PROGRESS - --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg: Char Encoding Check Test NO-TARGET --
2021-08-02T01:09:33.6280380Z PROGRESS - --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg: License Check Test NO-TARGET --
2021-08-02T01:09:33.6495642Z PROGRESS - --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg: Compiler Plugin RELEASE --
2021-08-02T01:09:33.6785178Z PROGRESS - Start time: 2021-08-02 01:09:33.677952
2021-08-02T01:09:33.6787716Z PROGRESS - Setting up the Environment
2021-08-02T01:09:33.7725244Z PROGRESS - Running Pre Build
2021-08-02T01:09:33.7740357Z PROGRESS - Running Build RELEASE
2021-08-02T01:17:18.5479885Z PROGRESS - Running Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02 01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler Plugin RELEASE
2021-08-02T01:17:18.5519284Z PROGRESS - --Running MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library Class Check Test NO-TARGET
2021-08-02T01:17:18.5648791Z PROGRESS - --Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success: Dependency Check Test NO-TARGET
2021-08-02T01:17:18.7316162Z PROGRESS - --Running MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin! Spell Check Test NO-TARGET
2021-08-02T01:17:23.7934112Z PROGRESS - --Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid Check Test NO-TARGET
2021-08-02T01:17:27.1939129Z PROGRESS - --Running MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host Unit Test Dsc Complete Check Test NO-TARGET
2021-08-02T01:17:27.3731676Z ERROR - Overall Build Status: Error
2021-08-02T01:17:27.3733283Z PROGRESS - There were 1 failures out of 10 attempts
2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z ##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with return code: 1
2021-08-02T01:17:27.4173134Z ##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with error: /opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with return code: 1
2021-08-02T01:17:27.4178252Z ##[section]Finishing: Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional comment
from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf |
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+ MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not required by
+the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) *
+ TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer); UT_ASSERT_TRUE
+ (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib
+ Sort Tests", "UefiSortLib.SortLib", NULL, NULL); if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name--------------
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1




wenyi,xie
 

On 2021/8/2 9:56, Wu, Hao A wrote:
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io; Wang, Jian
J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Wu,
Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib
unit test

Adding two unit test case for UefiSortLib. One is a test on sorting an
array of
UINT32 by using PerformQuickSort, another is a test on comparing the
same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style check failures when merging the patch.
Could you help to resolve them and then create a test pull request on the GitHub for verification? Thanks in advance.
(I think you can take the case under MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/ for reference.)
Hi, Wu Hao

I try to deal with the coding format style check failures, and meet a failure which I am not sure how to solve.
I take the case you told for reference, but still there's a failure said the define should be capital letters.
but if change it to capital letters, there will be another error
Function name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters

#define Main main

INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)
{
UnitTestingEntry ();
return 0;
}

Thanks
Wenyi

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64
2021-08-02T01:09:28.5960733Z ==============================================================================
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line with arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z ==============================================================================
2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3510020Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3513605Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3517536Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3545461Z [command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build -c .pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based BaseTools
2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg: EccCheck Test NO-TARGET --
2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0703421Z ERROR - *Line number: 77
2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR -
2021-08-02T01:09:33.0716634Z ERROR - EFI coding style error
2021-08-02T01:09:33.0717372Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0718214Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0719195Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0720631Z ERROR - *Line number: 78
2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR -
2021-08-02T01:09:33.0724953Z ERROR - EFI coding style error
2021-08-02T01:09:33.0725713Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0726562Z ERROR - *There should be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0727526Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0728345Z ERROR - *Line number: 79
2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR -
2021-08-02T01:09:33.0732496Z ERROR - EFI coding style error
2021-08-02T01:09:33.0733224Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0734114Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0737620Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0739185Z ERROR - *Line number: 117
2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR -
2021-08-02T01:09:33.0744829Z ERROR - EFI coding style error
2021-08-02T01:09:33.0745459Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0746821Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0747774Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0749076Z ERROR - *Line number: 117
2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR -
2021-08-02T01:09:33.0751607Z ERROR - EFI coding style error
2021-08-02T01:09:33.0754599Z ERROR - *Error code: 7001
2021-08-02T01:09:33.0761175Z ERROR - *There should be no use of int, unsigned, char, void, long in any .c, .h or .asl files
2021-08-02T01:09:33.0762167Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0763160Z ERROR - *Line number: 117
2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR -
2021-08-02T01:09:33.0764843Z ERROR - EFI coding style error
2021-08-02T01:09:33.0766810Z ERROR - *Error code: 8006
2021-08-02T01:09:33.0767819Z ERROR - *Function name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0769619Z ERROR - *Line number: 181
2021-08-02T01:09:33.0773329Z ERROR - *The function name [main] does not follow the rules
2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file: //home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
2021-08-02T01:09:33.0796985Z ERROR - *Line number: 178
2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in comment
2021-08-02T01:09:33.0798208Z ERROR -
2021-08-02T01:09:33.0798859Z ERROR - --->Test Failed: EccCheck Test NO-TARGET returned 1
2021-08-02T01:09:33.0807351Z PROGRESS - --Running MdeModulePkg: Dsc Complete Check Test NO-TARGET --
2021-08-02T01:09:33.1524790Z PROGRESS - --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg: Char Encoding Check Test NO-TARGET --
2021-08-02T01:09:33.6280380Z PROGRESS - --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg: License Check Test NO-TARGET --
2021-08-02T01:09:33.6495642Z PROGRESS - --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg: Compiler Plugin RELEASE --
2021-08-02T01:09:33.6785178Z PROGRESS - Start time: 2021-08-02 01:09:33.677952
2021-08-02T01:09:33.6787716Z PROGRESS - Setting up the Environment
2021-08-02T01:09:33.7725244Z PROGRESS - Running Pre Build
2021-08-02T01:09:33.7740357Z PROGRESS - Running Build RELEASE
2021-08-02T01:17:18.5479885Z PROGRESS - Running Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02 01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler Plugin RELEASE
2021-08-02T01:17:18.5519284Z PROGRESS - --Running MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library Class Check Test NO-TARGET
2021-08-02T01:17:18.5648791Z PROGRESS - --Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success: Dependency Check Test NO-TARGET
2021-08-02T01:17:18.7316162Z PROGRESS - --Running MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin! Spell Check Test NO-TARGET
2021-08-02T01:17:23.7934112Z PROGRESS - --Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid Check Test NO-TARGET
2021-08-02T01:17:27.1939129Z PROGRESS - --Running MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host Unit Test Dsc Complete Check Test NO-TARGET
2021-08-02T01:17:27.3731676Z ERROR - Overall Build Status: Error
2021-08-02T01:17:27.3733283Z PROGRESS - There were 1 failures out of 10 attempts
2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z ##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with return code: 1
2021-08-02T01:17:27.4173134Z ##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with error: /opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with return code: 1
2021-08-02T01:17:27.4178252Z ##[section]Finishing: Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional comment
from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf |
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+ MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not required by
+the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) *
+ TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer); UT_ASSERT_TRUE
+ (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib
+ Sort Tests", "UefiSortLib.SortLib", NULL, NULL); if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name--------------
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1



.


Wu, Hao A
 

-----Original Message-----
From: xiewenyi (A) <xiewenyi2@huawei.com>
Sent: Wednesday, August 4, 2021 4:05 PM
To: Wu, Hao A <hao.a.wu@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add
UefiSortLib unit test



On 2021/8/2 9:56, Wu, Hao A wrote:
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu,
Hao A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io; Wang,
Jian J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Wu,
Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add
UefiSortLib unit test

Adding two unit test case for UefiSortLib. One is a test on sorting
an array of
UINT32 by using PerformQuickSort, another is a test on comparing the
same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style check failures
when merging the patch.
Could you help to resolve them and then create a test pull request on the
GitHub for verification? Thanks in advance.
(I think you can take the case under
MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/ for
reference.)
Hi, Wu Hao

I try to deal with the coding format style check failures, and meet a failure which
I am not sure how to solve.
I take the case you told for reference, but still there's a failure said the define
should be capital letters.
but if change it to capital letters, there will be another error Function name does
not follow the rules: 1. First character should be upper case 2. Must contain
lower case characters 3. No white space characters

#define Main main

INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)
{
UnitTestingEntry ();
return 0;
}

Hello Mike,

I saw the below commit:
SHA-1: dcaa93936591883aa7826eb45ef00416ad82ef08
* MdeModulePkg/Variable/RuntimeDxe: Add Variable Lock Protocol Unit Tests
has a similar case that should involve the naming of the 'main' function within the unit test codes.

I am wondering how the open raised by Wenyi was handled back then.
Do you have suggestions for this case? Thanks in advance.

Best Regards,
Hao Wu



Thanks
Wenyi

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test
MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64 2021-08-
02T01:09:28.5960733Z
=================================================================
=============
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line with
arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More
Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z
=================================================================
=====
======== 2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use
Cipheriv for counter mode of aes-256-ctr 2021-08-02T01:09:29.3510020Z
(node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3513605Z (node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3517536Z (node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3545461Z
[command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build -c
.pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a
IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based BaseTools
2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg:
EccCheck Test NO-TARGET -- 2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no
initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0703421Z ERROR - *Line number: 77
2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR - 2021-08-02T01:09:33.0716634Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0717372Z ERROR -
*Error code: 5007 2021-08-02T01:09:33.0718214Z ERROR - *There should
be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0719195Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0720631Z ERROR - *Line number: 78
2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR - 2021-08-02T01:09:33.0724953Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0725713Z ERROR -
*Error code: 5007 2021-08-02T01:09:33.0726562Z ERROR - *There should
be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0727526Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0728345Z ERROR - *Line number: 79
2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR - 2021-08-02T01:09:33.0732496Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0733224Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0734114Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0737620Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0739185Z ERROR - *Line number: 117
2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR - 2021-08-02T01:09:33.0744829Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0745459Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0746821Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0747774Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0749076Z ERROR - *Line number: 117
2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR - 2021-08-02T01:09:33.0751607Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0754599Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0761175Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0762167Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0763160Z ERROR - *Line number: 117
2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR - 2021-08-02T01:09:33.0764843Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0766810Z ERROR -
*Error code: 8006 2021-08-02T01:09:33.0767819Z ERROR - *Function name
does not follow the rules: 1. First character should be upper case 2.
Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0769619Z ERROR - *Line number: 181
2021-08-02T01:09:33.0773329Z ERROR - *The function name [main] does
not follow the rules 2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should
follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSor
tLibUnitTest.c 2021-08-02T01:09:33.0796985Z ERROR - *Line number: 178
2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in comment
2021-08-02T01:09:33.0798208Z ERROR - 2021-08-02T01:09:33.0798859Z
ERROR - --->Test Failed: EccCheck Test NO-TARGET returned 1
2021-08-02T01:09:33.0807351Z PROGRESS - --Running MdeModulePkg: Dsc
Complete Check Test NO-TARGET -- 2021-08-02T01:09:33.1524790Z
PROGRESS
- --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg: Char
Encoding Check Test NO-TARGET -- 2021-08-02T01:09:33.6280380Z
PROGRESS
- --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg:
License Check Test NO-TARGET -- 2021-08-02T01:09:33.6495642Z PROGRESS
- --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg:
Compiler Plugin RELEASE -- 2021-08-02T01:09:33.6785178Z PROGRESS -
Start time: 2021-08-02 01:09:33.677952 2021-08-02T01:09:33.6787716Z
PROGRESS - Setting up the Environment 2021-08-02T01:09:33.7725244Z
PROGRESS - Running Pre Build 2021-08-02T01:09:33.7740357Z PROGRESS -
Running Build RELEASE 2021-08-02T01:17:18.5479885Z PROGRESS - Running
Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02
01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler
Plugin RELEASE 2021-08-02T01:17:18.5519284Z PROGRESS - --Running
MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library
Class Check Test NO-TARGET 2021-08-02T01:17:18.5648791Z PROGRESS -
--Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success: Dependency
Check Test NO-TARGET 2021-08-02T01:17:18.7316162Z PROGRESS - --Running
MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin!
Spell Check Test NO-TARGET 2021-08-02T01:17:23.7934112Z PROGRESS -
--Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid Check
Test NO-TARGET 2021-08-02T01:17:27.1939129Z PROGRESS - --Running
MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host Unit
Test Dsc Complete Check Test NO-TARGET 2021-08-02T01:17:27.3731676Z
ERROR - Overall Build Status: Error 2021-08-02T01:17:27.3733283Z
PROGRESS - There were 1 failures out of 10 attempts
2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build
failed with return code: 1 2021-08-02T01:17:27.4173134Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build
failed with error:
/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed with
return code: 1 2021-08-02T01:17:27.4178252Z ##[section]Finishing:
Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional
comment from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf |
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+ MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.i
+ DevicePathLib|nf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not required
+by the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
+++ c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8,
+9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2,
+1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) *
+ TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer); UT_ASSERT_TRUE
+ (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR
+ (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib
+ Sort Tests", "UefiSortLib.SortLib", NULL, NULL); if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name------------
+ --
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1



.


Wu, Hao A
 

Sorry Mike,

Do you have advice on how to deal with ECC reporting function naming issue on the 'main' function for unit test cases?
So far, I think Wenyi has tried following the same pattern in file MdeModulePkg\Universal\Variable\RuntimeDxe\RuntimeDxeUnitTest\VariableLockRequestToLockUnitTest.c:

///
/// Avoid ECC error for function name that starts with lower case letter
///
#define Main main

/**
Standard POSIX C entry point for host based unit test execution.

@param[in] Argc Number of arguments
@param[in] Argv Array of pointers to arguments

@retval 0 Success
@retval other Error
**/
INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)

But it looks like the ECC checker in the merge test is still complaining.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
A
Sent: Wednesday, August 4, 2021 4:24 PM
To: xiewenyi (A) <xiewenyi2@huawei.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: xiewenyi (A) <xiewenyi2@huawei.com>
Sent: Wednesday, August 4, 2021 4:05 PM
To: Wu, Hao A <hao.a.wu@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test



On 2021/8/2 9:56, Wu, Hao A wrote:
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu,
Hao A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io; Wang,
Jian J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>;
Wu, Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add
UefiSortLib unit test

Adding two unit test case for UefiSortLib. One is a test on
sorting an array of
UINT32 by using PerformQuickSort, another is a test on comparing
the same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style check
failures
when merging the patch.
Could you help to resolve them and then create a test pull request
on the
GitHub for verification? Thanks in advance.
(I think you can take the case under
MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/
for
reference.)
Hi, Wu Hao

I try to deal with the coding format style check failures, and meet a
failure which I am not sure how to solve.
I take the case you told for reference, but still there's a failure
said the define should be capital letters.
but if change it to capital letters, there will be another error
Function name does not follow the rules: 1. First character should be
upper case 2. Must contain lower case characters 3. No white space
characters

#define Main main

INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)
{
UnitTestingEntry ();
return 0;
}

Hello Mike,

I saw the below commit:
SHA-1: dcaa93936591883aa7826eb45ef00416ad82ef08
* MdeModulePkg/Variable/RuntimeDxe: Add Variable Lock Protocol Unit
Tests has a similar case that should involve the naming of the 'main' function
within the unit test codes.

I am wondering how the open raised by Wenyi was handled back then.
Do you have suggestions for this case? Thanks in advance.

Best Regards,
Hao Wu



Thanks
Wenyi

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test
MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64 2021-08-
02T01:09:28.5960733Z
==========================================================
=======
=============
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line with
arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More
Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z
==========================================================
=======
=====
======== 2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use
Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3510020Z
(node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3513605Z (node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3517536Z (node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3545461Z
[command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build
-c .pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a
IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based
BaseTools 2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg
Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg:
EccCheck Test NO-TARGET -- 2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no
initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0703421Z ERROR - *Line number:
77 2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR - 2021-08-02T01:09:33.0716634Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0717372Z ERROR -
*Error code: 5007 2021-08-02T01:09:33.0718214Z ERROR - *There should
be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0719195Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0720631Z ERROR - *Line number:
78 2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR - 2021-08-02T01:09:33.0724953Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0725713Z ERROR -
*Error code: 5007 2021-08-02T01:09:33.0726562Z ERROR - *There should
be no initialization of a variable as part of its declaration
2021-08-02T01:09:33.0727526Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0728345Z ERROR - *Line number:
79 2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR - 2021-08-02T01:09:33.0732496Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0733224Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0734114Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0737620Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0739185Z ERROR - *Line number:
117 2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR - 2021-08-02T01:09:33.0744829Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0745459Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0746821Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0747774Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0749076Z ERROR - *Line number:
117 2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR - 2021-08-02T01:09:33.0751607Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0754599Z ERROR -
*Error code: 7001 2021-08-02T01:09:33.0761175Z ERROR - *There should
be no use of int, unsigned, char, void, long in any .c, .h or .asl
files 2021-08-02T01:09:33.0762167Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0763160Z ERROR - *Line number:
117 2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR - 2021-08-02T01:09:33.0764843Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0766810Z ERROR -
*Error code: 8006 2021-08-02T01:09:33.0767819Z ERROR - *Function
name does not follow the rules: 1. First character should be upper case 2.
Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0769619Z ERROR - *Line number:
181 2021-08-02T01:09:33.0773329Z ERROR - *The function name [main]
does not follow the rules 2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should
follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0796985Z ERROR - *Line number:
178 2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in comment
2021-08-02T01:09:33.0798208Z ERROR - 2021-08-02T01:09:33.0798859Z
ERROR - --->Test Failed: EccCheck Test NO-TARGET returned 1
2021-08-02T01:09:33.0807351Z PROGRESS - --Running MdeModulePkg:
Dsc
Complete Check Test NO-TARGET -- 2021-08-02T01:09:33.1524790Z
PROGRESS
- --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg:
Char
Encoding Check Test NO-TARGET -- 2021-08-02T01:09:33.6280380Z
PROGRESS
- --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg:
License Check Test NO-TARGET -- 2021-08-02T01:09:33.6495642Z
PROGRESS
- --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg:
Compiler Plugin RELEASE -- 2021-08-02T01:09:33.6785178Z PROGRESS -
Start time: 2021-08-02 01:09:33.677952 2021-08-02T01:09:33.6787716Z
PROGRESS - Setting up the Environment 2021-08-02T01:09:33.7725244Z
PROGRESS - Running Pre Build 2021-08-02T01:09:33.7740357Z PROGRESS -
Running Build RELEASE 2021-08-02T01:17:18.5479885Z PROGRESS - Running
Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02
01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler
Plugin RELEASE 2021-08-02T01:17:18.5519284Z PROGRESS - --Running
MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library
Class Check Test NO-TARGET 2021-08-02T01:17:18.5648791Z PROGRESS -
--Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success: Dependency
Check Test NO-TARGET 2021-08-02T01:17:18.7316162Z PROGRESS -
--Running
MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin!
Spell Check Test NO-TARGET 2021-08-02T01:17:23.7934112Z PROGRESS -
--Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid Check
Test NO-TARGET 2021-08-02T01:17:27.1939129Z PROGRESS - --Running
MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host Unit
Test Dsc Complete Check Test NO-TARGET 2021-08-02T01:17:27.3731676Z
ERROR - Overall Build Status: Error 2021-08-02T01:17:27.3733283Z
PROGRESS - There were 1 failures out of 10 attempts
2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build
failed with return code: 1 2021-08-02T01:17:27.4173134Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build
failed with error:
/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed
with return code: 1 2021-08-02T01:17:27.4178252Z ##[section]Finishing:
Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional
comment from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6 +
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
|
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
| 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib
+ DevicePathLib|.i
+ DevicePathLib|nf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+#
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not
+required by the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
+++ c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h>
+#include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7 ,8,
+9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3, 2,
+1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) *
+ TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer);
+ UT_ASSERT_TRUE (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for
+the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework,
UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR
+ (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework,
+ "UefiSortLib Sort Tests", "UefiSortLib.SortLib", NULL, NULL); if
(EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name----------
+ --
+ --
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1



.



Wu, Hao A
 

Seems no help is received so far.
The approach I can think of is to add this to the ECC exception list defined in file MdeModulePkg.ci.yaml.

Hello Wenyi,

Could you help to check if the code changes in https://github.com/tianocore/edk2/pull/1883 works for you?
If so, could you update a V3 version of the patch? Thanks in advance.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
A
Sent: Tuesday, August 10, 2021 12:12 PM
To: Kinney, Michael D <michael.d.kinney@intel.com>; devel@edk2.groups.io;
xiewenyi (A) <xiewenyi2@huawei.com>
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

Sorry Mike,

Do you have advice on how to deal with ECC reporting function naming issue
on the 'main' function for unit test cases?
So far, I think Wenyi has tried following the same pattern in file
MdeModulePkg\Universal\Variable\RuntimeDxe\RuntimeDxeUnitTest\Vari
ableLockRequestToLockUnitTest.c:

///
/// Avoid ECC error for function name that starts with lower case letter ///
#define Main main

/**
Standard POSIX C entry point for host based unit test execution.

@param[in] Argc Number of arguments
@param[in] Argv Array of pointers to arguments

@retval 0 Success
@retval other Error
**/
INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)

But it looks like the ECC checker in the merge test is still complaining.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu,
Hao
A
Sent: Wednesday, August 4, 2021 4:24 PM
To: xiewenyi (A) <xiewenyi2@huawei.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: xiewenyi (A) <xiewenyi2@huawei.com>
Sent: Wednesday, August 4, 2021 4:05 PM
To: Wu, Hao A <hao.a.wu@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test



On 2021/8/2 9:56, Wu, Hao A wrote:
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
Wu, Hao A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io;
Wang,
Jian J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>;
Wu, Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add
UefiSortLib unit test

Adding two unit test case for UefiSortLib. One is a test on
sorting an array of
UINT32 by using PerformQuickSort, another is a test on comparing
the same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style
check failures
when merging the patch.
Could you help to resolve them and then create a test pull request
on the
GitHub for verification? Thanks in advance.
(I think you can take the case under
MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/
for
reference.)
Hi, Wu Hao

I try to deal with the coding format style check failures, and meet
a failure which I am not sure how to solve.
I take the case you told for reference, but still there's a failure
said the define should be capital letters.
but if change it to capital letters, there will be another error
Function name does not follow the rules: 1. First character should
be upper case 2. Must contain lower case characters 3. No white
space characters

#define Main main

INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)
{
UnitTestingEntry ();
return 0;
}

Hello Mike,

I saw the below commit:
SHA-1: dcaa93936591883aa7826eb45ef00416ad82ef08
* MdeModulePkg/Variable/RuntimeDxe: Add Variable Lock Protocol Unit
Tests has a similar case that should involve the naming of the 'main'
function within the unit test codes.

I am wondering how the open raised by Wenyi was handled back then.
Do you have suggestions for this case? Thanks in advance.

Best Regards,
Hao Wu



Thanks
Wenyi

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test
MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64 2021-08-
02T01:09:28.5960733Z
==========================================================
=======
=============
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line
with
arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More
Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z
==========================================================
=======
=====
======== 2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use
Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3510020Z
(node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3513605Z
(node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3517536Z
(node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3545461Z
[command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d -c .pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a
IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based
BaseTools 2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg
Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg:
EccCheck Test NO-TARGET -- 2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no
initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0703421Z ERROR - *Line number:
77 2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR - 2021-08-02T01:09:33.0716634Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0717372Z ERROR
- *Error code: 5007 2021-08-02T01:09:33.0718214Z ERROR - *There
should be no initialization of a variable as part of its
declaration 2021-08-02T01:09:33.0719195Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0720631Z ERROR - *Line number:
78 2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR - 2021-08-02T01:09:33.0724953Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0725713Z ERROR
- *Error code: 5007 2021-08-02T01:09:33.0726562Z ERROR - *There
should be no initialization of a variable as part of its
declaration 2021-08-02T01:09:33.0727526Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0728345Z ERROR - *Line number:
79 2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR - 2021-08-02T01:09:33.0732496Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0733224Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0734114Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0737620Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0739185Z ERROR - *Line number:
117 2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR - 2021-08-02T01:09:33.0744829Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0745459Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0746821Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0747774Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0749076Z ERROR - *Line number:
117 2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR - 2021-08-02T01:09:33.0751607Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0754599Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0761175Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0762167Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0763160Z ERROR - *Line number:
117 2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR - 2021-08-02T01:09:33.0764843Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0766810Z ERROR
- *Error code: 8006 2021-08-02T01:09:33.0767819Z ERROR - *Function
name does not follow the rules: 1. First character should be upper case
2.
Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0769619Z ERROR - *Line number:
181 2021-08-02T01:09:33.0773329Z ERROR - *The function name [main]
does not follow the rules 2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should
follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0796985Z ERROR - *Line number:
178 2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in
comment 2021-08-02T01:09:33.0798208Z ERROR -
2021-08-02T01:09:33.0798859Z ERROR - --->Test Failed: EccCheck
Test NO-TARGET returned 1 2021-08-02T01:09:33.0807351Z PROGRESS -
--Running MdeModulePkg:
Dsc
Complete Check Test NO-TARGET -- 2021-08-02T01:09:33.1524790Z
PROGRESS
- --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg:
Char
Encoding Check Test NO-TARGET -- 2021-08-02T01:09:33.6280380Z
PROGRESS
- --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg:
License Check Test NO-TARGET -- 2021-08-02T01:09:33.6495642Z
PROGRESS
- --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg:
Compiler Plugin RELEASE -- 2021-08-02T01:09:33.6785178Z PROGRESS -
Start time: 2021-08-02 01:09:33.677952
2021-08-02T01:09:33.6787716Z
PROGRESS - Setting up the Environment 2021-08-02T01:09:33.7725244Z
PROGRESS - Running Pre Build 2021-08-02T01:09:33.7740357Z PROGRESS -
Running Build RELEASE 2021-08-02T01:17:18.5479885Z PROGRESS -
Running Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02
01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler
Plugin RELEASE 2021-08-02T01:17:18.5519284Z PROGRESS - --Running
MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library
Class Check Test NO-TARGET 2021-08-02T01:17:18.5648791Z PROGRESS -
--Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success:
Dependency Check Test NO-TARGET 2021-08-02T01:17:18.7316162Z
PROGRESS - --Running
MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin!
Spell Check Test NO-TARGET 2021-08-02T01:17:23.7934112Z PROGRESS -
--Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid
Check Test NO-TARGET 2021-08-02T01:17:27.1939129Z PROGRESS -
--Running
MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host
Unit Test Dsc Complete Check Test NO-TARGET
2021-08-02T01:17:27.3731676Z ERROR - Overall Build Status: Error
2021-08-02T01:17:27.3733283Z PROGRESS - There were 1 failures out
of 10 attempts 2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d failed with return code: 1 2021-08-02T01:17:27.4173134Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d
failed with error:
/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed
with return code: 1 2021-08-02T01:17:27.4178252Z ##[section]Finishing:
Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional
comment from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6
+

MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
|
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
| 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib
+ DevicePathLib|.i
+ DevicePathLib|nf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
in
f
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.i
n
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights
+reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not
+required by the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
+++ c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights
+ reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h> #include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed
and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion
+ has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7
+,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3,
+2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32)
+ * TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed
and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion
+ has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer);
+ UT_ASSERT_TRUE (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for
+the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough
resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework,
UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR
+ (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework.
+ Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework,
+ "UefiSortLib Sort Tests", "UefiSortLib.SortLib", NULL, NULL);
+ if
(EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name--------
+ --
+ --
+ --
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1



.






wenyi,xie
 

Hi Wu Hao,

Thank you for your help. I will have a try and send a V3 patch later.

Best Regards,
Wenyi

On 2021/8/11 9:50, Wu, Hao A wrote:
Seems no help is received so far.
The approach I can think of is to add this to the ECC exception list defined in file MdeModulePkg.ci.yaml.

Hello Wenyi,

Could you help to check if the code changes in https://github.com/tianocore/edk2/pull/1883 works for you?
If so, could you update a V3 version of the patch? Thanks in advance.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
A
Sent: Tuesday, August 10, 2021 12:12 PM
To: Kinney, Michael D <michael.d.kinney@intel.com>; devel@edk2.groups.io;
xiewenyi (A) <xiewenyi2@huawei.com>
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

Sorry Mike,

Do you have advice on how to deal with ECC reporting function naming issue
on the 'main' function for unit test cases?
So far, I think Wenyi has tried following the same pattern in file
MdeModulePkg\Universal\Variable\RuntimeDxe\RuntimeDxeUnitTest\Vari
ableLockRequestToLockUnitTest.c:

///
/// Avoid ECC error for function name that starts with lower case letter ///
#define Main main

/**
Standard POSIX C entry point for host based unit test execution.

@param[in] Argc Number of arguments
@param[in] Argv Array of pointers to arguments

@retval 0 Success
@retval other Error
**/
INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)

But it looks like the ECC checker in the merge test is still complaining.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu,
Hao
A
Sent: Wednesday, August 4, 2021 4:24 PM
To: xiewenyi (A) <xiewenyi2@huawei.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: xiewenyi (A) <xiewenyi2@huawei.com>
Sent: Wednesday, August 4, 2021 4:05 PM
To: Wu, Hao A <hao.a.wu@intel.com>; devel@edk2.groups.io
Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test



On 2021/8/2 9:56, Wu, Hao A wrote:
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
Wu, Hao A
Sent: Thursday, July 29, 2021 4:26 PM
To: Wenyi Xie <xiewenyi2@huawei.com>; devel@edk2.groups.io;
Wang,
Jian J <jian.j.wang@intel.com>
Cc: songdongkuang@huawei.com
Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1]
MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

-----Original Message-----
From: Wenyi Xie <xiewenyi2@huawei.com>
Sent: Thursday, July 29, 2021 4:01 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>;
Wu, Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com
Subject: [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add
UefiSortLib unit test

Adding two unit test case for UefiSortLib. One is a test on
sorting an array of
UINT32 by using PerformQuickSort, another is a test on comparing
the same buffer by using StringCompare.

Thanks.
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Sorry, I found that there are a couple of coding format style
check failures
when merging the patch.
Could you help to resolve them and then create a test pull request
on the
GitHub for verification? Thanks in advance.
(I think you can take the case under
MdeModulePkg/Universal/Variable/RuntimeDxe/RuntimeDxeUnitTest/
for
reference.)
Hi, Wu Hao

I try to deal with the coding format style check failures, and meet
a failure which I am not sure how to solve.
I take the case you told for reference, but still there's a failure
said the define should be capital letters.
but if change it to capital letters, there will be another error
Function name does not follow the rules: 1. First character should
be upper case 2. Must contain lower case characters 3. No white
space characters

#define Main main

INT32
Main (
IN INT32 Argc,
IN CHAR8 *Argv[]
)
{
UnitTestingEntry ();
return 0;
}

Hello Mike,

I saw the below commit:
SHA-1: dcaa93936591883aa7826eb45ef00416ad82ef08
* MdeModulePkg/Variable/RuntimeDxe: Add Variable Lock Protocol Unit
Tests has a similar case that should involve the naming of the 'main'
function within the unit test codes.

I am wondering how the open raised by Wenyi was handled back then.
Do you have suggestions for this case? Thanks in advance.

Best Regards,
Hao Wu



Thanks
Wenyi

Error details:
2021-08-02T01:09:28.5955820Z ##[section]Starting: Build and Test
MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64 2021-08-
02T01:09:28.5960733Z
==========================================================
=======
=============
2021-08-02T01:09:28.5961018Z Task : Command Line
2021-08-02T01:09:28.5961258Z Description : Run a command line
with
arguments
2021-08-02T01:09:28.5961502Z Version : 1.1.3
2021-08-02T01:09:28.5961897Z Author : Microsoft Corporation
2021-08-02T01:09:28.5962259Z Help : [More
Information](https://go.microsoft.com/fwlink/?LinkID=613735)
2021-08-02T01:09:28.5962678Z
==========================================================
=======
=====
======== 2021-08-02T01:09:29.3504946Z (node:3659) Warning: Use
Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3510020Z
(node:3659) Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3511551Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3513605Z
(node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3516798Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3517536Z
(node:3659)
Warning: Use Cipheriv for counter mode of aes-256-ctr
2021-08-02T01:09:29.3518178Z (node:3659) Warning: Use Cipheriv for
counter mode of aes-256-ctr 2021-08-02T01:09:29.3545461Z
[command]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d -c .pytool/CISettings.py -p MdeModulePkg -t RELEASE,NO-TARGET -a
IA32,X64,ARM,AARCH64,RISCV64 TOOL_CHAIN_TAG=GCC5
2021-08-02T01:09:29.3546707Z SECTION - Init SDE
2021-08-02T01:09:29.3547571Z WARNING - Using Pip Tools based
BaseTools 2021-08-02T01:09:29.3548395Z SECTION - Loading Plugins
2021-08-02T01:09:29.3549212Z SECTION - Start Invocable Tool
2021-08-02T01:09:29.3550018Z SECTION - Getting Environment
2021-08-02T01:09:29.3550794Z SECTION - Loading plugins
2021-08-02T01:09:29.3551675Z SECTION - Building MdeModulePkg
Package
2021-08-02T01:09:29.3552693Z PROGRESS - --Running MdeModulePkg:
EccCheck Test NO-TARGET -- 2021-08-02T01:09:33.0697006Z ERROR -
2021-08-02T01:09:33.0698018Z ERROR - EFI coding style error
2021-08-02T01:09:33.0698748Z ERROR - *Error code: 5007
2021-08-02T01:09:33.0700631Z ERROR - *There should be no
initialization of a variable as part of its declaration
2021-08-02T01:09:33.0702675Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0703421Z ERROR - *Line number:
77 2021-08-02T01:09:33.0703929Z ERROR - *Variable Name: TestCount
2021-08-02T01:09:33.0715684Z ERROR - 2021-08-02T01:09:33.0716634Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0717372Z ERROR
- *Error code: 5007 2021-08-02T01:09:33.0718214Z ERROR - *There
should be no initialization of a variable as part of its
declaration 2021-08-02T01:09:33.0719195Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0720631Z ERROR - *Line number:
78 2021-08-02T01:09:33.0721451Z ERROR - *Variable Name: TestBuffer
2021-08-02T01:09:33.0722114Z ERROR - 2021-08-02T01:09:33.0724953Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0725713Z ERROR
- *Error code: 5007 2021-08-02T01:09:33.0726562Z ERROR - *There
should be no initialization of a variable as part of its
declaration 2021-08-02T01:09:33.0727526Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0728345Z ERROR - *Line number:
79 2021-08-02T01:09:33.0729046Z ERROR - *Variable Name: TestResult
2021-08-02T01:09:33.0729694Z ERROR - 2021-08-02T01:09:33.0732496Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0733224Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0734114Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0737620Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0739185Z ERROR - *Line number:
117 2021-08-02T01:09:33.0741301Z ERROR - *[main] Return type int
2021-08-02T01:09:33.0744099Z ERROR - 2021-08-02T01:09:33.0744829Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0745459Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0746821Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0747774Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0749076Z ERROR - *Line number:
117 2021-08-02T01:09:33.0749713Z ERROR - *Parameter argc
2021-08-02T01:09:33.0750999Z ERROR - 2021-08-02T01:09:33.0751607Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0754599Z ERROR
- *Error code: 7001 2021-08-02T01:09:33.0761175Z ERROR - *There
should be no use of int, unsigned, char, void, long in any .c, .h
or .asl files 2021-08-02T01:09:33.0762167Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0763160Z ERROR - *Line number:
117 2021-08-02T01:09:33.0763741Z ERROR - *Parameter argv
2021-08-02T01:09:33.0764290Z ERROR - 2021-08-02T01:09:33.0764843Z
ERROR - EFI coding style error 2021-08-02T01:09:33.0766810Z ERROR
- *Error code: 8006 2021-08-02T01:09:33.0767819Z ERROR - *Function
name does not follow the rules: 1. First character should be upper case
2.
Must contain lower case characters 3. No white space characters
2021-08-02T01:09:33.0768881Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0769619Z ERROR - *Line number:
181 2021-08-02T01:09:33.0773329Z ERROR - *The function name [main]
does not follow the rules 2021-08-02T01:09:33.0791935Z ERROR -
2021-08-02T01:09:33.0793865Z ERROR - EFI coding style error
2021-08-02T01:09:33.0794555Z ERROR - *Error code: 9002
2021-08-02T01:09:33.0795350Z ERROR - *The function headers should
follow Doxygen special documentation blocks in section 2.3.5
2021-08-02T01:09:33.0796271Z ERROR - *file:
//home/vsts/work/1/s/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiS
or tLibUnitTest.c 2021-08-02T01:09:33.0796985Z ERROR - *Line number:
178 2021-08-02T01:09:33.0797610Z ERROR - *No doxygen tags in
comment 2021-08-02T01:09:33.0798208Z ERROR -
2021-08-02T01:09:33.0798859Z ERROR - --->Test Failed: EccCheck
Test NO-TARGET returned 1 2021-08-02T01:09:33.0807351Z PROGRESS -
--Running MdeModulePkg:
Dsc
Complete Check Test NO-TARGET -- 2021-08-02T01:09:33.1524790Z
PROGRESS
- --->Test Success: Dsc Complete Check Test NO-TARGET
2021-08-02T01:09:33.1536004Z PROGRESS - --Running MdeModulePkg:
Char
Encoding Check Test NO-TARGET -- 2021-08-02T01:09:33.6280380Z
PROGRESS
- --->Test Success: Char Encoding Check Test NO-TARGET
2021-08-02T01:09:33.6289076Z PROGRESS - --Running MdeModulePkg:
License Check Test NO-TARGET -- 2021-08-02T01:09:33.6495642Z
PROGRESS
- --->Test Success: License Check Test NO-TARGET
2021-08-02T01:09:33.6508125Z PROGRESS - --Running MdeModulePkg:
Compiler Plugin RELEASE -- 2021-08-02T01:09:33.6785178Z PROGRESS -
Start time: 2021-08-02 01:09:33.677952
2021-08-02T01:09:33.6787716Z
PROGRESS - Setting up the Environment 2021-08-02T01:09:33.7725244Z
PROGRESS - Running Pre Build 2021-08-02T01:09:33.7740357Z PROGRESS -
Running Build RELEASE 2021-08-02T01:17:18.5479885Z PROGRESS -
Running Post Build
2021-08-02T01:17:18.5511807Z PROGRESS - End time: 2021-08-02
01:17:18.549974 Total time Elapsed: 0:07:44
2021-08-02T01:17:18.5512997Z PROGRESS - --->Test Success: Compiler
Plugin RELEASE 2021-08-02T01:17:18.5519284Z PROGRESS - --Running
MdeModulePkg: Library Class Check Test NO-TARGET --
2021-08-02T01:17:18.5639216Z PROGRESS - --->Test Success: Library
Class Check Test NO-TARGET 2021-08-02T01:17:18.5648791Z PROGRESS -
--Running MdeModulePkg: Dependency Check Test NO-TARGET --
2021-08-02T01:17:18.7306611Z PROGRESS - --->Test Success:
Dependency Check Test NO-TARGET 2021-08-02T01:17:18.7316162Z
PROGRESS - --Running
MdeModulePkg: Spell Check Test NO-TARGET --
2021-08-02T01:17:23.7922166Z WARNING - --->Test Skipped: in plugin!
Spell Check Test NO-TARGET 2021-08-02T01:17:23.7934112Z PROGRESS -
--Running MdeModulePkg: Guid Check Test NO-TARGET --
2021-08-02T01:17:27.1928850Z PROGRESS - --->Test Success: Guid
Check Test NO-TARGET 2021-08-02T01:17:27.1939129Z PROGRESS -
--Running
MdeModulePkg: Host Unit Test Dsc Complete Check Test NO-TARGET --
2021-08-02T01:17:27.3703640Z PROGRESS - --->Test Success: Host
Unit Test Dsc Complete Check Test NO-TARGET
2021-08-02T01:17:27.3731676Z ERROR - Overall Build Status: Error
2021-08-02T01:17:27.3733283Z PROGRESS - There were 1 failures out
of 10 attempts 2021-08-02T01:17:27.3734501Z SECTION - Summary
2021-08-02T01:17:27.3735613Z ERROR - Error
2021-08-02T01:17:27.4159842Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d failed with return code: 1 2021-08-02T01:17:27.4173134Z
##[error]/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_buil
d
failed with error:
/opt/hostedtoolcache/Python/3.8.11/x64/bin/stuart_ci_build failed
with return code: 1 2021-08-02T01:17:27.4178252Z ##[section]Finishing:
Build and Test MdeModulePkg IA32,X64,ARM,AARCH64,RISCV64

Best Regards,
Hao Wu



I will wait a couple days before merging to see if any additional
comment from other reviewers.

Best Regards,
Hao Wu



Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/Test/MdeModulePkgHostTest.dsc | 6
+

MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
|
32
++++
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
| 188
++++++++++++++++++++
3 files changed, 226 insertions(+)

diff --git a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
index 4da4692c8451..c9ec835df65d 100644
--- a/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
+++ b/MdeModulePkg/Test/MdeModulePkgHostTest.dsc
@@ -41,3 +41,9 @@ [Components]
<PcdsFixedAtBuild>

gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDis
able|TRUE
}
+
+
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
+ <LibraryClasses>
+
+ UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib
+ DevicePathLib|.i
+ DevicePathLib|nf
+ }
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
in
f
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.in
f
new file mode 100644
index 000000000000..85d8dcd69619
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.i
n
+++ f
@@ -0,0 +1,32 @@
+## @file
+# This is a unit test for the UefiSortLib.
+#
+# Copyright (C) Huawei Technologies Co., Ltd. All rights
+reserved #
+SPDX-License-Identifier: BSD-2-Clause-Patent ##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UefiSortLibUnitTest
+ FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
+ VERSION_STRING = 1.0
+ MODULE_TYPE = HOST_APPLICATION
+
+#
+# The following information is for reference only and not
+required by the
build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ UefiSortLibUnitTest.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ UnitTestLib
+ DebugLib
+ UefiSortLib
diff --git
a/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
c
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
c
new file mode 100644
index 000000000000..71f30d8b9f7f
--- /dev/null
+++
b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.
+++ c
@@ -0,0 +1,188 @@
+/** @file
+ Unit tests of the UefiSortLib
+
+ Copyright (C) Huawei Technologies Co., Ltd. All rights
+ reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UnitTestLib.h> #include <Library/SortLib.h>
+
+#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
+#define UNIT_TEST_APP_VERSION "1.0"
+
+#define TEST_ARRAY_SIZE_9 9
+
+/**
+ The function is called by PerformQuickSort to compare int values.
+
+ @param[in] Left The pointer to first buffer.
+ @param[in] Right The pointer to second buffer.
+
+ @retval 0 Buffer1 equal to Buffer2.
+ @return <0 Buffer1 is less than Buffer2.
+ @return >0 Buffer1 is greater than Buffer2.
+
+**/
+INTN
+EFIAPI
+TestCompareFunction (
+ IN CONST VOID *Left,
+ IN CONST VOID *Right
+ )
+{
+ if (*(UINT32*)Right > *(UINT32*)Left) {
+ return 1;
+ } else if (*(UINT32*)Right < *(UINT32*)Left) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ Unit test for PerformQuickSort () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed
and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion
+ has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+SortUINT32ArrayShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ UINTN TestCount = TEST_ARRAY_SIZE_9;
+ UINT32 TestBuffer[TEST_ARRAY_SIZE_9] = {1, 2, 3, 4, 5, 6, 7
+,8, 9};
+ UINT32 TestResult[TEST_ARRAY_SIZE_9] = {9, 8, 7, 6, 5, 4, 3,
+2, 1};
+
+ PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32),
+ (SORT_COMPARE)TestCompareFunction);
+ UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32)
+ * TEST_ARRAY_SIZE_9);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Unit test for StringCompare () API of the UefiSortLib.
+
+ @param[in] Context [Optional] An optional parameter that
enables:
+ 1) test-case reuse with varied parameters and
+ 2) test-case re-entry for Target tests that need a
+ reboot. This parameter is a VOID* and it is the
+ responsibility of the test author to ensure that the
+ contents are well understood by all test cases that may
+ consume it.
+
+ @retval UNIT_TEST_PASSED The Unit test has completed
and
the
test
+ case was successful.
+ @retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion
+ has
failed.
+**/
+UNIT_TEST_STATUS
+EFIAPI
+CompareSameBufferShouldSucceed (
+ IN UNIT_TEST_CONTEXT Context
+ )
+{
+ INTN retval;
+ CONST CHAR16* TestBuffer[] = { L"abcdefg" };
+
+ retval = StringCompare (TestBuffer, TestBuffer);
+ UT_ASSERT_TRUE (retval == 0);
+
+ return UNIT_TEST_PASSED;
+}
+
+/**
+ Initialze the unit test framework, suite, and unit tests for
+the
+ UefiSortLib and run the UefiSortLib unit test.
+
+ @retval EFI_SUCCESS All test cases were dispatched.
+ @retval EFI_OUT_OF_RESOURCES There are not enough
resources
available to
+ initialize the unit tests.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+UnitTestingEntry (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UNIT_TEST_FRAMEWORK_HANDLE Framework;
+ UNIT_TEST_SUITE_HANDLE SortTests;
+
+ Framework = NULL;
+
+ DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME,
+ UNIT_TEST_APP_VERSION ));
+
+ //
+ // Start setting up the test framework for running the tests.
+ //
+ Status = InitUnitTestFramework (&Framework,
UNIT_TEST_APP_NAME,
+ gEfiCallerBaseName, UNIT_TEST_APP_VERSION); if (EFI_ERROR
+ (Status))
{
+ DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework.
+ Status
= %r\n", Status));
+ goto EXIT;
+ }
+
+ //
+ // Populate the UefiSortLib Unit Test Suite.
+ //
+ Status = CreateUnitTestSuite (&SortTests, Framework,
+ "UefiSortLib Sort Tests", "UefiSortLib.SortLib", NULL, NULL);
+ if
(EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for
+ UefiSortLib
API Tests\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //
+ //
+ --------------Suite--------Description------------Name--------
+ --
+ --
+ --
+ Fu
+ nction----------------Pre---Post---Context-----------
+ //
+ AddTestCase (SortTests, "Sort the Array", "Sort",
SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
+ AddTestCase (SortTests, "Compare the Buffer", "Compare",
CompareSameBufferShouldSucceed, NULL, NULL, NULL);
+
+ //
+ // Execute the tests.
+ //
+ Status = RunAllTestSuites (Framework);
+
+EXIT:
+ if (Framework) {
+ FreeUnitTestFramework (Framework);
+ }
+
+ return Status;
+}
+
+/**
+ Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+ int argc,
+ char *argv[]
+ )
+{
+ return UnitTestingEntry ();
+}
--
2.20.1.windows.1



.