From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Wu, Hao A" <hao.a.wu@intel.com>,
Liming Gao <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: Thu, 12 Aug 2021 08:35:02 +0000 [thread overview]
Message-ID: <BN8PR11MB3666C837AFC5E4A843B3D62ECAF99@BN8PR11MB3666.namprd11.prod.outlook.com> (raw)
In-Reply-To: <BN8PR11MB36663F0B855CCE32CF48E524CAF89@BN8PR11MB3666.namprd11.prod.outlook.com>
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Hao
> A
> Sent: Wednesday, August 11, 2021 4:33 PM
> To: Liming Gao <gaoliming@byosoft.com.cn>; Wenyi Xie
> <xiewenyi2@huawei.com>; devel@edk2.groups.io
> Cc: 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
>
> > -----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).
Since no objection received, pushed via:
PR - https://github.com/tianocore/edk2/pull/1892
Commit - https://github.com/tianocore/edk2/commit/ac826886c98524e918753419c039d8b44198943f
If this commit breaks the Soft Feature Freeze rule, please help to raise. I will revert it.
Best Regards,
Hao Wu
>
> 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.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..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
>
>
>
>
>
next prev parent reply other threads:[~2021-08-12 8:35 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 ` Wu, Hao A [this message]
2021-08-13 1:03 ` 回复: " gaoliming
2021-08-13 1:19 ` [edk2-devel] " Wu, Hao A
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=BN8PR11MB3666C837AFC5E4A843B3D62ECAF99@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