public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Stefano Brivio <sbrivio@redhat.com>, passt-dev@passt.top
Cc: Cleber Rosa <crosa@redhat.com>
Subject: [PATCH 1/4] test: run static checkers with Avocado and JSON definitions
Date: Fri, 19 Jul 2024 16:59:04 +1000	[thread overview]
Message-ID: <20240719065907.3539211-2-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20240719065907.3539211-1-david@gibson.dropbear.id.au>

From: Cleber Rosa <crosa@redhat.com>

This adds a script and configuration to use the Avocado Testing
Framework to run, at this time, the static checkers.

The actual tests are defined using (JSON based) files, that are known
to Avocado as "recipes".  The JSON files are parsed and "resolved"
into tests by Avocado's "runnables-recipe" resolver.  The syntax
allows for any kind of test supported by Avocado to be defined there,
including a mix of different test types.

By the nature of Avocado's default configuration, those will run in
parallel in the host system.  For more complex tests or different use
cases, Avocado could help in future versions by running those in
different environments such as containers.

The entry point ("test/run_avocado") is intended to be an optional
tool at this point, coexisting with the current implementation to run
tests.  It uses Avocado's Job API to create a job with, at this point,
the static checkers suite.

The installation of Avocado itself is left to users, given that the
details on how to install it (virtual environments and specific
tooling) can be a very different and long discussion.

Signed-off-by: Cleber Rosa <crosa@redhat.com>
Message-ID: <20240629121342.3284907-1-crosa@redhat.com>
---
 test/avocado/static_checkers.json | 16 ++++++++++
 test/run_avocado                  | 49 +++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)
 create mode 100644 test/avocado/static_checkers.json
 create mode 100755 test/run_avocado

diff --git a/test/avocado/static_checkers.json b/test/avocado/static_checkers.json
new file mode 100644
index 00000000..5fae43ed
--- /dev/null
+++ b/test/avocado/static_checkers.json
@@ -0,0 +1,16 @@
+[
+    {
+        "kind": "exec-test",
+        "uri": "make",
+        "args": [
+            "clang-tidy"
+        ]
+    },
+    {
+        "kind": "exec-test",
+        "uri": "make",
+        "args": [
+            "cppcheck"
+        ]
+    }
+]
diff --git a/test/run_avocado b/test/run_avocado
new file mode 100755
index 00000000..37db17c3
--- /dev/null
+++ b/test/run_avocado
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+
+
+def check_avocado_version():
+    minimum_version = 106.0
+
+    def error_out():
+        print(
+            f"Avocado version {minimum_version} or later is required.\n"
+            f"You may install it with: \n"
+            f"   python3 -m pip install avocado-framework",
+            file=sys.stderr,
+        )
+        sys.exit(1)
+
+    try:
+        from avocado import VERSION
+
+        if (float(VERSION)) < minimum_version:
+            error_out()
+    except ImportError:
+        error_out()
+
+
+check_avocado_version()
+from avocado.core.job import Job
+from avocado.core.suite import TestSuite
+
+
+def main():
+    repo_root_path = os.path.abspath(
+        os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
+    )
+    config = {
+        "resolver.references": [
+            os.path.join(repo_root_path, "test", "avocado", "static_checkers.json")
+        ],
+        "runner.identifier_format": "{args[0]}",
+    }
+    suite = TestSuite.from_config(config, name="static_checkers")
+    with Job(config, [suite]) as j:
+        return j.run()
+
+
+if __name__ == "__main__":
+    sys.exit(main())
-- 
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+
+
+def check_avocado_version():
+    minimum_version = 106.0
+
+    def error_out():
+        print(
+            f"Avocado version {minimum_version} or later is required.\n"
+            f"You may install it with: \n"
+            f"   python3 -m pip install avocado-framework",
+            file=sys.stderr,
+        )
+        sys.exit(1)
+
+    try:
+        from avocado import VERSION
+
+        if (float(VERSION)) < minimum_version:
+            error_out()
+    except ImportError:
+        error_out()
+
+
+check_avocado_version()
+from avocado.core.job import Job
+from avocado.core.suite import TestSuite
+
+
+def main():
+    repo_root_path = os.path.abspath(
+        os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
+    )
+    config = {
+        "resolver.references": [
+            os.path.join(repo_root_path, "test", "avocado", "static_checkers.json")
+        ],
+        "runner.identifier_format": "{args[0]}",
+    }
+    suite = TestSuite.from_config(config, name="static_checkers")
+    with Job(config, [suite]) as j:
+        return j.run()
+
+
+if __name__ == "__main__":
+    sys.exit(main())
-- 
2.45.2


  reply	other threads:[~2024-07-19  6:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-19  6:59 [PATCH 0/4] RFC: Proof-of-concept based exeter+Avocado tests David Gibson
2024-07-19  6:59 ` David Gibson [this message]
2024-07-19  6:59 ` [PATCH 2/4] test: Extend make targets to run Avocado tests David Gibson
2024-07-19  6:59 ` [PATCH 3/4] test: Exeter based static tests David Gibson
2024-07-19  6:59 ` [PATCH 4/4] test: Add exeter+Avocado based build tests David Gibson

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=20240719065907.3539211-2-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=crosa@redhat.com \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).