Reviewed-by: Bret Barkelew <bret.barkelew@microsoft.com>

 

 

- Bret

 

From: Michael D Kinney
Sent: Friday, July 10, 2020 7:09 PM
To: devel@edk2.groups.io
Cc: Sean Brogan; Bret Barkelew; Yao, Jiewen
Subject: [EXTERNAL] [Patch v3 10/16] UnitTestFrameworkPkg/UnitTestLib: Move print log into cleanup

 

REF: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2805&amp;data=02%7C01%7CBret.Barkelew%40microsoft.com%7C0e54105ccc5b453f790508d8253f690e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637300301563150384&amp;sdata=OY4xwl9Ecv%2F0SJyzzqBUGNxTi1E%2F8Ax70I6jF2dA6cA%3D&amp;reserved=0

If a unit test fails with an exception or an assert, then the
CmockaUnitTestFunctionRunner() is terminated and the logic
that follows the invocation of the unit test is skipped.  This
currently skips the logic that prints log messages.

Move the print of log messages to the end of the function
CmockaUnitTestTeardownFunctionRunner() that is guaranteed to
be executed when a unit test completes normally or is
terminated with an exception or an assert.

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>
---
 .../Library/UnitTestLib/RunTestsCmocka.c      | 33 +++++++++----------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/UnitTestFrameworkPkg/Library/UnitTestLib/RunTestsCmocka.c b/UnitTestFrameworkPkg/Library/UnitTestLib/RunTestsCmocka.c
index fb81cc9658..96aa4d9b13 100644
--- a/UnitTestFrameworkPkg/Library/UnitTestLib/RunTestsCmocka.c
+++ b/UnitTestFrameworkPkg/Library/UnitTestLib/RunTestsCmocka.c
@@ -53,21 +53,9 @@ CmockaUnitTestFunctionRunner (
     UnitTest->Result = UNIT_TEST_SKIPPED;
   } else {
     UnitTest->Result = UNIT_TEST_RUNNING;
-
     Framework->CurrentTest = UnitTest;
     UnitTest->Result = UnitTest->RunTest (UnitTest->Context);
     Framework->CurrentTest = NULL;
-
-    // Print out the log messages - This is a partial solution as it
-    // does not get the log into the XML.  Need cmocka changes to support
-    // stdout and stderr in their xml format
-    //
-    if (UnitTest->Log != NULL) {
-      print_message("UnitTest: %s - %s\n", UnitTest->Name, UnitTest->Description);
-      print_message("Log Output Start\n");
-      print_message("%s", UnitTest->Log);
-      print_message("Log Output End\n");
-    }
   }
 }
 
@@ -112,13 +100,24 @@ CmockaUnitTestTeardownFunctionRunner (
   Suite     = (UNIT_TEST_SUITE *)(UnitTest->ParentSuite);
   Framework = (UNIT_TEST_FRAMEWORK *)(Suite->ParentFramework);
 
-  if (UnitTest->CleanUp == NULL) {
-    return 0;
+  if (UnitTest->CleanUp != NULL) {
+    Framework->CurrentTest = UnitTest;
+    UnitTest->CleanUp (UnitTest->Context);
+    Framework->CurrentTest = NULL;
+  }
+
+  //
+  // Print out the log messages - This is a partial solution as it
+  // does not get the log into the XML.  Need cmocka changes to support
+  // stdout and stderr in their xml format
+  //
+  if (UnitTest->Log != NULL) {
+    print_message("UnitTest: %s - %s\n", UnitTest->Name, UnitTest->Description);
+    print_message("Log Output Start\n");
+    print_message("%s", UnitTest->Log);
+    print_message("Log Output End\n");
   }
 
-  Framework->CurrentTest = UnitTest;
-  UnitTest->CleanUp (UnitTest->Context);
-  Framework->CurrentTest = NULL;
   //
   // Return 0 for success.  Non-zero for error.
   //
--
2.21.0.windows.1