From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"gaoliming@byosoft.com.cn" <gaoliming@byosoft.com.cn>,
'Wenyi Xie' <xiewenyi2@huawei.com>
Cc: "songdongkuang@huawei.com" <songdongkuang@huawei.com>,
"Wang, Jian J" <jian.j.wang@intel.com>
Subject: Re: [edk2-devel] 回复: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
Date: Fri, 13 Aug 2021 01:19:39 +0000 [thread overview]
Message-ID: <BN8PR11MB366642116A0F8605134E7ADDCAFA9@BN8PR11MB3666.namprd11.prod.outlook.com> (raw)
In-Reply-To: <012f01d78fde$f9581510$ec083f30$@byosoft.com.cn>
> -----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.wu@intel.com>; 'Wenyi Xie'
> <xiewenyi2@huawei.com>; devel@edk2.groups.io
> Cc: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@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.wu@intel.com>
> > 发送时间: 2021年8月11日 16:33
> > 收件人: Liming Gao <gaoliming@byosoft.com.cn>; Wenyi Xie
> > <xiewenyi2@huawei.com>; devel@edk2.groups.io
> > 抄送: songdongkuang@huawei.com; Wang, Jian J <jian.j.wang@intel.com>
> > 主题: RE: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add
> UefiSortLib
> > unit test
> >
> > > -----Original Message-----
> > > From: Wenyi Xie <xiewenyi2@huawei.com>
> > > Sent: Wednesday, August 11, 2021 2:36 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 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.wu@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.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 |
> > 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
>
>
>
>
>
>
>
prev parent reply other threads:[~2021-08-13 1:19 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-11 6:35 [PATCH EDK2 v3 0/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test wenyi,xie
2021-08-11 6:35 ` [PATCH EDK2 v3 1/1] " wenyi,xie
2021-08-11 8:32 ` Wu, Hao A
2021-08-12 8:35 ` [edk2-devel] " Wu, Hao A
2021-08-13 1:03 ` 回复: " gaoliming
2021-08-13 1:19 ` Wu, Hao A [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BN8PR11MB366642116A0F8605134E7ADDCAFA9@BN8PR11MB3666.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox