public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "gaoliming" <gaoliming@byosoft.com.cn>
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: 回复: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
Date: Fri, 13 Aug 2021 09:03:05 +0800	[thread overview]
Message-ID: <012f01d78fde$f9581510$ec083f30$@byosoft.com.cn> (raw)
In-Reply-To: <BN8PR11MB36663F0B855CCE32CF48E524CAF89@BN8PR11MB3666.namprd11.prod.outlook.com>

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@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.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




  parent reply	other threads:[~2021-08-13  1:03 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 [this message]
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='012f01d78fde$f9581510$ec083f30$@byosoft.com.cn' \
    --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