From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web11.4377.1594267533855946945 for ; Wed, 08 Jul 2020 21:05:34 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: nA+NgfiRfCrYmAmWMQg/FgiuycvsyG1FIU8tzLIAE5aeD+fmUSw/xdhbTHjfDjvH5McDtD8i8S WPQWk/+TEwGA== X-IronPort-AV: E=McAfee;i="6000,8403,9676"; a="212851066" X-IronPort-AV: E=Sophos;i="5.75,330,1589266800"; d="scan'208";a="212851066" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2020 21:05:32 -0700 IronPort-SDR: 2lIsh89oOvL7WxvTBdH/t7WTm1g5nRQSzDttejHc02nHagx7P0pbVHkhnGFvJocN9EsFGU0rHE kkGyEPOTh4Rg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,330,1589266800"; d="scan'208";a="280163901" Received: from mdkinney-mobl2.amr.corp.intel.com ([10.255.230.8]) by orsmga003.jf.intel.com with ESMTP; 08 Jul 2020 21:05:32 -0700 From: "Michael D Kinney" To: devel@edk2.groups.io Subject: [Patch v2 00/16] UnitTestFrameworkPkg: Enhancements and bug fixes Date: Wed, 8 Jul 2020 21:05:05 -0700 Message-Id: <20200709040521.3748-1-michael.d.kinney@intel.com> X-Mailer: git-send-email 2.21.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Changes in V2 ============== * Add UnitTestExpectAssertFailure() to UnitTestLib to simplify the macro UT_EXPECT_ASSERT_FAILURE() and provide better log messages. * Expand UnitTestFrameworkPkg sample unit tests to cover test cases for the new UT_EXPECT_ASSERT_FAILURE() macro and all other UnitTestLib macros. * Add failure type FAILURETYPE_EXPECTASSERT when the macro UT_EXPECT_ASSERT_FAILURE() does not detect an ASSERT(). * Move print of log messages to end of cleanup function to support log messages generated in a cleanup function. * Update running of target-based tests to use SetJump()/LongJump() around prereq, cleanup, and unit test functions to match the behavior of host based tests using cmocka. This also requires all UnitTestLib Assert functions to generate error log message first and then call UnitTestFailure() where the LongJump() is made to make sure all log messages are added before the LongJump(). REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2797 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2798 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2799 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2800 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2801 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2803 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2804 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2805 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2806 * Add Null base libraries for host based unit tests * Add host based test version of BaseLib with hooks for services that use privileged instructions. * Add new UT_EXPECT_ASSERT_FAILURE() macro to UnitTestLib class * Enable source level debug of unit tests * Increase stack size to 256KB for host based tests on Windows * Update BaseTools to support NULL libs for HOST_APPLICATION modules * Guarantee print log works even if unit test generates an exception * Use filename instead of function name in target mode logs Cc: Liming Gao liming.gao@intel.com Cc: Bob Feng bob.c.feng@intel.com Cc: Sean Brogan sean.brogan@microsoft.com Cc: Bret Barkelew Bret.Barkelew@microsoft.com Cc: Jiewen Yao jiewen.yao@intel.com Signed-off-by: Michael D Kinney michael.d.kinney@intel.com Michael D Kinney (16): BaseTools/Python: Allow HOST_APPLICATION to use NULL libraries MdePkg/BaseCpuLibNull: Add Null version of CpuLib for host testing MdePkg/BaseCacheMaintenanceLibNull: Add Null instance for host testing MdePkg/BaseLib: Break out IA32/X64 GCC inline privileged functions MdePkg/Library/BaseLib: Add BaseLib instance for host based unit tests UnitTestFrameworkPkg: Use host libraries from MdePkg UnitTestFrameworkPkg: Enable source level debug for host tests UnitTestFrameworkPkg: Set host application stack size to 256KB UnitTestFrameworkPkg: Change target mode DebugLib mapping UnitTestFrameworkPkg/UnitTestLib: Move print log into cleanup UnitTestFrameworkPkg/UnitTestLib: Fix target mode log messages UnitTestFrameworkPkg/UnitTestLib: Add checks for ASSERT() MdePkg/Include: Hook DebugLib _ASSERT() for unit tests MdePkg/Include: Add UT_EXPECT_ASSERT_FAILURE() to UnitTestLib MdePkg/Library/BaseStackCheckLib: Fix PCD type in INF UnitTestFramewokPkg/SampleUnitTest: Use UT_EXPECT_ASSERT_FAILURE() .../Python/Workspace/WorkspaceCommon.py | 4 +- MdePkg/Include/Library/DebugLib.h | 28 +- MdePkg/Include/Library/UnitTestLib.h | 90 + .../BaseCacheMaintenanceLibNull.c | 225 ++ .../BaseCacheMaintenanceLibNull.inf | 29 + .../BaseCacheMaintenanceLibNull.uni | 12 + .../Library/BaseCpuLibNull/BaseCpuLibNull.c | 37 + .../Library/BaseCpuLibNull/BaseCpuLibNull.inf | 26 + .../Library/BaseCpuLibNull/BaseCpuLibNull.uni | 11 + MdePkg/Library/BaseLib/BaseLib.inf | 4 +- MdePkg/Library/BaseLib/Ia32/GccInline.c | 1181 +------ .../Ia32/{GccInline.c => GccInlinePriv.c} | 601 +--- MdePkg/Library/BaseLib/UnitTestHost.c | 140 + MdePkg/Library/BaseLib/UnitTestHost.h | 66 + .../Library/BaseLib/UnitTestHostBaseLib.inf | 216 ++ .../Library/BaseLib/UnitTestHostBaseLib.uni | 11 + MdePkg/Library/BaseLib/X64/GccInline.c | 1240 +------ .../X64/{GccInline.c => GccInlinePriv.c} | 572 +--- MdePkg/Library/BaseLib/X86UnitTestHost.c | 2977 +++++++++++++++++ .../BaseStackCheckLib/BaseStackCheckLib.inf | 2 +- MdePkg/MdePkg.dec | 3 +- MdePkg/MdePkg.dsc | 4 +- MdePkg/Test/MdePkgHostTest.dsc | 5 + .../Include/HostTest/UnitTestHostBaseLib.h | 582 ++++ .../UnitTestDebugAssertLib.c | 49 + .../UnitTestDebugAssertLib.inf | 31 + .../UnitTestDebugAssertLib.uni | 11 + .../Library/UnitTestLib/Assert.c | 217 +- .../Library/UnitTestLib/AssertCmocka.c | 68 + .../Library/UnitTestLib/RunTests.c | 23 +- .../Library/UnitTestLib/RunTestsCmocka.c | 33 +- .../UnitTestResultReportLib.c | 3 +- .../PrivateInclude/UnitTestFrameworkTypes.h | 1 + .../Sample/SampleUnitTest/SampleUnitTest.c | 510 +++ .../SampleUnitTest/SampleUnitTestDxe.inf | 3 + .../SampleUnitTest/SampleUnitTestHost.inf | 3 + .../SampleUnitTest/SampleUnitTestPei.inf | 3 + .../SampleUnitTest/SampleUnitTestSmm.inf | 3 + .../SampleUnitTestUefiShell.inf | 3 + .../Test/UnitTestFrameworkPkgHostTest.dsc | 5 +- UnitTestFrameworkPkg/UnitTestFrameworkPkg.dsc | 4 + .../UnitTestFrameworkPkgHost.dsc.inc | 10 +- .../UnitTestFrameworkPkgTarget.dsc.inc | 10 +- 43 files changed, 5367 insertions(+), 3689 deletions(-) create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.c create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.inf create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.uni create mode 100644 MdePkg/Library/BaseCpuLibNull/BaseCpuLibNull.c create mode 100644 MdePkg/Library/BaseCpuLibNull/BaseCpuLibNull.inf create mode 100644 MdePkg/Library/BaseCpuLibNull/BaseCpuLibNull.uni copy MdePkg/Library/BaseLib/Ia32/{GccInline.c => GccInlinePriv.c} (62%) create mode 100644 MdePkg/Library/BaseLib/UnitTestHost.c create mode 100644 MdePkg/Library/BaseLib/UnitTestHost.h create mode 100644 MdePkg/Library/BaseLib/UnitTestHostBaseLib.inf create mode 100644 MdePkg/Library/BaseLib/UnitTestHostBaseLib.uni copy MdePkg/Library/BaseLib/X64/{GccInline.c => GccInlinePriv.c} (65%) create mode 100644 MdePkg/Library/BaseLib/X86UnitTestHost.c create mode 100644 MdePkg/Test/UnitTest/Include/HostTest/UnitTestHostBaseLib.h create mode 100644 UnitTestFrameworkPkg/Library/UnitTestDebugAssertLib/UnitTestDebugAssertLib.c create mode 100644 UnitTestFrameworkPkg/Library/UnitTestDebugAssertLib/UnitTestDebugAssertLib.inf create mode 100644 UnitTestFrameworkPkg/Library/UnitTestDebugAssertLib/UnitTestDebugAssertLib.uni -- 2.21.0.windows.1