All of lore.kernel.org
 help / color / mirror / Atom feed
From: <daniel.turull@ericsson.com>
To: <openembedded-core@lists.openembedded.org>
Cc: <pratik.farkase@est.tech>, <richard.purdie@linuxfoundation.org>,
	"Daniel Turull" <daniel.turull@ericsson.com>
Subject: [PATCH 2/2] oeqa: replace runltp with kirk
Date: Wed, 25 Mar 2026 09:40:20 +0100	[thread overview]
Message-ID: <20260325084021.3915804-2-daniel.turull@ericsson.com> (raw)
In-Reply-To: <20260325084021.3915804-1-daniel.turull@ericsson.com>

From: Daniel Turull <daniel.turull@ericsson.com>

runltp has been removed from ltp and kirk is the official tool to
invoke linux ltp tests.

See:
https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b

Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
Assisted-by: Claude, Anthropic
---
 meta/lib/oeqa/runtime/cases/ltp.py        | 16 ++++++-------
 meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
 meta/lib/oeqa/utils/logparser.py          | 29 +++++++++++++++++++++++
 meta/recipes-extended/ltp/ltp_20260130.bb |  1 +
 4 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
index 0ffdbe23e4..11c4814090 100644
--- a/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/meta/lib/oeqa/runtime/cases/ltp.py
@@ -12,7 +12,7 @@ import pprint
 from oeqa.runtime.case import OERuntimeTestCase
 from oeqa.core.decorator.depends import OETestDepends
 from oeqa.runtime.decorator.package import OEHasPackage
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
 
 class LtpTestBase(OERuntimeTestCase):
 
@@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
 
     def runltp(self, ltp_group):
             # LTP appends to log files, so ensure we start with a clean log
-            self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+            self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
 
-            cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+            cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
 
             starttime = time.time()
             (status, output) = self.target.run(cmd, timeout=1200)
@@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
             self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
 
             # Copy the machine-readable test results locally so we can parse it
-            dst = os.path.join(self.ltptest_log_dir, ltp_group)
-            remote_src = "/opt/ltp/results/%s" % ltp_group 
+            dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
+            remote_src = "/opt/ltp/results/%s.json" % ltp_group
             (status, output) = self.target.copyFrom(remote_src, dst, True)
             if status:
                 msg = 'File could not be copied. Output: %s' % output
                 self.target.logger.warning(msg)
 
-            parser = LtpParser()
+            parser = LtpKirkParser()
             results, sections  = parser.parse(dst)
 
             sections['duration'] = int(endtime-starttime)
@@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
 
     # LTP runtime tests
     @OETestDepends(['ssh.SSHTest.test_ssh'])
-    @OEHasPackage(["ltp"])
+    @OEHasPackage(["ltp", "python3-kirk"])
     def test_ltp_help(self):
-        (status, output) = self.target.run('/opt/ltp/runltp --help')
+        (status, output) = self.target.run('kirk --help')
         msg = 'Failed to get ltp help. Output: %s' % output
         self.assertEqual(status, 0, msg=msg)
 
diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
index ce6f4bf59d..cf84ec1182 100644
--- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
@@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
 from oeqa.core.decorator.depends import OETestDepends
 from oeqa.runtime.decorator.package import OEHasPackage
 from oeqa.core.decorator.data import skipIfQemu
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
 
 class LtpStressBase(OERuntimeTestCase):
 
@@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
 class LtpStressTest(LtpStressBase):
 
     def runltp(self, stress_group):
-            cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
+            cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
             starttime = time.time()
             (status, output) = self.target.run(cmd)
             endtime = time.time()
@@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
 
             self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
 
-            parser = LtpParser()
-            results, sections  = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
+            # Copy kirk JSON report from target
+            dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
+            remote_src = "/opt/ltp/results/%s.json" % stress_group
+            (status, output) = self.target.copyFrom(remote_src, dst, True)
+            if status:
+                msg = 'File could not be copied. Output: %s' % output
+                self.target.logger.warning(msg)
+
+            parser = LtpKirkParser()
+            results, sections  = parser.parse(dst)
 
             runtime = int(endtime-starttime)
             sections['duration'] = runtime
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index c479864162..a907421fab 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -5,6 +5,7 @@
 #
 
 import enum
+import json
 import os
 import re
 
@@ -158,6 +159,34 @@ class LtpParser:
         return results, section
 
 
+class LtpKirkParser:
+    """Parse kirk JSON report into the same format as LtpParser."""
+
+    STATUS_MAP = {
+        "pass": "PASSED",
+        "fail": "FAILED",
+        "brok": "FAILED",
+        "conf": "SKIPPED",
+        "warn": "PASSED",
+    }
+
+    def parse(self, jsonfile):
+        with open(jsonfile, errors="replace") as f:
+            report = json.load(f)
+
+        results = {}
+        section = {"duration": 0, "log": ""}
+
+        for entry in report.get("results", []):
+            results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
+            test = entry.get("test", {})
+            section["log"] += test.get("log", "")
+
+        section["duration"] = int(report.get("stats", {}).get("runtime", 0))
+
+        return results, section
+
+
 # ltp Compliance log parsing
 class LtpComplianceParser(object):
     def __init__(self):
diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb b/meta/recipes-extended/ltp/ltp_20260130.bb
index dcd1e81398..1ff20a7898 100644
--- a/meta/recipes-extended/ltp/ltp_20260130.bb
+++ b/meta/recipes-extended/ltp/ltp_20260130.bb
@@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
     net-tools \
     perl \
     python3-core \
+    python3-kirk \
     procps \
     quota \
     unzip \


  reply	other threads:[~2026-03-25 11:07 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-25  8:40 [PATCH 1/2] python3-kirk: Add version 4.0.0 daniel.turull
2026-03-25  8:40 ` daniel.turull [this message]
2026-03-25 12:38   ` [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk Alexander Kanavin
2026-03-25 13:37     ` Daniel Turull
2026-03-25 12:58   ` Bruce Ashfield
2026-03-25 13:02     ` Alexander Kanavin
2026-03-25 13:45       ` Daniel Turull
2026-03-25 13:44     ` Daniel Turull
2026-03-25 14:22       ` Bruce Ashfield
2026-03-25 14:41         ` Daniel Turull
2026-03-25 16:35   ` Richard Purdie
2026-03-25 16:42     ` [OE-core] " Daniel Turull
2026-03-26 13:02     ` Daniel Turull
2026-03-27 12:30       ` David Nyström
2026-03-27 15:40         ` Richard Purdie
2026-03-27 15:45           ` Daniel Turull
2026-03-25 12:34 ` [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0 Alexander Kanavin
2026-03-25 13:26   ` Daniel Turull

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-all 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=20260325084021.3915804-2-daniel.turull@ericsson.com \
    --to=daniel.turull@ericsson.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=pratik.farkase@est.tech \
    --cc=richard.purdie@linuxfoundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.