[LTP] [PATCH 04/13] tst_run_shell: Add support for groups in the env JSON

Cyril Hrubis chrubis@suse.cz
Wed Jun 24 11:18:51 CEST 2026


If present we assert that the groups is an array of strings but we don't
use the value since it's not used by the test itself. With that we can
add groups to the shell tests and they will end up being carried on to
the metadata.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 testcases/lib/tst_run_shell.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/testcases/lib/tst_run_shell.c b/testcases/lib/tst_run_shell.c
index 2778fb6d5..fa893304a 100644
--- a/testcases/lib/tst_run_shell.c
+++ b/testcases/lib/tst_run_shell.c
@@ -57,6 +57,7 @@ enum test_attr_ids {
 	DEV_MIN_SIZE,
 	FILESYSTEMS,
 	FORMAT_DEVICE,
+	GROUPS,
 	MIN_CPUS,
 	MIN_MEM_AVAIL,
 	MIN_KVER,
@@ -91,6 +92,7 @@ static ujson_obj_attr test_attrs[] = {
 	UJSON_OBJ_ATTR_IDX(DEV_MIN_SIZE, "dev_min_size", UJSON_INT),
 	UJSON_OBJ_ATTR_IDX(FILESYSTEMS, "filesystems", UJSON_ARR),
 	UJSON_OBJ_ATTR_IDX(FORMAT_DEVICE, "format_device", UJSON_BOOL),
+	UJSON_OBJ_ATTR_IDX(GROUPS, "groups", UJSON_ARR),
 	UJSON_OBJ_ATTR_IDX(MIN_CPUS, "min_cpus", UJSON_INT),
 	UJSON_OBJ_ATTR_IDX(MIN_MEM_AVAIL, "min_mem_avail", UJSON_INT),
 	UJSON_OBJ_ATTR_IDX(MIN_KVER, "min_kver", UJSON_STR),
@@ -125,7 +127,7 @@ static ujson_obj test_obj = {
 	.attr_cnt = UJSON_ARRAY_SIZE(test_attrs),
 };
 
-static const char *const *parse_strarr(ujson_reader *reader, ujson_val *val)
+static const char *const *parse_strarr(ujson_reader *reader, ujson_val *val, bool alloc)
 {
 	unsigned int cnt = 0, i = 0;
 	char **ret;
@@ -141,6 +143,9 @@ static const char *const *parse_strarr(ujson_reader *reader, ujson_val *val)
 		cnt++;
 	}
 
+	if (!alloc)
+		return NULL;
+
 	ujson_reader_state_load(reader, state);
 
 	ret = SAFE_MALLOC(sizeof(char *) * (cnt + 1));
@@ -242,7 +247,7 @@ static struct tst_fs *parse_filesystems(ujson_reader *reader, ujson_val *val)
 		UJSON_OBJ_FOREACH_FILTER(reader, val, &fs_obj, ujson_empty_obj) {
 			switch ((enum fs_ids)val->idx) {
 			case MKFS_OPTS:
-				ret[i].mkfs_opts = parse_strarr(reader, val);
+				ret[i].mkfs_opts = parse_strarr(reader, val, true);
 			break;
 			case MKFS_SIZE_OPT:
 				ret[i].mkfs_size_opt = strdup(val->val_str);
@@ -462,6 +467,9 @@ static void parse_metadata(void)
 		case FORMAT_DEVICE:
 			test.format_device = val.val_bool;
 		break;
+		case GROUPS:
+			parse_strarr(&reader, &val, false);
+		break;
 		case MIN_CPUS:
 			if (val.val_int <= 0)
 				ujson_err(&reader, "Minimal number of cpus must be > 0");
@@ -514,7 +522,7 @@ static void parse_metadata(void)
 			test.needs_hugetlbfs = val.val_bool;
 		break;
 		case NEEDS_KCONFIGS:
-			test.needs_kconfigs = parse_strarr(&reader, &val);
+			test.needs_kconfigs = parse_strarr(&reader, &val, true);
 		break;
 		case NEEDS_ROFS:
 			test.needs_rofs = val.val_bool;
@@ -538,7 +546,7 @@ static void parse_metadata(void)
 			test.save_restore = parse_save_restore(&reader, &val);
 		break;
 		case SKIP_FILESYSTEMS:
-			test.skip_filesystems = parse_strarr(&reader, &val);
+			test.skip_filesystems = parse_strarr(&reader, &val, true);
 		break;
 		case SKIP_IN_COMPAT:
 			test.skip_in_compat = val.val_bool;
@@ -550,7 +558,7 @@ static void parse_metadata(void)
 			test.skip_in_secureboot = val.val_bool;
 		break;
 		case SUPPORTED_ARCHS:
-			test.supported_archs = parse_strarr(&reader, &val);
+			test.supported_archs = parse_strarr(&reader, &val, true);
 		break;
 		case TAGS:
 			test.tags = parse_tags(&reader, &val);
-- 
2.53.0



More information about the ltp mailing list