[edk2-devel] 回复: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

gaoliming gaoliming at byosoft.com.cn
Fri Aug 13 01:03:05 UTC 2021


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
Liming
> -----邮件原件-----
> 发件人: Wu, Hao A <hao.a.wu at intel.com>
> 发送时间: 2021年8月11日 16:33
> 收件人: Liming Gao <gaoliming at byosoft.com.cn>; Wenyi Xie
> <xiewenyi2 at huawei.com>; devel at edk2.groups.io
> 抄送: songdongkuang at huawei.com; Wang, Jian J <jian.j.wang at intel.com>
> 主题: RE: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib
> unit test
> 
> > -----Original Message-----
> > From: Wenyi Xie <xiewenyi2 at huawei.com>
> > Sent: Wednesday, August 11, 2021 2:36 PM
> > To: devel at edk2.groups.io; Wang, Jian J <jian.j.wang at intel.com>; Wu, Hao
> A
> > <hao.a.wu at intel.com>
> > Cc: songdongkuang at huawei.com; xiewenyi2 at 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 at 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 at intel.com>
> > Cc: Hao A Wu <hao.a.wu at intel.com>
> > Signed-off-by: Wenyi Xie <xiewenyi2 at 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





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79217): https://edk2.groups.io/g/devel/message/79217
Mute This Topic: https://groups.io/mt/84854183/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list