diff mbox series

[4/4] oe-selftest: improved junit test

Message ID 20260108113647.56663-5-miroslav.cernak@siemens.com
State Under Review
Headers show
Series resulttool: JUnit ptest support and robustness; add selftests | expand

Commit Message

Miroslav Cernak Jan. 8, 2026, 11:36 a.m. UTC
Verify junit with improved image status and error

Signed-off-by: Miroslav Cernak <miroslav.cernak@siemens.com>
---
 .../oeqa/selftest/cases/resulttooltests.py    | 62 +++++++++++--------
 1 file changed, 35 insertions(+), 27 deletions(-)
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/resulttooltests.py b/meta/lib/oeqa/selftest/cases/resulttooltests.py
index aa90116795..e933fc6390 100644
--- a/meta/lib/oeqa/selftest/cases/resulttooltests.py
+++ b/meta/lib/oeqa/selftest/cases/resulttooltests.py
@@ -432,6 +432,12 @@  class ResultToolTests(OESelftestTestCase):
                                 "duration": "2",
                                 "log": "FAILED: package-failed.test_failed\nPASS: package-failed.test_passed\n",
                             },
+                            # Test with exitcode without ptestresult
+                            "package-error-noresult": {
+                                "duration": "6",
+                                "exitcode": "123",
+                                "log": "ERROR: -bash: testerror: command not found\nERROR: Exit status is 123\n",
+                            },
                         },
                     },
                 }
@@ -454,11 +460,11 @@  class ResultToolTests(OESelftestTestCase):
             )
 
     def _check_junit_testresults_1(self, testsuites_node):
-        self.assertEqual(testsuites_node.attrib["errors"], "1")
+        self.assertEqual(testsuites_node.attrib["errors"], "2")
         self.assertEqual(testsuites_node.attrib["failures"], "1")
         self.assertEqual(testsuites_node.attrib["skipped"], "2")
-        self.assertEqual(testsuites_node.attrib["tests"], "6")
-        self.assertEqual(testsuites_node.attrib["time"], "16")
+        self.assertEqual(testsuites_node.attrib["tests"], "7")
+        self.assertEqual(testsuites_node.attrib["time"], "22")
 
         testsuites = testsuites_node.findall("testsuite")
         self.assertEqual(testsuites[0].attrib["name"], "runtime_a-image")
@@ -472,10 +478,12 @@  class ResultToolTests(OESelftestTestCase):
         self.assertEqual(testcases[1].attrib["name"], "package-skipped")
         self.assertEqual(testcases[2].attrib["name"], "package-error")
         self.assertEqual(testcases[3].attrib["name"], "package-failed")
+        self.assertEqual(testcases[4].attrib["name"], "package-error-noresult")
         self.assertEqual(testcases[0].attrib["time"], "2")
         self.assertEqual(testcases[1].attrib["time"], "1")
         self.assertEqual(testcases[2].attrib["time"], "4")
         self.assertEqual(testcases[3].attrib["time"], "2")
+        self.assertEqual(testcases[4].attrib["time"], "6")
 
     def test_junit_log_inline(self):
         testresults = self._get_junit_testresults_1
@@ -492,22 +500,22 @@  class ResultToolTests(OESelftestTestCase):
         ptestresult_sections = testresults["a"]["runtime_a-image"]["result"][
             "ptestresult.sections"
         ]
-        self.assertEqual(
-            ptestresult_sections["package-passed"]["log"],
-            testcases[0].find("system-out").text,
-        )
-        self.assertEqual(
-            ptestresult_sections["package-skipped"]["log"],
-            testcases[1].find("system-out").text,
-        )
-        self.assertEqual(
-            ptestresult_sections["package-error"]["log"],
-            testcases[2].find("system-out").text,
-        )
-        self.assertEqual(
-            ptestresult_sections["package-failed"]["log"],
-            testcases[3].find("system-out").text,
-        )
+        # The inline system-out now includes a PtestSummary section followed by the raw section log.
+        # Build expected summaries and verify both parts are present.
+        pkg_error_summary = PtestSummary()
+        pkg_error_summary.add_status("test_error", "ERROR")
+        pkg_error_summary.add_status("test_failed", "FAILED")
+        pkg_error_summary.add_status("test_skipped", "SKIPPED")
+        pkg_failed_summary = PtestSummary()
+        pkg_failed_summary.add_status("test_failed", "FAILED")
+
+        pkg_error_out = testcases[2].find("system-out").text
+        self.assertIn(pkg_error_summary.log_summary, pkg_error_out)
+        self.assertIn(ptestresult_sections["package-error"]["log"], pkg_error_out)
+
+        pkg_failed_out = testcases[3].find("system-out").text
+        self.assertIn(pkg_failed_summary.log_summary, pkg_failed_out)
+        self.assertIn(ptestresult_sections["package-failed"]["log"], pkg_failed_out)
 
         # Check the ptest log messages are inline
         self.assertDictEqual(test_logfiles, {})
@@ -525,14 +533,9 @@  class ResultToolTests(OESelftestTestCase):
         # Verify the attached log files
         ptests_suite = testsuites_node.find(".//testsuite[@name='Package Tests']")
         testcases = ptests_suite.findall("testcase")
-        self.assertIn(
-            "[[ATTACHMENT|test-logs/package-passed.log]]",
-            testcases[0].find("system-out").text,
-        )
-        self.assertIn(
-            "[[ATTACHMENT|test-logs/package-skipped.log]]",
-            testcases[1].find("system-out").text,
-        )
+        # Passed and skipped testcases do not include system-out attachments
+        self.assertIsNone(testcases[0].find("system-out"))
+        self.assertIsNone(testcases[1].find("system-out"))
         self.assertIn(
             "[[ATTACHMENT|test-logs/package-error.log]]",
             testcases[2].find("system-out").text,
@@ -541,6 +544,10 @@  class ResultToolTests(OESelftestTestCase):
             "[[ATTACHMENT|test-logs/package-failed.log]]",
             testcases[3].find("system-out").text,
         )
+        self.assertIn(
+            "[[ATTACHMENT|test-logs/package-error-noresult.log]]",
+            testcases[4].find("system-out").text,
+        )
 
         self.maxDiff = None
         self.assertDictEqual(
@@ -550,5 +557,6 @@  class ResultToolTests(OESelftestTestCase):
                 "test-logs/package-skipped.log": "SKIPPED: package-skipped.test_skipped\n",
                 "test-logs/package-error.log": "ERROR: ERROR: package-error.test_error\nFAILED: package-error.test_failed\nSKIPPED: package-error.test_skipped\nPASSED: package-error.test_passed\n",
                 "test-logs/package-failed.log": "FAILED: package-failed.test_failed\nPASS: package-failed.test_passed\n",
+                "test-logs/package-error-noresult.log": "ERROR: -bash: testerror: command not found\nERROR: Exit status is 123\n",
             },
         )