> -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of > gaoliming > Sent: Friday, August 13, 2021 9:03 AM > To: Wu, Hao A <hao.a...@intel.com>; 'Wenyi Xie' > <xiewen...@huawei.com>; devel@edk2.groups.io > Cc: songdongku...@huawei.com; Wang, Jian J <jian.j.w...@intel.com> > Subject: [edk2-devel] 回复: [PATCH EDK2 v3 1/1] > MdeModulePkg/UefiSortLib:Add UefiSortLib unit test > > Hao: > I think this patch can be merged for this stable tag. It passes code review > before soft feature freeze. ECC issue can be regarded as bug fix. Bug fix is > still > allowed in soft feature freeze. Can you merge this patch before hard feature > freeze?
Thanks, already merged via: PR - https://github.com/tianocore/edk2/pull/1892 Commit - https://github.com/tianocore/edk2/commit/ac826886c98524e918753419c039d8b44198943f Best Regards, Hao Wu > > Thanks > Liming > > -----邮件原件----- > > 发件人: Wu, Hao A <hao.a...@intel.com> > > 发送时间: 2021年8月11日 16:33 > > 收件人: Liming Gao <gaolim...@byosoft.com.cn>; Wenyi Xie > > <xiewen...@huawei.com>; devel@edk2.groups.io > > 抄送: songdongku...@huawei.com; Wang, Jian J <jian.j.w...@intel.com> > > 主题: RE: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add > UefiSortLib > > unit test > > > > > -----Original Message----- > > > From: Wenyi Xie <xiewen...@huawei.com> > > > Sent: Wednesday, August 11, 2021 2:36 PM > > > To: devel@edk2.groups.io; Wang, Jian J <jian.j.w...@intel.com>; Wu, > > > Hao > > A > > > <hao.a...@intel.com> > > > Cc: songdongku...@huawei.com; xiewen...@huawei.com > > > Subject: [PATCH EDK2 v3 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. > > > Add 'main' function name to ECC exception list to avoid ECC error. > > > > > > Reviewed-by: Hao A Wu <hao.a...@intel.com> > > > > Hello Liming, > > > > Since the patch looks more like a feature than a bugfix to me, I would > like to > > confirm that can I merge this change now? > > I already gave my 'R-b' tag for the V2 patch on 29th July, but met > > some > ECC > > check issues during previous merging attempt. > > I verified that the latest patch can pass the merging test > > (https://github.com/tianocore/edk2/pull/1892). > > > > Best Regards, > > Hao Wu > > > > > > > > > > Cc: Jian J Wang <jian.j.w...@intel.com> > > > Cc: Hao A Wu <hao.a...@intel.com> > > > Signed-off-by: Wenyi Xie <xiewen...@huawei.com> > > > --- > > > MdeModulePkg/Test/MdeModulePkgHostTest.dsc > > | 6 + > > > MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf | > > 32 > > > +++ > > > MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c | > > 207 > > > ++++++++++++++++++++ > > > MdeModulePkg/MdeModulePkg.ci.yaml > > | 1 + > > > 4 files changed, 246 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. > > > +++ 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..4f44a02c5b5d > > > --- /dev/null > > > +++ b/MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest. > > > +++ c > > > @@ -0,0 +1,207 @@ > > > +/** @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; > > > + UINT32 Index; > > > + UINT32 TestBuffer[TEST_ARRAY_SIZE_9]; > > > + UINT32 TestResult[TEST_ARRAY_SIZE_9]; > > > + > > > + TestCount = TEST_ARRAY_SIZE_9; > > > + for (Index = 0; Index < TEST_ARRAY_SIZE_9; Index++) { > > > + TestBuffer[Index] = Index + 1; > > > + TestResult[Index] = TEST_ARRAY_SIZE_9 - Index; } > > > + > > > + 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; > > > +} > > > + > > > +/// > > > +/// Avoid ECC error for function name that starts with lower case > > > +letter /// #define UefiSortLibUnitTestMain 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 > > > +UefiSortLibUnitTestMain ( > > > + IN INT32 Argc, > > > + IN CHAR8 *Argv[] > > > + ) > > > +{ > > > + UnitTestingEntry (); > > > + return 0; > > > +} > > > diff --git a/MdeModulePkg/MdeModulePkg.ci.yaml > > > b/MdeModulePkg/MdeModulePkg.ci.yaml > > > index 8e01caf94cbf..aa304f2ccd5c 100644 > > > --- a/MdeModulePkg/MdeModulePkg.ci.yaml > > > +++ b/MdeModulePkg/MdeModulePkg.ci.yaml > > > @@ -19,6 +19,7 @@ > > > "ExceptionList": [ > > > "8005", "UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGE.UID", > > > "8005", "UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGE.HID", > > > + "8001", "UefiSortLibUnitTestMain", > > > ], > > > ## Both file path and directory path are accepted. > > > "IgnoreFiles": [ > > > -- > > > 2.20.1.windows.1 > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#79220): https://edk2.groups.io/g/devel/message/79220 Mute This Topic: https://groups.io/mt/84854183/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-