public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH EDK2 v3 0/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
@ 2021-08-11  6:35 wenyi,xie
  2021-08-11  6:35 ` [PATCH EDK2 v3 1/1] " wenyi,xie
  0 siblings, 1 reply; 6+ messages in thread
From: wenyi,xie @ 2021-08-11  6:35 UTC (permalink / raw)
  To: devel, jian.j.wang, hao.a.wu; +Cc: songdongkuang, xiewenyi2

Main Changes since v2:
1.Add define UefiSortLibUnitTestMain for main.
2.Add UefiSortLibUnitTestMain to ecc exception list to avoid ecc error.

Wenyi Xie (1):
  MdeModulePkg/UefiSortLib:Add UefiSortLib unit test

 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(+)
 create mode 100644 MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf
 create mode 100644 MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c

-- 
2.20.1.windows.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
  2021-08-11  6:35 [PATCH EDK2 v3 0/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test wenyi,xie
@ 2021-08-11  6:35 ` wenyi,xie
  2021-08-11  8:32   ` Wu, Hao A
  0 siblings, 1 reply; 6+ messages in thread
From: wenyi,xie @ 2021-08-11  6:35 UTC (permalink / raw)
  To: devel, jian.j.wang, hao.a.wu; +Cc: songdongkuang, xiewenyi2

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.

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.PcdAllowVariablePolicyEnforcementDisable|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--------------Function----------------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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
  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
  0 siblings, 2 replies; 6+ messages in thread
From: Wu, Hao A @ 2021-08-11  8:32 UTC (permalink / raw)
  To: Liming Gao, Wenyi Xie, devel@edk2.groups.io
  Cc: songdongkuang@huawei.com, Wang, Jian J

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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
  2021-08-11  8:32   ` Wu, Hao A
@ 2021-08-12  8:35     ` Wu, Hao A
  2021-08-13  1:03     ` 回复: " gaoliming
  1 sibling, 0 replies; 6+ messages in thread
From: Wu, Hao A @ 2021-08-12  8:35 UTC (permalink / raw)
  To: devel@edk2.groups.io, Wu, Hao A, Liming Gao, Wenyi Xie
  Cc: songdongkuang@huawei.com, Wang, Jian J

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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* 回复: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
  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       ` [edk2-devel] " Wu, Hao A
  1 sibling, 1 reply; 6+ messages in thread
From: gaoliming @ 2021-08-13  1:03 UTC (permalink / raw)
  To: 'Wu, Hao A', 'Wenyi Xie', devel
  Cc: songdongkuang, 'Wang, Jian J'

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




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] 回复: [PATCH EDK2 v3 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test
  2021-08-13  1:03     ` 回复: " gaoliming
@ 2021-08-13  1:19       ` Wu, Hao A
  0 siblings, 0 replies; 6+ messages in thread
From: Wu, Hao A @ 2021-08-13  1:19 UTC (permalink / raw)
  To: devel@edk2.groups.io, gaoliming@byosoft.com.cn,
	'Wenyi Xie'
  Cc: songdongkuang@huawei.com, Wang, Jian J

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


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-13  1:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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       ` [edk2-devel] " Wu, Hao A

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox