All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v2] metadata: automatically detect groups via tags
@ 2026-06-22 13:44 Andrea Cervesato
  2026-06-22 14:02 ` Cyril Hrubis
  2026-06-22 14:11 ` Andrea Cervesato via ltp
  0 siblings, 2 replies; 3+ messages in thread
From: Andrea Cervesato @ 2026-06-22 13:44 UTC (permalink / raw)
  To: Linux Test Project

From: Andrea Cervesato <andrea.cervesato@suse.com>

Automatically assign a 'cve' group to test metadata when we are tagging
it with a CVE number and assign a 'regression' group to test metadata
when we are tagging it with a linux git commit.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v2:
- add linux-git to tags
- Link to v1: https://lore.kernel.org/r/20260622-metadata_cve-v1-1-c8d43e0db19e@suse.com
---
 metadata/metaparse.c             | 46 +++++++++++++++++++++++++++++++++++-----
 metadata/tests/cve.c             | 12 +++++++++++
 metadata/tests/cve.c.json        | 15 +++++++++++++
 metadata/tests/regression.c      | 12 +++++++++++
 metadata/tests/regression.c.json | 15 +++++++++++++
 5 files changed, 95 insertions(+), 5 deletions(-)

diff --git a/metadata/metaparse.c b/metadata/metaparse.c
index a0f94511db36e42e6174774dfa8340cb4dce113a..cb141c383142142491f802e51afd29bc014f0e6e 100644
--- a/metadata/metaparse.c
+++ b/metadata/metaparse.c
@@ -52,12 +52,14 @@ static char *eat_asterisk_space(char *c)
 }
 
 /*
- * Add a group to the groups array, skipping 'kernel' as it's too generic.
- * Returns 0 if no group was added, 1 otherwise.
+ * Add a group to the groups array, skipping path components that are too
+ * generic ('kernel') or assigned from a more reliable source ('cve', which
+ * is derived from the CVE tag instead). Returns 0 if no group was added,
+ * 1 otherwise.
  */
 static int add_group(struct data_node *groups, const char *name)
 {
-	if (name && strcmp(name, "kernel")) {
+	if (name && strcmp(name, "kernel") && strcmp(name, "cve")) {
 		data_node_array_add(groups, data_node_string(name));
 		return 1;
 	}
@@ -971,11 +973,11 @@ static void load_internal_macros(void)
  * Add groups derived from the source file path.
  *
  * Groups are the two nearest parent directories (immediate parent
- * first), skipping 'kernel' as it's too generic:
+ * first), skipping 'kernel' (too generic) and 'cve' (assigned from the
+ * CVE tag instead, see add_tag_groups()):
  *
  *   testcases/kernel/syscalls/clone/clone01.c  -> clone, syscalls
  *   testcases/kernel/kvm/kvm_pagefault01.c     -> kvm
- *   testcases/cve/cve-2017-16939.c             -> cve
  */
 static void add_path_groups(struct data_node *groups, const char *fname)
 {
@@ -1010,6 +1012,38 @@ static void add_path_groups(struct data_node *groups, const char *fname)
 	free(buf);
 }
 
+/*
+ * Add group to specific test tags.
+ */
+static void add_tag_groups(struct data_node *groups, struct data_node *res)
+{
+	struct data_node *tags = data_node_hash_get(res, "tags");
+	int has_cve = 0, has_regression = 0;
+
+	if (!tags || tags->type != DATA_ARRAY)
+		return;
+
+	for (unsigned int i = 0; i < data_node_array_len(tags); i++) {
+		struct data_node *tag = tags->array.array[i];
+		struct data_node *name;
+
+		if (tag->type != DATA_ARRAY || !data_node_array_len(tag))
+			continue;
+
+		name = tag->array.array[0];
+		if (name->type != DATA_STRING)
+			continue;
+
+		if (!has_cve && !strcmp(name->string.val, "CVE")) {
+			data_node_array_add(groups, data_node_string("cve"));
+			has_cve = 1;
+		} else if (!has_regression && !strcmp(name->string.val, "linux-git")) {
+			data_node_array_add(groups, data_node_string("regression"));
+			has_regression = 1;
+		}
+	}
+}
+
 static struct data_node *parse_file(const char *fname)
 {
 	int state = 0, found = 0;
@@ -1064,6 +1098,8 @@ static struct data_node *parse_file(const char *fname)
 		data_node_free(doc);
 	}
 
+	add_tag_groups(groups, res);
+
 	/*
 	 * Always emit groups, even when empty: tests outside testcases/
 	 * and files whose only parent dir is 'kernel' produce no groups.
diff --git a/metadata/tests/cve.c b/metadata/tests/cve.c
new file mode 100644
index 0000000000000000000000000000000000000000..c2b0e551f111ae87f3c6dcb50ef25c66967443f4
--- /dev/null
+++ b/metadata/tests/cve.c
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*\
+ * Test for cve group derived from the CVE tag.
+ */
+
+static struct tst_test test = {
+	.tags = (const struct tst_tag[]) {
+		{"CVE", "2017-16939"},
+		{}
+	}
+};
diff --git a/metadata/tests/cve.c.json b/metadata/tests/cve.c.json
new file mode 100644
index 0000000000000000000000000000000000000000..543d9e58a3e78d296cc4247659d1b26f2a103245
--- /dev/null
+++ b/metadata/tests/cve.c.json
@@ -0,0 +1,15 @@
+  "cve": {
+   "tags": [
+    [
+     "CVE",
+     "2017-16939"
+    ]
+   ],
+   "doc": [
+    "Test for cve group derived from the CVE tag."
+   ],
+   "groups": [
+    "cve"
+   ],
+   "fname": "cve.c"
+  }
\ No newline at end of file
diff --git a/metadata/tests/regression.c b/metadata/tests/regression.c
new file mode 100644
index 0000000000000000000000000000000000000000..e02683dedce13b7579ec874c64476f09f34707de
--- /dev/null
+++ b/metadata/tests/regression.c
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*\
+ * Test for regression group derived from the linux-git tag.
+ */
+
+static struct tst_test test = {
+	.tags = (const struct tst_tag[]) {
+		{"linux-git", "1137b5e2529a"},
+		{}
+	}
+};
diff --git a/metadata/tests/regression.c.json b/metadata/tests/regression.c.json
new file mode 100644
index 0000000000000000000000000000000000000000..21f818888301cd982ca9e52861f7ea0fc2e570be
--- /dev/null
+++ b/metadata/tests/regression.c.json
@@ -0,0 +1,15 @@
+  "regression": {
+   "tags": [
+    [
+     "linux-git",
+     "1137b5e2529a"
+    ]
+   ],
+   "doc": [
+    "Test for regression group derived from the linux-git tag."
+   ],
+   "groups": [
+    "regression"
+   ],
+   "fname": "regression.c"
+  }
\ No newline at end of file

---
base-commit: b2184c0f2debb976414b294b8527298bdac0a877
change-id: 20260622-metadata_cve-25cf42b4f38d

Best regards,
-- 
Andrea Cervesato <andrea.cervesato@suse.com>


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH v2] metadata: automatically detect groups via tags
  2026-06-22 13:44 [LTP] [PATCH v2] metadata: automatically detect groups via tags Andrea Cervesato
@ 2026-06-22 14:02 ` Cyril Hrubis
  2026-06-22 14:11 ` Andrea Cervesato via ltp
  1 sibling, 0 replies; 3+ messages in thread
From: Cyril Hrubis @ 2026-06-22 14:02 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: Linux Test Project

Hi!
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH v2] metadata: automatically detect groups via tags
  2026-06-22 13:44 [LTP] [PATCH v2] metadata: automatically detect groups via tags Andrea Cervesato
  2026-06-22 14:02 ` Cyril Hrubis
@ 2026-06-22 14:11 ` Andrea Cervesato via ltp
  1 sibling, 0 replies; 3+ messages in thread
From: Andrea Cervesato via ltp @ 2026-06-22 14:11 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: Linux Test Project

Merged, Thanks!

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-06-22 14:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-22 13:44 [LTP] [PATCH v2] metadata: automatically detect groups via tags Andrea Cervesato
2026-06-22 14:02 ` Cyril Hrubis
2026-06-22 14:11 ` Andrea Cervesato via ltp

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.