All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner
@ 2022-03-23 15:20 Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 2/4] runner: Unit tests for the --prune-mode option Petri Latvala
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Petri Latvala @ 2022-03-23 15:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Petri Latvala

Allow finer control of reporting dynamic subtests instead of
unconditionally assuming that the main subtest result and logs are
uninteresting if the subtest has dynamic subtests.

The default is still to remove subtest results when the subtest has
dynamic subtests. Other options are:

keep-subtests: Remove the dynamic subtests instead, for cases when a
stable test count is more important.

keep-all: Remove nothing.

keep-requested: Remove the results that were not directly requested to
be executed. This option is useful in cases where the test selection
is a hand-picked mix of subtests and particular dynamic subtests.

Signed-off-by: Petri Latvala <petri.latvala@intel.com>
Cc: Arkadiusz Hiler <arek@hiler.eu>
---
 runner/resultgen.c | 83 +++++++++++++++++++++++++++++++++++-----------
 runner/settings.c  | 49 +++++++++++++++++++++++++++
 runner/settings.h  |  8 +++++
 3 files changed, 121 insertions(+), 19 deletions(-)

diff --git a/runner/resultgen.c b/runner/resultgen.c
index bccfca12..76f9fb7d 100644
--- a/runner/resultgen.c
+++ b/runner/resultgen.c
@@ -1229,19 +1229,64 @@ static void fill_from_journal(int fd,
 	fclose(f);
 }
 
-static void prune_subtests_with_dynamic_subtests(const char *binary,
-						 struct subtest_list *subtests,
-						 struct json_object *tests)
+static bool result_is_requested(struct job_list_entry *entry,
+				const char *subtestname,
+				const char *dynamic_name)
 {
-	char piglit_name[256];
+	char entryname[512];
 	size_t i;
 
+	if (dynamic_name)
+		snprintf(entryname, sizeof(entryname) - 1, "%s@%s", subtestname, dynamic_name);
+	else
+		strncpy(entryname, subtestname, sizeof(entryname) - 1);
+
+	for (i = 0; i < entry->subtest_count; i++) {
+		if (!strcmp(entry->subtests[i], entryname))
+			return true;
+	}
+
+	return false;
+}
+
+static void prune_subtests(struct settings *settings,
+			   struct job_list_entry *entry,
+			   struct subtest_list *subtests,
+			   struct json_object *tests)
+{
+	char piglit_name[256];
+	char dynamic_piglit_name[256];
+	size_t i, k;
+
+	if (settings->prune_mode == PRUNE_KEEP_ALL)
+		return;
+
 	for (i = 0; i < subtests->size; i++) {
-		if (subtests->subs[i].dynamic_size) {
-			generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
+		generate_piglit_name(entry->binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
+
+		if (settings->prune_mode == PRUNE_KEEP_DYNAMIC) {
+			if (subtests->subs[i].dynamic_size)
+				json_object_object_del(tests, piglit_name);
+
+			continue;
+		}
+
+		assert(settings->prune_mode == PRUNE_KEEP_SUBTESTS || settings->prune_mode == PRUNE_KEEP_REQUESTED);
+
+		if (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
+		    !result_is_requested(entry, subtests->subs[i].name, NULL)) {
 			json_object_object_del(tests, piglit_name);
 		}
 
+		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
+			if (settings->prune_mode == PRUNE_KEEP_SUBTESTS ||
+			    (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
+			     !result_is_requested(entry, subtests->subs[i].name, subtests->subs[i].dynamic_names[k]))) {
+				generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
+								 dynamic_piglit_name, sizeof(dynamic_piglit_name));
+				json_object_object_del(tests, dynamic_piglit_name);
+			}
+		}
 	}
 }
 
@@ -1426,8 +1471,7 @@ static void add_to_totals(const char *binary,
 	for (i = 0; i < subtests->size; i++) {
 		generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
 
-		if (subtests->subs[i].dynamic_size == 0) {
-			test = get_or_create_json_object(results->tests, piglit_name);
+		if (json_object_object_get_ex(results->tests, piglit_name, &test)) {
 			if (!json_object_object_get_ex(test, "result", &resultobj)) {
 				fprintf(stderr, "Warning: No results set for %s\n", piglit_name);
 				return;
@@ -1441,17 +1485,18 @@ static void add_to_totals(const char *binary,
 		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
 			generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
 							 dynamic_piglit_name, sizeof(dynamic_piglit_name));
-			test = get_or_create_json_object(results->tests, dynamic_piglit_name);
-			if (!json_object_object_get_ex(test, "result", &resultobj)) {
-				fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
-				return;
+
+			if (json_object_object_get_ex(results->tests, dynamic_piglit_name, &test)) {
+				if (!json_object_object_get_ex(test, "result", &resultobj)) {
+					fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
+					return;
+				}
+				result = json_object_get_string(resultobj);
+				add_result_to_totals(emptystrtotal, result);
+				add_result_to_totals(roottotal, result);
+				add_result_to_totals(binarytotal, result);
 			}
-			result = json_object_get_string(resultobj);
-			add_result_to_totals(emptystrtotal, result);
-			add_result_to_totals(roottotal, result);
-			add_result_to_totals(binarytotal, result);
 		}
-
 	}
 }
 
@@ -1483,9 +1528,9 @@ static bool parse_test_directory(int dirfd,
 		goto parse_output_end;
 	}
 
-	prune_subtests_with_dynamic_subtests(entry->binary, &subtests, results->tests);
-
 	override_results(entry->binary, &subtests, results->tests);
+	prune_subtests(settings, entry, &subtests, results->tests);
+
 	add_to_totals(entry->binary, &subtests, results);
 
  parse_output_end:
diff --git a/runner/settings.c b/runner/settings.c
index a7a12f50..cd64b964 100644
--- a/runner/settings.c
+++ b/runner/settings.c
@@ -29,6 +29,7 @@ enum {
 	OPT_ENABLE_CODE_COVERAGE,
 	OPT_COV_RESULTS_PER_TEST,
 	OPT_VERSION,
+	OPT_PRUNE_MODE,
 	OPT_HELP = 'h',
 	OPT_NAME = 'n',
 	OPT_DRY_RUN = 'd',
@@ -65,6 +66,18 @@ static struct {
 	{ 0, 0 },
 };
 
+static struct {
+	int value;
+	const char *name;
+} prune_modes[] = {
+	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic-subtests" },
+	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic" },
+	{ PRUNE_KEEP_SUBTESTS, "keep-subtests" },
+	{ PRUNE_KEEP_ALL, "keep-all" },
+	{ PRUNE_KEEP_REQUESTED, "keep-requested" },
+	{ 0, 0 },
+};
+
 static bool set_log_level(struct settings* settings, const char *level)
 {
 	typeof(*log_levels) *it;
@@ -103,6 +116,20 @@ static bool set_abort_condition(struct settings* settings, const char *cond)
 	return false;
 }
 
+static bool set_prune_mode(struct settings* settings, const char *mode)
+{
+	typeof(*prune_modes) *it;
+
+	for (it = prune_modes; it->name; it++) {
+		if (!strcmp(mode, it->name)) {
+			settings->prune_mode = it->value;
+			return true;
+		}
+	}
+
+	return false;
+}
+
 static bool parse_abort_conditions(struct settings *settings, const char *optarg)
 {
 	char *dup, *origdup, *p;
@@ -239,6 +266,19 @@ static const char *usage_str =
 	"                        (longer) filter list means the test result should\n"
 	"                        change. KERN_NOTICE dmesg level is treated as warn,\n"
 	"                        unless overridden with --dmesg-warn-level.\n"
+	"  --prune-mode <mode>   Control reporting of dynamic subtests by selecting test\n"
+	"                        results that are removed from the final results set.\n"
+	"                        Possible options:\n"
+	"                         keep-dynamic-subtests  - Remove subtests that have dynamic\n"
+	"                                                  subtests. (default)\n"
+	"                         keep-dynamic           - Alias for the above\n"
+	"                         keep-subtests          - Remove dynamic subtests,\n"
+	"                                                  leaving just the parent subtest.\n"
+	"                         keep-all               - Don't remove anything\n"
+	"                         keep-requested         - Remove reported results that are\n"
+	"                                                  not in the requested test set.\n"
+	"                                                  Useful when you have a hand-written\n"
+	"                                                  testlist.\n"
 	"  -b, --blacklist FILENAME\n"
 	"                        Exclude all test matching to regexes from FILENAME\n"
 	"                        (can be used more than once)\n"
@@ -423,6 +463,7 @@ bool parse_options(int argc, char **argv,
 		{"use-watchdog", no_argument, NULL, OPT_WATCHDOG},
 		{"piglit-style-dmesg", no_argument, NULL, OPT_PIGLIT_DMESG},
 		{"dmesg-warn-level", required_argument, NULL, OPT_DMESG_WARN_LEVEL},
+		{"prune-mode", required_argument, NULL, OPT_PRUNE_MODE},
 		{"blacklist", required_argument, NULL, OPT_BLACKLIST},
 		{"list-all", no_argument, NULL, OPT_LIST_ALL},
 		{ 0, 0, 0, 0},
@@ -521,6 +562,12 @@ bool parse_options(int argc, char **argv,
 		case OPT_DMESG_WARN_LEVEL:
 			settings->dmesg_warn_level = atoi(optarg);
 			break;
+		case OPT_PRUNE_MODE:
+			if (!set_prune_mode(settings, optarg)) {
+				usage("Cannot parse prune mode", stderr);
+				goto error;
+			}
+			break;
 		case OPT_BLACKLIST:
 			if (!parse_blacklist(&settings->exclude_regexes,
 					     absolute_path(optarg)))
@@ -779,6 +826,7 @@ bool serialize_settings(struct settings *settings)
 	SERIALIZE_LINE(f, settings, use_watchdog, "%d");
 	SERIALIZE_LINE(f, settings, piglit_style_dmesg, "%d");
 	SERIALIZE_LINE(f, settings, dmesg_warn_level, "%d");
+	SERIALIZE_LINE(f, settings, prune_mode, "%d");
 	SERIALIZE_LINE(f, settings, test_root, "%s");
 	SERIALIZE_LINE(f, settings, results_path, "%s");
 	SERIALIZE_LINE(f, settings, enable_code_coverage, "%d");
@@ -830,6 +878,7 @@ bool read_settings_from_file(struct settings *settings, FILE *f)
 		PARSE_LINE(settings, name, val, use_watchdog, numval);
 		PARSE_LINE(settings, name, val, piglit_style_dmesg, numval);
 		PARSE_LINE(settings, name, val, dmesg_warn_level, numval);
+		PARSE_LINE(settings, name, val, prune_mode, numval);
 		PARSE_LINE(settings, name, val, test_root, val ? strdup(val) : NULL);
 		PARSE_LINE(settings, name, val, results_path, val ? strdup(val) : NULL);
 		PARSE_LINE(settings, name, val, enable_code_coverage, numval);
diff --git a/runner/settings.h b/runner/settings.h
index bbd965d2..6ae64695 100644
--- a/runner/settings.h
+++ b/runner/settings.h
@@ -24,6 +24,13 @@ _Static_assert(ABORT_ALL == (ABORT_TAINT | ABORT_LOCKDEP | ABORT_PING), "ABORT_A
 #define GCOV_RESET GCOV_DIR	"/reset"
 #define CODE_COV_RESULTS_PATH	"code_cov"
 
+enum {
+	PRUNE_KEEP_DYNAMIC = 0,
+	PRUNE_KEEP_SUBTESTS,
+	PRUNE_KEEP_ALL,
+	PRUNE_KEEP_REQUESTED,
+};
+
 struct regex_list {
 	char **regex_strings;
 	GRegex **regexes;
@@ -51,6 +58,7 @@ struct settings {
 	char *results_path;
 	bool piglit_style_dmesg;
 	int dmesg_warn_level;
+	int prune_mode;
 	bool list_all;
 	char *code_coverage_script;
 	bool enable_code_coverage;
-- 
2.30.2

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

* [igt-dev] [PATCH i-g-t 2/4] runner: Unit tests for the --prune-mode option
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
@ 2022-03-23 15:20 ` Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 3/4] runner_tests: Rename dynamic-subtests json test to dynamic-subtests-keep-dynamic Petri Latvala
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Petri Latvala @ 2022-03-23 15:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Petri Latvala

Signed-off-by: Petri Latvala <petri.latvala@intel.com>
Cc: Arkadiusz Hiler <arek@hiler.eu>
---
 runner/runner_tests.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/runner/runner_tests.c b/runner/runner_tests.c
index 96ffbf1f..8fe86978 100644
--- a/runner/runner_tests.c
+++ b/runner/runner_tests.c
@@ -200,6 +200,7 @@ static void assert_settings_equal(struct settings *one, struct settings *two)
 	igt_assert_eqstr(one->results_path, two->results_path);
 	igt_assert_eq(one->piglit_style_dmesg, two->piglit_style_dmesg);
 	igt_assert_eq(one->dmesg_warn_level, two->dmesg_warn_level);
+	igt_assert_eq(one->prune_mode, two->prune_mode);
 }
 
 static void assert_job_list_equal(struct job_list *one, struct job_list *two)
@@ -288,6 +289,7 @@ igt_main
 		igt_assert_eq(settings->per_test_timeout, 0);
 		igt_assert_eq(settings->overall_timeout, 0);
 		igt_assert(!settings->use_watchdog);
+		igt_assert_eq(settings->prune_mode, 0);
 		igt_assert(strstr(settings->test_root, "test-root-dir") != NULL);
 		igt_assert(strstr(settings->results_path, "path-to-results") != NULL);
 
@@ -446,6 +448,7 @@ igt_main
 				       "--collect-code-cov",
 				       "--coverage-per-test",
 				       "--collect-script", "/usr/bin/true",
+				       "--prune-mode=keep-subtests",
 				       "test-root-dir",
 				       "path-to-results",
 		};
@@ -477,6 +480,7 @@ igt_main
 		igt_assert_eq(settings->per_test_timeout, 72);
 		igt_assert_eq(settings->overall_timeout, 360);
 		igt_assert(settings->use_watchdog);
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_SUBTESTS);
 		igt_assert(strstr(settings->test_root, "test-root-dir") != NULL);
 		igt_assert(strstr(settings->results_path, "path-to-results") != NULL);
 
@@ -633,6 +637,33 @@ igt_main
 		igt_assert_eq_u64(settings->disk_usage_limit, 1024UL * 1024UL * 1024UL);
 	}
 
+	igt_subtest("prune-modes") {
+		const char *argv[] = { "runner",
+			               "--prune-mode=keep-dynamic-subtests",
+				       "test-root-dir",
+				       "results-path",
+		};
+
+		igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_DYNAMIC);
+
+		argv[1] = "--prune-mode=keep-dynamic";
+		igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_DYNAMIC);
+
+		argv[1] = "--prune-mode=keep-subtests";
+		igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_SUBTESTS);
+
+		argv[1] = "--prune-mode=keep-all";
+		igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_ALL);
+
+		argv[1] = "--prune-mode=keep-requested";
+		igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+		igt_assert_eq(settings->prune_mode, PRUNE_KEEP_REQUESTED);
+	}
+
 	igt_subtest("parse-clears-old-data") {
 		const char *argv[] = { "runner",
 				       "-n", "foo",
@@ -898,6 +929,7 @@ igt_main
 					       "--overall-timeout", "360",
 					       "--use-watchdog",
 					       "--piglit-style-dmesg",
+					       "--prune-mode=keep-all",
 					       testdatadir,
 					       dirname,
 			};
-- 
2.30.2

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

* [igt-dev] [PATCH i-g-t 3/4] runner_tests: Rename dynamic-subtests json test to dynamic-subtests-keep-dynamic
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 2/4] runner: Unit tests for the --prune-mode option Petri Latvala
@ 2022-03-23 15:20 ` Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 4/4] runner_tests: json tests for all prune-mode options Petri Latvala
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Petri Latvala @ 2022-03-23 15:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Petri Latvala

In preparation for testing the rest of the options for prune_mode,
rename the current dynamic subtest result test to reflect the option
value.

Signed-off-by: Petri Latvala <petri.latvala@intel.com>
Cc: Arkadiusz Hiler <arek@hiler.eu>
---
 .../0/dmesg.txt                                                | 0
 .../0/err.txt                                                  | 0
 .../0/journal.txt                                              | 0
 .../0/out.txt                                                  | 0
 .../1/dmesg.txt                                                | 0
 .../1/err.txt                                                  | 0
 .../1/journal.txt                                              | 0
 .../1/out.txt                                                  | 0
 .../2/dmesg.txt                                                | 0
 .../2/err.txt                                                  | 0
 .../2/journal.txt                                              | 0
 .../2/out.txt                                                  | 0
 .../json_tests_data/dynamic-subtests-keep-dynamic/README.txt   | 3 +++
 .../endtime.txt                                                | 0
 .../joblist.txt                                                | 0
 .../metadata.txt                                               | 1 +
 .../reference.json                                             | 0
 .../starttime.txt                                              | 0
 .../uname.txt                                                  | 0
 runner/json_tests_data/dynamic-subtests/README.txt             | 2 --
 runner/runner_json_tests.c                                     | 2 +-
 21 files changed, 5 insertions(+), 3 deletions(-)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/0/dmesg.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/0/err.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/0/journal.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/0/out.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/1/dmesg.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/1/err.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/1/journal.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/1/out.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/2/dmesg.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/2/err.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/2/journal.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/2/out.txt (100%)
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-dynamic/README.txt
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/endtime.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/joblist.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/metadata.txt (94%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/reference.json (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/starttime.txt (100%)
 rename runner/json_tests_data/{dynamic-subtests => dynamic-subtests-keep-dynamic}/uname.txt (100%)
 delete mode 100644 runner/json_tests_data/dynamic-subtests/README.txt

diff --git a/runner/json_tests_data/dynamic-subtests/0/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/0/dmesg.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/0/dmesg.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/0/dmesg.txt
diff --git a/runner/json_tests_data/dynamic-subtests/0/err.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/0/err.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/0/err.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/0/err.txt
diff --git a/runner/json_tests_data/dynamic-subtests/0/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/0/journal.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/0/journal.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/0/journal.txt
diff --git a/runner/json_tests_data/dynamic-subtests/0/out.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/0/out.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/0/out.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/0/out.txt
diff --git a/runner/json_tests_data/dynamic-subtests/1/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/1/dmesg.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/1/dmesg.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/1/dmesg.txt
diff --git a/runner/json_tests_data/dynamic-subtests/1/err.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/1/err.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/1/err.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/1/err.txt
diff --git a/runner/json_tests_data/dynamic-subtests/1/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/1/journal.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/1/journal.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/1/journal.txt
diff --git a/runner/json_tests_data/dynamic-subtests/1/out.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/1/out.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/1/out.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/1/out.txt
diff --git a/runner/json_tests_data/dynamic-subtests/2/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/2/dmesg.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/2/dmesg.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/2/dmesg.txt
diff --git a/runner/json_tests_data/dynamic-subtests/2/err.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/2/err.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/2/err.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/2/err.txt
diff --git a/runner/json_tests_data/dynamic-subtests/2/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/2/journal.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/2/journal.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/2/journal.txt
diff --git a/runner/json_tests_data/dynamic-subtests/2/out.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/2/out.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/2/out.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/2/out.txt
diff --git a/runner/json_tests_data/dynamic-subtests-keep-dynamic/README.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/README.txt
new file mode 100644
index 00000000..78bbf47c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-dynamic/README.txt
@@ -0,0 +1,3 @@
+A test with dynamic subtests with prune-mode=keep-dynamic should
+generate separate subresults for the dynamic tests without the
+subtests.
diff --git a/runner/json_tests_data/dynamic-subtests/endtime.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/endtime.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/endtime.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/endtime.txt
diff --git a/runner/json_tests_data/dynamic-subtests/joblist.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/joblist.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/joblist.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/joblist.txt
diff --git a/runner/json_tests_data/dynamic-subtests/metadata.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/metadata.txt
similarity index 94%
rename from runner/json_tests_data/dynamic-subtests/metadata.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/metadata.txt
index 8c77de01..2442f37e 100644
--- a/runner/json_tests_data/dynamic-subtests/metadata.txt
+++ b/runner/json_tests_data/dynamic-subtests-keep-dynamic/metadata.txt
@@ -10,3 +10,4 @@ use_watchdog : 0
 piglit_style_dmesg : 0
 test_root : /path/does/not/exist
 results_path : /path/does/not/exist
+prune_mode : 0
diff --git a/runner/json_tests_data/dynamic-subtests/reference.json b/runner/json_tests_data/dynamic-subtests-keep-dynamic/reference.json
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/reference.json
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/reference.json
diff --git a/runner/json_tests_data/dynamic-subtests/starttime.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/starttime.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/starttime.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/starttime.txt
diff --git a/runner/json_tests_data/dynamic-subtests/uname.txt b/runner/json_tests_data/dynamic-subtests-keep-dynamic/uname.txt
similarity index 100%
rename from runner/json_tests_data/dynamic-subtests/uname.txt
rename to runner/json_tests_data/dynamic-subtests-keep-dynamic/uname.txt
diff --git a/runner/json_tests_data/dynamic-subtests/README.txt b/runner/json_tests_data/dynamic-subtests/README.txt
deleted file mode 100644
index 3a63ab17..00000000
--- a/runner/json_tests_data/dynamic-subtests/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-A test with dynamic subtests should generate separate subresults for
-the dynamic tests.
diff --git a/runner/runner_json_tests.c b/runner/runner_json_tests.c
index 43d7f6b9..882225c8 100644
--- a/runner/runner_json_tests.c
+++ b/runner/runner_json_tests.c
@@ -162,7 +162,7 @@ static const char *dirnames[] = {
 	"dmesg-warn-level",
 	"dmesg-warn-level-piglit-style",
 	"dmesg-warn-level-one-piglit-style",
-	"dynamic-subtests",
+	"dynamic-subtests-keep-dynamic",
 	"dynamic-subtest-name-in-multiple-subtests",
 	"unprintable-characters",
 	"empty-result-files",
-- 
2.30.2

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

* [igt-dev] [PATCH i-g-t 4/4] runner_tests: json tests for all prune-mode options
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 2/4] runner: Unit tests for the --prune-mode option Petri Latvala
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 3/4] runner_tests: Rename dynamic-subtests json test to dynamic-subtests-keep-dynamic Petri Latvala
@ 2022-03-23 15:20 ` Petri Latvala
  2022-03-23 16:03 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Petri Latvala @ 2022-03-23 15:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Petri Latvala

Signed-off-by: Petri Latvala <petri.latvala@intel.com>
Cc: Arkadiusz Hiler <arek@hiler.eu>
---
 .../dynamic-subtests-keep-all/0/dmesg.txt     |   7 +
 .../dynamic-subtests-keep-all/0/err.txt       |  36 ++++
 .../dynamic-subtests-keep-all/0/journal.txt   |   2 +
 .../dynamic-subtests-keep-all/0/out.txt       |  19 ++
 .../dynamic-subtests-keep-all/1/dmesg.txt     |   5 +
 .../dynamic-subtests-keep-all/1/err.txt       |   2 +
 .../dynamic-subtests-keep-all/1/journal.txt   |   2 +
 .../dynamic-subtests-keep-all/1/out.txt       |   5 +
 .../dynamic-subtests-keep-all/2/dmesg.txt     |  11 ++
 .../dynamic-subtests-keep-all/2/err.txt       |   8 +
 .../dynamic-subtests-keep-all/2/journal.txt   |   4 +
 .../dynamic-subtests-keep-all/2/out.txt       |  10 +
 .../dynamic-subtests-keep-all/README.txt      |   3 +
 .../dynamic-subtests-keep-all/endtime.txt     |   1 +
 .../dynamic-subtests-keep-all/joblist.txt     |   3 +
 .../dynamic-subtests-keep-all/metadata.txt    |  13 ++
 .../dynamic-subtests-keep-all/reference.json  | 171 ++++++++++++++++++
 .../dynamic-subtests-keep-all/starttime.txt   |   1 +
 .../dynamic-subtests-keep-all/uname.txt       |   1 +
 .../0/dmesg.txt                               |   7 +
 .../dynamic-subtests-keep-requested/0/err.txt |  36 ++++
 .../0/journal.txt                             |   2 +
 .../dynamic-subtests-keep-requested/0/out.txt |  19 ++
 .../1/dmesg.txt                               |   5 +
 .../dynamic-subtests-keep-requested/1/err.txt |   2 +
 .../1/journal.txt                             |   2 +
 .../dynamic-subtests-keep-requested/1/out.txt |   5 +
 .../2/dmesg.txt                               |  11 ++
 .../dynamic-subtests-keep-requested/2/err.txt |   8 +
 .../2/journal.txt                             |   4 +
 .../dynamic-subtests-keep-requested/2/out.txt |  10 +
 .../README.txt                                |   3 +
 .../endtime.txt                               |   1 +
 .../joblist.txt                               |   3 +
 .../metadata.txt                              |  13 ++
 .../reference.json                            | 123 +++++++++++++
 .../starttime.txt                             |   1 +
 .../dynamic-subtests-keep-requested/uname.txt |   1 +
 .../0/dmesg.txt                               |   7 +
 .../dynamic-subtests-keep-subtests/0/err.txt  |  36 ++++
 .../0/journal.txt                             |   2 +
 .../dynamic-subtests-keep-subtests/0/out.txt  |  19 ++
 .../1/dmesg.txt                               |   5 +
 .../dynamic-subtests-keep-subtests/1/err.txt  |   2 +
 .../1/journal.txt                             |   2 +
 .../dynamic-subtests-keep-subtests/1/out.txt  |   5 +
 .../2/dmesg.txt                               |  11 ++
 .../dynamic-subtests-keep-subtests/2/err.txt  |   8 +
 .../2/journal.txt                             |   4 +
 .../dynamic-subtests-keep-subtests/2/out.txt  |  10 +
 .../dynamic-subtests-keep-subtests/README.txt |   3 +
 .../endtime.txt                               |   1 +
 .../joblist.txt                               |   3 +
 .../metadata.txt                              |  13 ++
 .../reference.json                            | 123 +++++++++++++
 .../starttime.txt                             |   1 +
 .../dynamic-subtests-keep-subtests/uname.txt  |   1 +
 runner/runner_json_tests.c                    |   3 +
 58 files changed, 819 insertions(+)
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/0/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/0/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/0/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/0/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/1/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/1/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/1/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/1/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/2/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/2/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/2/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/2/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/README.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/endtime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/joblist.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/metadata.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/reference.json
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/starttime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-all/uname.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/0/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/0/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/0/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/0/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/1/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/1/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/1/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/1/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/2/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/2/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/2/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/2/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/README.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/endtime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/joblist.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/metadata.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/reference.json
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/starttime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-requested/uname.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/0/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/0/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/0/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/0/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/1/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/1/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/1/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/1/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/2/dmesg.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/2/err.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/2/journal.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/2/out.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/README.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/endtime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/joblist.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/metadata.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/reference.json
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/starttime.txt
 create mode 100644 runner/json_tests_data/dynamic-subtests-keep-subtests/uname.txt

diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/0/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-all/0/dmesg.txt
new file mode 100644
index 00000000..c87b4271
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/0/dmesg.txt
@@ -0,0 +1,7 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest debug-log-checking
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-1
+14,1161,23426155240164,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-2
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=98
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/0/err.txt b/runner/json_tests_data/dynamic-subtests-keep-all/0/err.txt
new file mode 100644
index 00000000..3c280788
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/0/err.txt
@@ -0,0 +1,36 @@
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-1 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:11 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-2 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:5 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking failed.
+No log.
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/0/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-all/0/journal.txt
new file mode 100644
index 00000000..aa8cef0c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/0/journal.txt
@@ -0,0 +1,2 @@
+debug-log-checking
+exit:98 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/0/out.txt b/runner/json_tests_data/dynamic-subtests-keep-all/0/out.txt
new file mode 100644
index 00000000..286da3f3
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/0/out.txt
@@ -0,0 +1,19 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:11 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:5 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/1/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-all/1/dmesg.txt
new file mode 100644
index 00000000..d6e16a46
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/1/dmesg.txt
@@ -0,0 +1,5 @@
+6,1164,23426155304955,-;Console: switching to colour dummy device 80x25
+14,1165,23426155304968,-;[IGT] dynamic: executing
+14,1166,23426155308644,-;[IGT] dynamic: starting subtest empty-container
+14,1167,23426155308671,-;[IGT] dynamic: exiting, ret=77
+6,1168,23426155308822,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/1/err.txt b/runner/json_tests_data/dynamic-subtests-keep-all/1/err.txt
new file mode 100644
index 00000000..6247e714
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/1/err.txt
@@ -0,0 +1,2 @@
+Starting subtest: empty-container
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/1/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-all/1/journal.txt
new file mode 100644
index 00000000..3e4ce5c4
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/1/journal.txt
@@ -0,0 +1,2 @@
+empty-container
+exit:77 (0.014s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/1/out.txt b/runner/json_tests_data/dynamic-subtests-keep-all/1/out.txt
new file mode 100644
index 00000000..704734dc
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/1/out.txt
@@ -0,0 +1,5 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: empty-container
+This should skip
+No dynamic tests executed.
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/2/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-all/2/dmesg.txt
new file mode 100644
index 00000000..046ef579
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/2/dmesg.txt
@@ -0,0 +1,11 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest normal
+6,1160,23426155184895,-;Dmesg output for normal
+6,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest normal-dynamic-subtest
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest incomplete
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-incomplete
+6,1160,23426155184895,-;Dmesg output for incomplete
+14,1161,23426155240164,-;[IGT] dynamic: starting subtest resume
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=0
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/2/err.txt b/runner/json_tests_data/dynamic-subtests-keep-all/2/err.txt
new file mode 100644
index 00000000..1eae6061
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/2/err.txt
@@ -0,0 +1,8 @@
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/2/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-all/2/journal.txt
new file mode 100644
index 00000000..9469e227
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/2/journal.txt
@@ -0,0 +1,4 @@
+normal
+incomplete
+resume
+exit:0 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/2/out.txt b/runner/json_tests_data/dynamic-subtests-keep-all/2/out.txt
new file mode 100644
index 00000000..3063844b
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/2/out.txt
@@ -0,0 +1,10 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+This is some output
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/README.txt b/runner/json_tests_data/dynamic-subtests-keep-all/README.txt
new file mode 100644
index 00000000..78bbf47c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/README.txt
@@ -0,0 +1,3 @@
+A test with dynamic subtests with prune-mode=keep-dynamic should
+generate separate subresults for the dynamic tests without the
+subtests.
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/endtime.txt b/runner/json_tests_data/dynamic-subtests-keep-all/endtime.txt
new file mode 100644
index 00000000..5c7608b5
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/endtime.txt
@@ -0,0 +1 @@
+1560163492.410489
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/joblist.txt b/runner/json_tests_data/dynamic-subtests-keep-all/joblist.txt
new file mode 100644
index 00000000..4fdcc5f1
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/joblist.txt
@@ -0,0 +1,3 @@
+dynamic debug-log-checking
+dynamic empty-container
+dynamic normal,incomplete,resume
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/metadata.txt b/runner/json_tests_data/dynamic-subtests-keep-all/metadata.txt
new file mode 100644
index 00000000..fad45f10
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : dynamic-subtests
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 1
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 0
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
+prune_mode : 2
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/reference.json b/runner/json_tests_data/dynamic-subtests-keep-all/reference.json
new file mode 100644
index 00000000..b2b71628
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/reference.json
@@ -0,0 +1,171 @@
+{
+  "__type__":"TestrunResult",
+  "results_version":10,
+  "name":"dynamic-subtests",
+  "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+  "time_elapsed":{
+    "__type__":"TimeAttribute",
+    "start":1560163492.266377,
+    "end":1560163492.4104891
+  },
+  "tests":{
+    "igt@dynamic@debug-log-checking":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\nStarting dynamic subtest: this-is-dynamic-2\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"fail",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.109
+      },
+      "err":"Starting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-1 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\nStarting dynamic subtest: this-is-dynamic-2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-2 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking failed.\nNo log.\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest debug-log-checking\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-dynamic-1\n<6> [23426155.240164] [IGT] dynamic: starting dynamic subtest this-is-dynamic-2\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=98\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@debug-log-checking@this-is-dynamic-1":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"fail",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.055
+      },
+      "err":"Starting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-1 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest debug-log-checking\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-dynamic-1\n"
+    },
+    "igt@dynamic@debug-log-checking@this-is-dynamic-2":{
+      "out":"Starting dynamic subtest: this-is-dynamic-2\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"fail",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.053999999999999999
+      },
+      "err":"Starting dynamic subtest: this-is-dynamic-2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-2 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking failed.\nNo log.\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "dmesg":"<6> [23426155.240164] [IGT] dynamic: starting dynamic subtest this-is-dynamic-2\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=98\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@empty-container":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: empty-container\nThis should skip\nNo dynamic tests executed.\nSubtest empty-container: SKIP (0.000s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"skip",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: empty-container\nSubtest empty-container: SKIP (0.000s)\n",
+      "dmesg":"<6> [23426155.304955] Console: switching to colour dummy device 80x25\n<6> [23426155.304968] [IGT] dynamic: executing\n<6> [23426155.308644] [IGT] dynamic: starting subtest empty-container\n<6> [23426155.308671] [IGT] dynamic: exiting, ret=77\n<6> [23426155.308822] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@normal":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.10000000000000001
+      },
+      "err":"Starting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest normal\n<6> [23426155.184895] Dmesg output for normal\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest normal-dynamic-subtest\n"
+    },
+    "igt@dynamic@normal@normal-dynamic-subtest":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.055
+      },
+      "err":"Starting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest normal\n<6> [23426155.184895] Dmesg output for normal\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest normal-dynamic-subtest\n"
+    },
+    "igt@dynamic@incomplete":{
+      "out":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\nThis is some output\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"incomplete",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\n",
+      "dmesg":"<6> [23426155.184875] [IGT] dynamic: starting subtest incomplete\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-incomplete\n<6> [23426155.184895] Dmesg output for incomplete\n"
+    },
+    "igt@dynamic@incomplete@this-is-incomplete":{
+      "out":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\nThis is some output\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"incomplete",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\n",
+      "dmesg":"<6> [23426155.184875] [IGT] dynamic: starting subtest incomplete\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-incomplete\n<6> [23426155.184895] Dmesg output for incomplete\n"
+    },
+    "igt@dynamic@resume":{
+      "out":"This is some output\nStarting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.109
+      },
+      "err":"Starting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "dmesg":"<6> [23426155.240164] [IGT] dynamic: starting subtest resume\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=0\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    }
+  },
+  "totals":{
+    "":{
+      "crash":0,
+      "pass":3,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":2,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":3,
+      "warn":0
+    },
+    "root":{
+      "crash":0,
+      "pass":3,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":2,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":3,
+      "warn":0
+    },
+    "igt@dynamic":{
+      "crash":0,
+      "pass":3,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":2,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":3,
+      "warn":0
+    }
+  },
+  "runtimes":{
+    "igt@dynamic":{
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.27400000000000002
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/starttime.txt b/runner/json_tests_data/dynamic-subtests-keep-all/starttime.txt
new file mode 100644
index 00000000..b30b32ee
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/starttime.txt
@@ -0,0 +1 @@
+1560163492.266377
diff --git a/runner/json_tests_data/dynamic-subtests-keep-all/uname.txt b/runner/json_tests_data/dynamic-subtests-keep-all/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-all/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/0/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/0/dmesg.txt
new file mode 100644
index 00000000..c87b4271
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/0/dmesg.txt
@@ -0,0 +1,7 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest debug-log-checking
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-1
+14,1161,23426155240164,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-2
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=98
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/0/err.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/0/err.txt
new file mode 100644
index 00000000..3c280788
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/0/err.txt
@@ -0,0 +1,36 @@
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-1 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:11 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-2 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:5 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking failed.
+No log.
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/0/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/0/journal.txt
new file mode 100644
index 00000000..aa8cef0c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/0/journal.txt
@@ -0,0 +1,2 @@
+debug-log-checking
+exit:98 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/0/out.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/0/out.txt
new file mode 100644
index 00000000..286da3f3
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/0/out.txt
@@ -0,0 +1,19 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:11 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:5 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/1/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/1/dmesg.txt
new file mode 100644
index 00000000..d6e16a46
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/1/dmesg.txt
@@ -0,0 +1,5 @@
+6,1164,23426155304955,-;Console: switching to colour dummy device 80x25
+14,1165,23426155304968,-;[IGT] dynamic: executing
+14,1166,23426155308644,-;[IGT] dynamic: starting subtest empty-container
+14,1167,23426155308671,-;[IGT] dynamic: exiting, ret=77
+6,1168,23426155308822,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/1/err.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/1/err.txt
new file mode 100644
index 00000000..6247e714
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/1/err.txt
@@ -0,0 +1,2 @@
+Starting subtest: empty-container
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/1/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/1/journal.txt
new file mode 100644
index 00000000..3e4ce5c4
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/1/journal.txt
@@ -0,0 +1,2 @@
+empty-container
+exit:77 (0.014s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/1/out.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/1/out.txt
new file mode 100644
index 00000000..704734dc
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/1/out.txt
@@ -0,0 +1,5 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: empty-container
+This should skip
+No dynamic tests executed.
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/2/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/2/dmesg.txt
new file mode 100644
index 00000000..046ef579
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/2/dmesg.txt
@@ -0,0 +1,11 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest normal
+6,1160,23426155184895,-;Dmesg output for normal
+6,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest normal-dynamic-subtest
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest incomplete
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-incomplete
+6,1160,23426155184895,-;Dmesg output for incomplete
+14,1161,23426155240164,-;[IGT] dynamic: starting subtest resume
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=0
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/2/err.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/2/err.txt
new file mode 100644
index 00000000..1eae6061
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/2/err.txt
@@ -0,0 +1,8 @@
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/2/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/2/journal.txt
new file mode 100644
index 00000000..9469e227
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/2/journal.txt
@@ -0,0 +1,4 @@
+normal
+incomplete
+resume
+exit:0 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/2/out.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/2/out.txt
new file mode 100644
index 00000000..3063844b
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/2/out.txt
@@ -0,0 +1,10 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+This is some output
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/README.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/README.txt
new file mode 100644
index 00000000..78bbf47c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/README.txt
@@ -0,0 +1,3 @@
+A test with dynamic subtests with prune-mode=keep-dynamic should
+generate separate subresults for the dynamic tests without the
+subtests.
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/endtime.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/endtime.txt
new file mode 100644
index 00000000..5c7608b5
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/endtime.txt
@@ -0,0 +1 @@
+1560163492.410489
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/joblist.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/joblist.txt
new file mode 100644
index 00000000..e9860199
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/joblist.txt
@@ -0,0 +1,3 @@
+dynamic debug-log-checking@this-is-dynamic-1
+dynamic empty-container
+dynamic normal,incomplete,resume
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/metadata.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/metadata.txt
new file mode 100644
index 00000000..c7f14fa4
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : dynamic-subtests
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 1
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 0
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
+prune_mode : 3
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/reference.json b/runner/json_tests_data/dynamic-subtests-keep-requested/reference.json
new file mode 100644
index 00000000..c33c7ce7
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/reference.json
@@ -0,0 +1,123 @@
+{
+  "__type__":"TestrunResult",
+  "results_version":10,
+  "name":"dynamic-subtests",
+  "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+  "time_elapsed":{
+    "__type__":"TimeAttribute",
+    "start":1560163492.266377,
+    "end":1560163492.4104891
+  },
+  "tests":{
+    "igt@dynamic@debug-log-checking@this-is-dynamic-1":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"fail",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.055
+      },
+      "err":"Starting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-1 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest debug-log-checking\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-dynamic-1\n"
+    },
+    "igt@dynamic@empty-container":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: empty-container\nThis should skip\nNo dynamic tests executed.\nSubtest empty-container: SKIP (0.000s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"skip",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: empty-container\nSubtest empty-container: SKIP (0.000s)\n",
+      "dmesg":"<6> [23426155.304955] Console: switching to colour dummy device 80x25\n<6> [23426155.304968] [IGT] dynamic: executing\n<6> [23426155.308644] [IGT] dynamic: starting subtest empty-container\n<6> [23426155.308671] [IGT] dynamic: exiting, ret=77\n<6> [23426155.308822] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@normal":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.10000000000000001
+      },
+      "err":"Starting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest normal\n<6> [23426155.184895] Dmesg output for normal\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest normal-dynamic-subtest\n"
+    },
+    "igt@dynamic@incomplete":{
+      "out":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\nThis is some output\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"incomplete",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\n",
+      "dmesg":"<6> [23426155.184875] [IGT] dynamic: starting subtest incomplete\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-incomplete\n<6> [23426155.184895] Dmesg output for incomplete\n"
+    },
+    "igt@dynamic@resume":{
+      "out":"This is some output\nStarting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.109
+      },
+      "err":"Starting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "dmesg":"<6> [23426155.240164] [IGT] dynamic: starting subtest resume\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=0\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    }
+  },
+  "totals":{
+    "":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    },
+    "root":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    },
+    "igt@dynamic":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    }
+  },
+  "runtimes":{
+    "igt@dynamic":{
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.27400000000000002
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/starttime.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/starttime.txt
new file mode 100644
index 00000000..b30b32ee
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/starttime.txt
@@ -0,0 +1 @@
+1560163492.266377
diff --git a/runner/json_tests_data/dynamic-subtests-keep-requested/uname.txt b/runner/json_tests_data/dynamic-subtests-keep-requested/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-requested/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/0/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/dmesg.txt
new file mode 100644
index 00000000..c87b4271
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/dmesg.txt
@@ -0,0 +1,7 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest debug-log-checking
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-1
+14,1161,23426155240164,-;[IGT] dynamic: starting dynamic subtest this-is-dynamic-2
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=98
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/0/err.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/err.txt
new file mode 100644
index 00000000..3c280788
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/err.txt
@@ -0,0 +1,36 @@
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-1 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 1
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:8:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:11 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+Dynamic subtest this-is-dynamic-2 failed.
+**** DEBUG ****
+(dynamic:20904) DEBUG: This print is from 2
+(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ../runner/testdata/dynamic.c:13:
+(dynamic:20904) CRITICAL: Failed assertion: false
+(dynamic:20904) igt_core-INFO: Stack trace:
+(dynamic:20904) igt_core-INFO:   #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+(dynamic:20904) igt_core-INFO:   #1 ../runner/testdata/dynamic.c:5 __real_main3()
+(dynamic:20904) igt_core-INFO:   #2 ../runner/testdata/dynamic.c:3 main()
+(dynamic:20904) igt_core-INFO:   #3 ../csu/libc-start.c:342 __libc_start_main()
+(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]
+****  END  ****
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking failed.
+No log.
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/0/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/journal.txt
new file mode 100644
index 00000000..aa8cef0c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/journal.txt
@@ -0,0 +1,2 @@
+debug-log-checking
+exit:98 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/0/out.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/out.txt
new file mode 100644
index 00000000..286da3f3
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/0/out.txt
@@ -0,0 +1,19 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: debug-log-checking
+Starting dynamic subtest: this-is-dynamic-1
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:11 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-1: FAIL (0.055s)
+Starting dynamic subtest: this-is-dynamic-2
+Stack trace:
+  #0 ../lib/igt_core.c:1607 __igt_fail_assert()
+  #1 ../runner/testdata/dynamic.c:5 __real_main3()
+  #2 ../runner/testdata/dynamic.c:3 main()
+  #3 ../csu/libc-start.c:342 __libc_start_main()
+  #4 [_start+0x2a]
+Dynamic subtest this-is-dynamic-2: FAIL (0.054s)
+Subtest debug-log-checking: FAIL (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/1/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/dmesg.txt
new file mode 100644
index 00000000..d6e16a46
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/dmesg.txt
@@ -0,0 +1,5 @@
+6,1164,23426155304955,-;Console: switching to colour dummy device 80x25
+14,1165,23426155304968,-;[IGT] dynamic: executing
+14,1166,23426155308644,-;[IGT] dynamic: starting subtest empty-container
+14,1167,23426155308671,-;[IGT] dynamic: exiting, ret=77
+6,1168,23426155308822,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/1/err.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/err.txt
new file mode 100644
index 00000000..6247e714
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/err.txt
@@ -0,0 +1,2 @@
+Starting subtest: empty-container
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/1/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/journal.txt
new file mode 100644
index 00000000..3e4ce5c4
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/journal.txt
@@ -0,0 +1,2 @@
+empty-container
+exit:77 (0.014s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/1/out.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/out.txt
new file mode 100644
index 00000000..704734dc
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/1/out.txt
@@ -0,0 +1,5 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: empty-container
+This should skip
+No dynamic tests executed.
+Subtest empty-container: SKIP (0.000s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/2/dmesg.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/dmesg.txt
new file mode 100644
index 00000000..046ef579
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/dmesg.txt
@@ -0,0 +1,11 @@
+6,1157,23426155175691,-;Console: switching to colour dummy device 80x25
+14,1158,23426155175708,-;[IGT] dynamic: executing
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest normal
+6,1160,23426155184895,-;Dmesg output for normal
+6,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest normal-dynamic-subtest
+14,1159,23426155184875,-;[IGT] dynamic: starting subtest incomplete
+14,1160,23426155184895,-;[IGT] dynamic: starting dynamic subtest this-is-incomplete
+6,1160,23426155184895,-;Dmesg output for incomplete
+14,1161,23426155240164,-;[IGT] dynamic: starting subtest resume
+14,1162,23426155293846,-;[IGT] dynamic: exiting, ret=0
+6,1163,23426155294003,-;Console: switching to colour frame buffer device 240x75
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/2/err.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/err.txt
new file mode 100644
index 00000000..1eae6061
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/err.txt
@@ -0,0 +1,8 @@
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/2/journal.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/journal.txt
new file mode 100644
index 00000000..9469e227
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/journal.txt
@@ -0,0 +1,4 @@
+normal
+incomplete
+resume
+exit:0 (0.130s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/2/out.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/out.txt
new file mode 100644
index 00000000..3063844b
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/2/out.txt
@@ -0,0 +1,10 @@
+IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: normal
+Starting dynamic subtest: normal-dynamic-subtest
+Dynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)
+Subtest normal: SUCCESS (0.100s)
+Starting subtest: incomplete
+Starting dynamic subtest: this-is-incomplete
+This is some output
+Starting subtest: resume
+Subtest resume: SUCCESS (0.109s)
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/README.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/README.txt
new file mode 100644
index 00000000..78bbf47c
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/README.txt
@@ -0,0 +1,3 @@
+A test with dynamic subtests with prune-mode=keep-dynamic should
+generate separate subresults for the dynamic tests without the
+subtests.
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/endtime.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/endtime.txt
new file mode 100644
index 00000000..5c7608b5
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/endtime.txt
@@ -0,0 +1 @@
+1560163492.410489
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/joblist.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/joblist.txt
new file mode 100644
index 00000000..4fdcc5f1
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/joblist.txt
@@ -0,0 +1,3 @@
+dynamic debug-log-checking
+dynamic empty-container
+dynamic normal,incomplete,resume
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/metadata.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/metadata.txt
new file mode 100644
index 00000000..a0a49263
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : dynamic-subtests
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 1
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 0
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
+prune_mode : 1
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/reference.json b/runner/json_tests_data/dynamic-subtests-keep-subtests/reference.json
new file mode 100644
index 00000000..e53daa5a
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/reference.json
@@ -0,0 +1,123 @@
+{
+  "__type__":"TestrunResult",
+  "results_version":10,
+  "name":"dynamic-subtests",
+  "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+  "time_elapsed":{
+    "__type__":"TimeAttribute",
+    "start":1560163492.266377,
+    "end":1560163492.4104891
+  },
+  "tests":{
+    "igt@dynamic@debug-log-checking":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\nStarting dynamic subtest: this-is-dynamic-2\nStack trace:\n  #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n  #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n  #2 ..\/runner\/testdata\/dynamic.c:3 main()\n  #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n  #4 [_start+0x2a]\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"fail",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.109
+      },
+      "err":"Starting subtest: debug-log-checking\nStarting dynamic subtest: this-is-dynamic-1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-1 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 1\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:8:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:11 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-1: FAIL (0.055s)\nStarting dynamic subtest: this-is-dynamic-2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\nDynamic subtest this-is-dynamic-2 failed.\n**** DEBUG ****\n(dynamic:20904) DEBUG: This print is from 2\n(dynamic:20904) CRITICAL: Test assertion failure function __real_main3, file ..\/runner\/testdata\/dynamic.c:13:\n(dynamic:20904) CRITICAL: Failed assertion: false\n(dynamic:20904) igt_core-INFO: Stack trace:\n(dynamic:20904) igt_core-INFO:   #0 ..\/lib\/igt_core.c:1607 __igt_fail_assert()\n(dynamic:20904) igt_core-INFO:   #1 ..\/runner\/testdata\/dynamic.c:5 __real_main3()\n(dynamic:20904) igt_core-INFO:   #2 ..\/runner\/testdata\/dynamic.c:3 main()\n(dynamic:20904) igt_core-INFO:   #3 ..\/csu\/libc-start.c:342 __libc_start_main()\n(dynamic:20904) igt_core-INFO:   #4 [_start+0x2a]\n****  END  ****\nDynamic subtest this-is-dynamic-2: FAIL (0.054s)\nSubtest debug-log-checking failed.\nNo log.\nSubtest debug-log-checking: FAIL (0.109s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest debug-log-checking\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-dynamic-1\n<6> [23426155.240164] [IGT] dynamic: starting dynamic subtest this-is-dynamic-2\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=98\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@empty-container":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: empty-container\nThis should skip\nNo dynamic tests executed.\nSubtest empty-container: SKIP (0.000s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"skip",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: empty-container\nSubtest empty-container: SKIP (0.000s)\n",
+      "dmesg":"<6> [23426155.304955] Console: switching to colour dummy device 80x25\n<6> [23426155.304968] [IGT] dynamic: executing\n<6> [23426155.308644] [IGT] dynamic: starting subtest empty-container\n<6> [23426155.308671] [IGT] dynamic: exiting, ret=77\n<6> [23426155.308822] Console: switching to colour frame buffer device 240x75\n"
+    },
+    "igt@dynamic@normal":{
+      "out":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)\nStarting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.10000000000000001
+      },
+      "err":"Starting subtest: normal\nStarting dynamic subtest: normal-dynamic-subtest\nDynamic subtest normal-dynamic-subtest: SUCCESS (0.055s)\nSubtest normal: SUCCESS (0.100s)\n",
+      "dmesg":"<6> [23426155.175691] Console: switching to colour dummy device 80x25\n<6> [23426155.175708] [IGT] dynamic: executing\n<6> [23426155.184875] [IGT] dynamic: starting subtest normal\n<6> [23426155.184895] Dmesg output for normal\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest normal-dynamic-subtest\n"
+    },
+    "igt@dynamic@incomplete":{
+      "out":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\nThis is some output\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"incomplete",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.0
+      },
+      "err":"Starting subtest: incomplete\nStarting dynamic subtest: this-is-incomplete\n",
+      "dmesg":"<6> [23426155.184875] [IGT] dynamic: starting subtest incomplete\n<6> [23426155.184895] [IGT] dynamic: starting dynamic subtest this-is-incomplete\n<6> [23426155.184895] Dmesg output for incomplete\n"
+    },
+    "igt@dynamic@resume":{
+      "out":"This is some output\nStarting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "igt-version":"IGT-Version: 1.23-g9e957acd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+      "result":"pass",
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.109
+      },
+      "err":"Starting subtest: resume\nSubtest resume: SUCCESS (0.109s)\n",
+      "dmesg":"<6> [23426155.240164] [IGT] dynamic: starting subtest resume\n<6> [23426155.293846] [IGT] dynamic: exiting, ret=0\n<6> [23426155.294003] Console: switching to colour frame buffer device 240x75\n"
+    }
+  },
+  "totals":{
+    "":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    },
+    "root":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    },
+    "igt@dynamic":{
+      "crash":0,
+      "pass":2,
+      "dmesg-fail":0,
+      "dmesg-warn":0,
+      "skip":1,
+      "incomplete":1,
+      "abort":0,
+      "timeout":0,
+      "notrun":0,
+      "fail":1,
+      "warn":0
+    }
+  },
+  "runtimes":{
+    "igt@dynamic":{
+      "time":{
+        "__type__":"TimeAttribute",
+        "start":0.0,
+        "end":0.27400000000000002
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/starttime.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/starttime.txt
new file mode 100644
index 00000000..b30b32ee
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/starttime.txt
@@ -0,0 +1 @@
+1560163492.266377
diff --git a/runner/json_tests_data/dynamic-subtests-keep-subtests/uname.txt b/runner/json_tests_data/dynamic-subtests-keep-subtests/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dynamic-subtests-keep-subtests/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/runner_json_tests.c b/runner/runner_json_tests.c
index 882225c8..7253c906 100644
--- a/runner/runner_json_tests.c
+++ b/runner/runner_json_tests.c
@@ -163,6 +163,9 @@ static const char *dirnames[] = {
 	"dmesg-warn-level-piglit-style",
 	"dmesg-warn-level-one-piglit-style",
 	"dynamic-subtests-keep-dynamic",
+	"dynamic-subtests-keep-subtests",
+	"dynamic-subtests-keep-all",
+	"dynamic-subtests-keep-requested",
 	"dynamic-subtest-name-in-multiple-subtests",
 	"unprintable-characters",
 	"empty-result-files",
-- 
2.30.2

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

* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
                   ` (2 preceding siblings ...)
  2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 4/4] runner_tests: json tests for all prune-mode options Petri Latvala
@ 2022-03-23 16:03 ` Patchwork
  2022-03-23 16:58 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  2022-03-31  9:52 ` [igt-dev] [PATCH i-g-t 1/4] " Sharma, Swati2
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2022-03-23 16:03 UTC (permalink / raw)
  To: Petri Latvala; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 8707 bytes --]

== Series Details ==

Series: series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner
URL   : https://patchwork.freedesktop.org/series/101697/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_11398 -> IGTPW_6817
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/index.html

Participating hosts (45 -> 42)
------------------------------

  Additional (5): bat-dg2-8 bat-dg2-9 fi-kbl-8809g bat-rpls-1 bat-jsl-1 
  Missing    (8): shard-tglu fi-hsw-4200u bat-adlm-1 fi-bsw-cyan fi-ctg-p8600 fi-pnv-d510 shard-rkl fi-bdw-samus 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_6817:

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@i915_selftest@live@mman:
    - {bat-rpls-2}:       NOTRUN -> [INCOMPLETE][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/bat-rpls-2/igt@i915_selftest@live@mman.html

  
Known issues
------------

  Here are the changes found in IGTPW_6817 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_cs_nop@sync-fork-compute0:
    - fi-snb-2600:        NOTRUN -> [SKIP][2] ([fdo#109271]) +17 similar issues
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-snb-2600/igt@amdgpu/amd_cs_nop@sync-fork-compute0.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - fi-kbl-8809g:       NOTRUN -> [DMESG-WARN][3] ([i915#4962]) +1 similar issue
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][4] ([fdo#109271] / [i915#2190])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@random-engines:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][5] ([fdo#109271] / [i915#4613]) +3 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@gem_lmem_swapping@random-engines.html

  * igt@i915_pm_rpm@basic-rte:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][6] ([fdo#109271]) +54 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@i915_pm_rpm@basic-rte.html

  * igt@kms_chamelium@hdmi-edid-read:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827]) +8 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@kms_chamelium@hdmi-edid-read.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - fi-cfl-8109u:       [PASS][8] -> [DMESG-WARN][9] ([i915#295])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/fi-cfl-8109u/igt@kms_force_connector_basic@prune-stale-modes.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-cfl-8109u/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][10] ([fdo#109271] / [i915#5341])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][11] ([fdo#109271] / [i915#533])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-kbl-8809g/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@gt_timelines:
    - {bat-rpls-2}:       [DMESG-WARN][12] ([i915#4391]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/bat-rpls-2/igt@i915_selftest@live@gt_timelines.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/bat-rpls-2/igt@i915_selftest@live@gt_timelines.html

  * igt@i915_selftest@live@hangcheck:
    - bat-dg1-6:          [DMESG-FAIL][14] ([i915#4494] / [i915#4957]) -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
    - fi-snb-2600:        [INCOMPLETE][16] ([i915#3921]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/fi-snb-2600/igt@i915_selftest@live@hangcheck.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-snb-2600/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@requests:
    - {bat-rpls-2}:       [INCOMPLETE][18] ([i915#5338]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/bat-rpls-2/igt@i915_selftest@live@requests.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/bat-rpls-2/igt@i915_selftest@live@requests.html

  * igt@kms_busy@basic@modeset:
    - {bat-adlp-6}:       [DMESG-WARN][20] ([i915#3576]) -> [PASS][21]
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/bat-adlp-6/igt@kms_busy@basic@modeset.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/bat-adlp-6/igt@kms_busy@basic@modeset.html

  
#### Warnings ####

  * igt@runner@aborted:
    - fi-apl-guc:         [FAIL][22] ([i915#2426] / [i915#4312]) -> [FAIL][23] ([i915#4312])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/fi-apl-guc/igt@runner@aborted.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/fi-apl-guc/igt@runner@aborted.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2426]: https://gitlab.freedesktop.org/drm/intel/issues/2426
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#295]: https://gitlab.freedesktop.org/drm/intel/issues/295
  [i915#3003]: https://gitlab.freedesktop.org/drm/intel/issues/3003
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
  [i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
  [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
  [i915#4962]: https://gitlab.freedesktop.org/drm/intel/issues/4962
  [i915#5192]: https://gitlab.freedesktop.org/drm/intel/issues/5192
  [i915#5193]: https://gitlab.freedesktop.org/drm/intel/issues/5193
  [i915#5269]: https://gitlab.freedesktop.org/drm/intel/issues/5269
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5338]: https://gitlab.freedesktop.org/drm/intel/issues/5338
  [i915#5341]: https://gitlab.freedesktop.org/drm/intel/issues/5341
  [i915#5342]: https://gitlab.freedesktop.org/drm/intel/issues/5342


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_6389 -> IGTPW_6817

  CI-20190529: 20190529
  CI_DRM_11398: da54e0aff302424358b14f443a9be2f84bb6ca47 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_6817: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/index.html
  IGT_6389: fa423f527496936a759eb838b023642deea7625f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/index.html

[-- Attachment #2: Type: text/html, Size: 8801 bytes --]

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

* [igt-dev] ✓ Fi.CI.IGT: success for series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
                   ` (3 preceding siblings ...)
  2022-03-23 16:03 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner Patchwork
@ 2022-03-23 16:58 ` Patchwork
  2022-03-31  9:52 ` [igt-dev] [PATCH i-g-t 1/4] " Sharma, Swati2
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2022-03-23 16:58 UTC (permalink / raw)
  To: Petri Latvala; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 30296 bytes --]

== Series Details ==

Series: series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner
URL   : https://patchwork.freedesktop.org/series/101697/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_11398_full -> IGTPW_6817_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/index.html

Participating hosts (12 -> 7)
------------------------------

  Missing    (5): shard-skl pig-kbl-iris pig-glk-j5005 pig-skl-6260u shard-rkl 

Known issues
------------

  Here are the changes found in IGTPW_6817_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ccs@block-copy-compressed:
    - shard-tglb:         NOTRUN -> [SKIP][1] ([i915#3555] / [i915#5325]) +2 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@gem_ccs@block-copy-compressed.html
    - shard-iclb:         NOTRUN -> [SKIP][2] ([i915#5327])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@gem_ccs@block-copy-compressed.html

  * igt@gem_ctx_persistence@legacy-engines-hostile:
    - shard-snb:          NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#1099])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-snb7/igt@gem_ctx_persistence@legacy-engines-hostile.html

  * igt@gem_eio@kms:
    - shard-tglb:         NOTRUN -> [FAIL][4] ([i915#232])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@parallel-balancer:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([i915#4525])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-iclb4/igt@gem_exec_balancer@parallel-balancer.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb8/igt@gem_exec_balancer@parallel-balancer.html

  * igt@gem_exec_balancer@parallel-keep-in-fence:
    - shard-tglb:         NOTRUN -> [DMESG-WARN][7] ([i915#5076])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@gem_exec_balancer@parallel-keep-in-fence.html
    - shard-kbl:          NOTRUN -> [DMESG-WARN][8] ([i915#5076])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl1/igt@gem_exec_balancer@parallel-keep-in-fence.html
    - shard-iclb:         NOTRUN -> [DMESG-WARN][9] ([i915#5076])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@gem_exec_balancer@parallel-keep-in-fence.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - shard-iclb:         [PASS][10] -> [FAIL][11] ([i915#2842])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-iclb7/igt@gem_exec_fair@basic-none-share@rcs0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs0:
    - shard-kbl:          NOTRUN -> [FAIL][12] ([i915#2842]) +1 similar issue
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl1/igt@gem_exec_fair@basic-none@vcs0.html
    - shard-tglb:         NOTRUN -> [FAIL][13] ([i915#2842]) +4 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@gem_exec_fair@basic-none@vcs0.html

  * igt@gem_exec_fair@basic-none@vcs1:
    - shard-iclb:         NOTRUN -> [FAIL][14] ([i915#2842]) +4 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@gem_exec_fair@basic-none@vcs1.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-iclb:         [PASS][15] -> [FAIL][16] ([i915#2849])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-iclb4/igt@gem_exec_fair@basic-throttle@rcs0.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb2/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_params@no-vebox:
    - shard-iclb:         NOTRUN -> [SKIP][17] ([fdo#109283])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@gem_exec_params@no-vebox.html
    - shard-tglb:         NOTRUN -> [SKIP][18] ([fdo#109283] / [i915#4877])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb3/igt@gem_exec_params@no-vebox.html

  * igt@gem_huc_copy@huc-copy:
    - shard-apl:          NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#2190])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl7/igt@gem_huc_copy@huc-copy.html
    - shard-kbl:          NOTRUN -> [SKIP][20] ([fdo#109271] / [i915#2190])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@heavy-multi:
    - shard-apl:          NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#4613])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl6/igt@gem_lmem_swapping@heavy-multi.html
    - shard-kbl:          NOTRUN -> [SKIP][22] ([fdo#109271] / [i915#4613]) +1 similar issue
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl6/igt@gem_lmem_swapping@heavy-multi.html

  * igt@gem_lmem_swapping@heavy-random:
    - shard-tglb:         NOTRUN -> [SKIP][23] ([i915#4613]) +3 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb5/igt@gem_lmem_swapping@heavy-random.html

  * igt@gem_lmem_swapping@verify:
    - shard-iclb:         NOTRUN -> [SKIP][24] ([i915#4613]) +1 similar issue
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@gem_lmem_swapping@verify.html
    - shard-glk:          NOTRUN -> [SKIP][25] ([fdo#109271] / [i915#4613]) +1 similar issue
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk9/igt@gem_lmem_swapping@verify.html

  * igt@gem_ppgtt@flink-and-close-vma-leak:
    - shard-apl:          [PASS][26] -> [FAIL][27] ([i915#644])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-apl3/igt@gem_ppgtt@flink-and-close-vma-leak.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl8/igt@gem_ppgtt@flink-and-close-vma-leak.html

  * igt@gem_pxp@create-regular-context-2:
    - shard-tglb:         NOTRUN -> [SKIP][28] ([i915#4270])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb5/igt@gem_pxp@create-regular-context-2.html

  * igt@gem_pxp@fail-invalid-protected-context:
    - shard-iclb:         NOTRUN -> [SKIP][29] ([i915#4270]) +1 similar issue
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb6/igt@gem_pxp@fail-invalid-protected-context.html

  * igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled:
    - shard-iclb:         NOTRUN -> [SKIP][30] ([i915#768]) +3 similar issues
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled.html

  * igt@gem_userptr_blits@input-checking:
    - shard-tglb:         NOTRUN -> [DMESG-WARN][31] ([i915#4991])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@gem_userptr_blits@input-checking.html
    - shard-iclb:         NOTRUN -> [DMESG-WARN][32] ([i915#4991])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@gem_userptr_blits@input-checking.html
    - shard-kbl:          NOTRUN -> [DMESG-WARN][33] ([i915#4991])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl6/igt@gem_userptr_blits@input-checking.html

  * igt@gem_userptr_blits@vma-merge:
    - shard-snb:          NOTRUN -> [FAIL][34] ([i915#2724])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-snb7/igt@gem_userptr_blits@vma-merge.html

  * igt@gen7_exec_parse@basic-offset:
    - shard-tglb:         NOTRUN -> [SKIP][35] ([fdo#109289]) +3 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@gen7_exec_parse@basic-offset.html
    - shard-iclb:         NOTRUN -> [SKIP][36] ([fdo#109289]) +1 similar issue
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb5/igt@gen7_exec_parse@basic-offset.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-iclb:         NOTRUN -> [SKIP][37] ([i915#2856]) +4 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb2/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-tglb:         NOTRUN -> [SKIP][38] ([i915#2527] / [i915#2856]) +3 similar issues
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@gen9_exec_parse@bb-oversize.html

  * igt@i915_pm_dc@dc6-dpms:
    - shard-kbl:          NOTRUN -> [FAIL][39] ([i915#454])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@i915_pm_dc@dc6-dpms.html
    - shard-tglb:         NOTRUN -> [FAIL][40] ([i915#454])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@i915_pm_dc@dc6-dpms.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp:
    - shard-apl:          NOTRUN -> [SKIP][41] ([fdo#109271] / [i915#1937])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl8/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp.html

  * igt@i915_pm_rpm@modeset-lpsp-stress:
    - shard-iclb:         [PASS][42] -> [INCOMPLETE][43] ([i915#5096])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-iclb7/igt@i915_pm_rpm@modeset-lpsp-stress.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@i915_pm_rpm@modeset-lpsp-stress.html

  * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-iclb:         NOTRUN -> [SKIP][44] ([fdo#110892])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb6/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@i915_pm_rpm@pc8-residency:
    - shard-iclb:         NOTRUN -> [SKIP][45] ([fdo#109293] / [fdo#109506])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb6/igt@i915_pm_rpm@pc8-residency.html
    - shard-tglb:         NOTRUN -> [SKIP][46] ([fdo#109506] / [i915#2411])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@i915_pm_rpm@pc8-residency.html

  * igt@i915_query@query-topology-known-pci-ids:
    - shard-tglb:         NOTRUN -> [SKIP][47] ([fdo#109303])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@i915_query@query-topology-known-pci-ids.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-tglb:         NOTRUN -> [SKIP][48] ([i915#404])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb3/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
    - shard-iclb:         NOTRUN -> [SKIP][49] ([i915#404])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-0:
    - shard-iclb:         NOTRUN -> [SKIP][50] ([i915#5286])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-tglb:         NOTRUN -> [SKIP][51] ([i915#5286]) +4 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@linear-32bpp-rotate-180:
    - shard-glk:          [PASS][52] -> [DMESG-WARN][53] ([i915#118]) +2 similar issues
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-glk1/igt@kms_big_fb@linear-32bpp-rotate-180.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk5/igt@kms_big_fb@linear-32bpp-rotate-180.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-tglb:         NOTRUN -> [SKIP][54] ([fdo#111614]) +1 similar issue
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-iclb:         NOTRUN -> [SKIP][55] ([fdo#110725] / [fdo#111614])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb5/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-kbl:          NOTRUN -> [SKIP][56] ([fdo#109271] / [i915#3777]) +6 similar issues
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
    - shard-glk:          NOTRUN -> [SKIP][57] ([fdo#109271] / [i915#3777]) +1 similar issue
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-apl:          NOTRUN -> [SKIP][58] ([fdo#109271] / [i915#3777]) +5 similar issues
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl7/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
    - shard-glk:          [PASS][59] -> [DMESG-WARN][60] ([i915#118] / [i915#1982])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-glk2/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk3/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-90:
    - shard-tglb:         NOTRUN -> [SKIP][61] ([fdo#111615]) +4 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb3/igt@kms_big_fb@yf-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-iclb:         NOTRUN -> [SKIP][62] ([fdo#110723]) +1 similar issue
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb8/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-glk:          NOTRUN -> [SKIP][63] ([fdo#109271] / [i915#3886]) +2 similar issues
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk8/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html
    - shard-tglb:         NOTRUN -> [SKIP][64] ([i915#3689] / [i915#3886])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb5/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-b-crc-primary-basic-yf_tiled_ccs:
    - shard-tglb:         NOTRUN -> [SKIP][65] ([fdo#111615] / [i915#3689]) +6 similar issues
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@kms_ccs@pipe-b-crc-primary-basic-yf_tiled_ccs.html

  * igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc:
    - shard-kbl:          NOTRUN -> [SKIP][66] ([fdo#109271] / [i915#3886]) +8 similar issues
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl6/igt@kms_ccs@pipe-b-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][67] ([fdo#109271] / [i915#3886]) +7 similar issues
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl8/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
    - shard-iclb:         NOTRUN -> [SKIP][68] ([fdo#109278] / [i915#3886]) +4 similar issues
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb4/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-d-bad-pixel-format-y_tiled_ccs:
    - shard-snb:          NOTRUN -> [SKIP][69] ([fdo#109271]) +120 similar issues
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-snb2/igt@kms_ccs@pipe-d-bad-pixel-format-y_tiled_ccs.html

  * igt@kms_ccs@pipe-d-bad-rotation-90-y_tiled_ccs:
    - shard-tglb:         NOTRUN -> [SKIP][70] ([i915#3689]) +3 similar issues
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_ccs@pipe-d-bad-rotation-90-y_tiled_ccs.html

  * igt@kms_cdclk@mode-transition:
    - shard-tglb:         NOTRUN -> [SKIP][71] ([i915#3742])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb6/igt@kms_cdclk@mode-transition.html

  * igt@kms_chamelium@dp-edid-read:
    - shard-iclb:         NOTRUN -> [SKIP][72] ([fdo#109284] / [fdo#111827]) +12 similar issues
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb8/igt@kms_chamelium@dp-edid-read.html

  * igt@kms_chamelium@vga-frame-dump:
    - shard-tglb:         NOTRUN -> [SKIP][73] ([fdo#109284] / [fdo#111827]) +14 similar issues
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@kms_chamelium@vga-frame-dump.html

  * igt@kms_chamelium@vga-hpd-without-ddc:
    - shard-snb:          NOTRUN -> [SKIP][74] ([fdo#109271] / [fdo#111827]) +5 similar issues
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-snb4/igt@kms_chamelium@vga-hpd-without-ddc.html

  * igt@kms_color@pipe-d-ctm-red-to-blue:
    - shard-iclb:         NOTRUN -> [SKIP][75] ([fdo#109278] / [i915#1149])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb6/igt@kms_color@pipe-d-ctm-red-to-blue.html

  * igt@kms_color_chamelium@pipe-a-ctm-0-5:
    - shard-apl:          NOTRUN -> [SKIP][76] ([fdo#109271] / [fdo#111827]) +12 similar issues
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl6/igt@kms_color_chamelium@pipe-a-ctm-0-5.html

  * igt@kms_color_chamelium@pipe-a-degamma:
    - shard-kbl:          NOTRUN -> [SKIP][77] ([fdo#109271] / [fdo#111827]) +17 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl7/igt@kms_color_chamelium@pipe-a-degamma.html

  * igt@kms_color_chamelium@pipe-b-ctm-max:
    - shard-glk:          NOTRUN -> [SKIP][78] ([fdo#109271] / [fdo#111827]) +5 similar issues
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk6/igt@kms_color_chamelium@pipe-b-ctm-max.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-kbl:          NOTRUN -> [TIMEOUT][79] ([i915#1319])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl3/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@legacy:
    - shard-iclb:         NOTRUN -> [SKIP][80] ([fdo#109300] / [fdo#111066])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@kms_content_protection@legacy.html
    - shard-apl:          NOTRUN -> [TIMEOUT][81] ([i915#1319])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl1/igt@kms_content_protection@legacy.html

  * igt@kms_cursor_crc@pipe-a-cursor-512x170-sliding:
    - shard-tglb:         NOTRUN -> [SKIP][82] ([fdo#109279] / [i915#3359]) +7 similar issues
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb6/igt@kms_cursor_crc@pipe-a-cursor-512x170-sliding.html

  * igt@kms_cursor_crc@pipe-a-cursor-512x512-sliding:
    - shard-iclb:         NOTRUN -> [SKIP][83] ([fdo#109278] / [fdo#109279]) +6 similar issues
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@kms_cursor_crc@pipe-a-cursor-512x512-sliding.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-kbl:          [PASS][84] -> [DMESG-WARN][85] ([i915#180]) +2 similar issues
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-kbl3/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl7/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_cursor_crc@pipe-d-cursor-32x32-rapid-movement:
    - shard-iclb:         NOTRUN -> [SKIP][86] ([fdo#109278]) +36 similar issues
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb3/igt@kms_cursor_crc@pipe-d-cursor-32x32-rapid-movement.html
    - shard-tglb:         NOTRUN -> [SKIP][87] ([i915#3319])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_cursor_crc@pipe-d-cursor-32x32-rapid-movement.html

  * igt@kms_cursor_crc@pipe-d-cursor-512x170-rapid-movement:
    - shard-tglb:         NOTRUN -> [SKIP][88] ([i915#3359]) +6 similar issues
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_cursor_crc@pipe-d-cursor-512x170-rapid-movement.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic:
    - shard-iclb:         NOTRUN -> [SKIP][89] ([fdo#109274] / [fdo#109278]) +1 similar issue
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb6/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-tglb:         NOTRUN -> [SKIP][90] ([fdo#109274])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_draw_crc@draw-method-rgb565-pwrite-4tiled:
    - shard-tglb:         NOTRUN -> [SKIP][91] ([i915#5287]) +1 similar issue
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_draw_crc@draw-method-rgb565-pwrite-4tiled.html

  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-wc-4tiled:
    - shard-iclb:         NOTRUN -> [SKIP][92] ([i915#5287]) +1 similar issue
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb8/igt@kms_draw_crc@draw-method-xrgb8888-mmap-wc-4tiled.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-kbl:          [PASS][93] -> [INCOMPLETE][94] ([i915#180] / [i915#636])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-kbl6/igt@kms_fbcon_fbt@fbc-suspend.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl7/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
    - shard-tglb:         NOTRUN -> [SKIP][95] ([fdo#109274] / [fdo#111825]) +8 similar issues
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-iclb:         NOTRUN -> [SKIP][96] ([fdo#109274]) +7 similar issues
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@flip-vs-suspend@a-dp1:
    - shard-apl:          [PASS][97] -> [DMESG-WARN][98] ([i915#180])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-apl7/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl3/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-gtt:
    - shard-tglb:         NOTRUN -> [SKIP][99] ([fdo#109280] / [fdo#111825]) +28 similar issues
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-move:
    - shard-iclb:         NOTRUN -> [SKIP][100] ([fdo#109280]) +20 similar issues
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
    - shard-kbl:          NOTRUN -> [SKIP][101] ([fdo#109271]) +236 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html

  * igt@kms_hdr@bpc-switch-suspend@bpc-switch-suspend-dp-1-pipe-a:
    - shard-apl:          NOTRUN -> [DMESG-WARN][102] ([i915#180])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl1/igt@kms_hdr@bpc-switch-suspend@bpc-switch-suspend-dp-1-pipe-a.html

  * igt@kms_hdr@static-toggle:
    - shard-iclb:         NOTRUN -> [SKIP][103] ([i915#3555])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_hdr@static-toggle.html

  * igt@kms_pipe_crc_basic@hang-read-crc-pipe-d:
    - shard-apl:          NOTRUN -> [SKIP][104] ([fdo#109271] / [i915#533])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl7/igt@kms_pipe_crc_basic@hang-read-crc-pipe-d.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d:
    - shard-glk:          NOTRUN -> [SKIP][105] ([fdo#109271] / [i915#533])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk2/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-7efc:
    - shard-apl:          NOTRUN -> [FAIL][106] ([fdo#108145] / [i915#265])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl6/igt@kms_plane_alpha_blend@pipe-a-alpha-7efc.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
    - shard-apl:          NOTRUN -> [FAIL][107] ([i915#265])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl4/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html

  * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
    - shard-kbl:          NOTRUN -> [FAIL][108] ([fdo#108145] / [i915#265])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max.html

  * igt@kms_plane_alpha_blend@pipe-d-alpha-opaque-fb:
    - shard-glk:          NOTRUN -> [SKIP][109] ([fdo#109271]) +63 similar issues
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-glk1/igt@kms_plane_alpha_blend@pipe-d-alpha-opaque-fb.html

  * igt@kms_plane_lowres@pipe-a-tiling-none:
    - shard-tglb:         NOTRUN -> [SKIP][110] ([i915#3536])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_plane_lowres@pipe-a-tiling-none.html

  * igt@kms_plane_lowres@pipe-c-tiling-4:
    - shard-iclb:         NOTRUN -> [SKIP][111] ([i915#5288])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb7/igt@kms_plane_lowres@pipe-c-tiling-4.html

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-4:
    - shard-tglb:         NOTRUN -> [SKIP][112] ([i915#5288]) +3 similar issues
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@kms_plane_multiple@atomic-pipe-c-tiling-4.html

  * igt@kms_plane_scaling@downscale-with-rotation-factor-0-25@pipe-c-edp-1-downscale-with-rotation:
    - shard-tglb:         NOTRUN -> [SKIP][113] ([i915#5176]) +3 similar issues
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_plane_scaling@downscale-with-rotation-factor-0-25@pipe-c-edp-1-downscale-with-rotation.html

  * igt@kms_psr2_sf@cursor-plane-update-sf:
    - shard-tglb:         NOTRUN -> [SKIP][114] ([i915#2920]) +1 similar issue
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb1/igt@kms_psr2_sf@cursor-plane-update-sf.html
    - shard-iclb:         NOTRUN -> [SKIP][115] ([fdo#111068] / [i915#658])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb5/igt@kms_psr2_sf@cursor-plane-update-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
    - shard-kbl:          NOTRUN -> [SKIP][116] ([fdo#109271] / [i915#658]) +1 similar issue
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl6/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-apl:          NOTRUN -> [SKIP][117] ([fdo#109271] / [i915#658]) +1 similar issue
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl4/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@psr2_cursor_plane_move:
    - shard-iclb:         NOTRUN -> [SKIP][118] ([fdo#109441]) +4 similar issues
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb7/igt@kms_psr@psr2_cursor_plane_move.html

  * igt@kms_psr@psr2_primary_blt:
    - shard-iclb:         [PASS][119] -> [SKIP][120] ([fdo#109441])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11398/shard-iclb2/igt@kms_psr@psr2_primary_blt.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb7/igt@kms_psr@psr2_primary_blt.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-tglb:         NOTRUN -> [FAIL][121] ([i915#132] / [i915#3467]) +4 similar issues
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb3/igt@kms_psr@psr2_sprite_blt.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-tglb:         NOTRUN -> [SKIP][122] ([fdo#111615] / [i915#5289])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_scaling_modes@scaling-mode-none@edp-1-pipe-a:
    - shard-tglb:         NOTRUN -> [SKIP][123] ([i915#5030]) +3 similar issues
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb8/igt@kms_scaling_modes@scaling-mode-none@edp-1-pipe-a.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-tglb:         NOTRUN -> [SKIP][124] ([i915#3555]) +1 similar issue
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb2/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_vrr@flip-basic:
    - shard-tglb:         NOTRUN -> [SKIP][125] ([fdo#109502])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb6/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-suspend:
    - shard-iclb:         NOTRUN -> [SKIP][126] ([fdo#109502]) +1 similar issue
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-iclb1/igt@kms_vrr@flip-suspend.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-apl:          NOTRUN -> [SKIP][127] ([fdo#109271] / [i915#2437])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-apl3/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-kbl:          NOTRUN -> [SKIP][128] ([fdo#109271] / [i915#2437])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-kbl4/igt@kms_writeback@writeback-pixel-formats.html
    - shard-tglb:         NOTRUN -> [SKIP][129] ([i915#2437])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/shard-tglb7/igt@kms_writeback@writeback-pixel-formats.html

  * igt@nouveau_crc@pipe-b-ctx-flip-detection:
    - shard-tglb:         NOTRUN -> [SKIP][130] ([i915#2530]) +2 similar issues
   [130]: https://int

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6817/index.html

[-- Attachment #2: Type: text/html, Size: 34083 bytes --]

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

* Re: [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner
  2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
                   ` (4 preceding siblings ...)
  2022-03-23 16:58 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2022-03-31  9:52 ` Sharma, Swati2
  2022-03-31 11:42   ` Petri Latvala
  5 siblings, 1 reply; 8+ messages in thread
From: Sharma, Swati2 @ 2022-03-31  9:52 UTC (permalink / raw)
  To: Petri Latvala, igt-dev

The patch series looks good to me.

Reviewed-by:
Swati Sharma <swati2.sharma@intel.com>

On 23-Mar-22 8:50 PM, Petri Latvala wrote:
> Allow finer control of reporting dynamic subtests instead of
> unconditionally assuming that the main subtest result and logs are
> uninteresting if the subtest has dynamic subtests.
> 
> The default is still to remove subtest results when the subtest has
> dynamic subtests. Other options are:
> 
> keep-subtests: Remove the dynamic subtests instead, for cases when a
> stable test count is more important.
> 
> keep-all: Remove nothing.
> 
> keep-requested: Remove the results that were not directly requested to
> be executed. This option is useful in cases where the test selection
> is a hand-picked mix of subtests and particular dynamic subtests.
> 
> Signed-off-by: Petri Latvala <petri.latvala@intel.com>
> Cc: Arkadiusz Hiler <arek@hiler.eu>
> ---
>   runner/resultgen.c | 83 +++++++++++++++++++++++++++++++++++-----------
>   runner/settings.c  | 49 +++++++++++++++++++++++++++
>   runner/settings.h  |  8 +++++
>   3 files changed, 121 insertions(+), 19 deletions(-)
> 
> diff --git a/runner/resultgen.c b/runner/resultgen.c
> index bccfca12..76f9fb7d 100644
> --- a/runner/resultgen.c
> +++ b/runner/resultgen.c
> @@ -1229,19 +1229,64 @@ static void fill_from_journal(int fd,
>   	fclose(f);
>   }
>   
> -static void prune_subtests_with_dynamic_subtests(const char *binary,
> -						 struct subtest_list *subtests,
> -						 struct json_object *tests)
> +static bool result_is_requested(struct job_list_entry *entry,
> +				const char *subtestname,
> +				const char *dynamic_name)
>   {
> -	char piglit_name[256];
> +	char entryname[512];
>   	size_t i;
>   
> +	if (dynamic_name)
> +		snprintf(entryname, sizeof(entryname) - 1, "%s@%s", subtestname, dynamic_name);
> +	else
> +		strncpy(entryname, subtestname, sizeof(entryname) - 1);
> +
> +	for (i = 0; i < entry->subtest_count; i++) {
> +		if (!strcmp(entry->subtests[i], entryname))
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +static void prune_subtests(struct settings *settings,
> +			   struct job_list_entry *entry,
> +			   struct subtest_list *subtests,
> +			   struct json_object *tests)
> +{
> +	char piglit_name[256];
> +	char dynamic_piglit_name[256];
> +	size_t i, k;
> +
> +	if (settings->prune_mode == PRUNE_KEEP_ALL)
> +		return;
> +
>   	for (i = 0; i < subtests->size; i++) {
> -		if (subtests->subs[i].dynamic_size) {
> -			generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
> +		generate_piglit_name(entry->binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
> +
> +		if (settings->prune_mode == PRUNE_KEEP_DYNAMIC) {
> +			if (subtests->subs[i].dynamic_size)
> +				json_object_object_del(tests, piglit_name);
> +
> +			continue;
> +		}
> +
> +		assert(settings->prune_mode == PRUNE_KEEP_SUBTESTS || settings->prune_mode == PRUNE_KEEP_REQUESTED);
> +
> +		if (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
> +		    !result_is_requested(entry, subtests->subs[i].name, NULL)) {
>   			json_object_object_del(tests, piglit_name);
>   		}
>   
> +		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
> +			if (settings->prune_mode == PRUNE_KEEP_SUBTESTS ||
> +			    (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
> +			     !result_is_requested(entry, subtests->subs[i].name, subtests->subs[i].dynamic_names[k]))) {
> +				generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
> +								 dynamic_piglit_name, sizeof(dynamic_piglit_name));
> +				json_object_object_del(tests, dynamic_piglit_name);
> +			}
> +		}
>   	}
>   }
>   
> @@ -1426,8 +1471,7 @@ static void add_to_totals(const char *binary,
>   	for (i = 0; i < subtests->size; i++) {
>   		generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
>   
> -		if (subtests->subs[i].dynamic_size == 0) {
> -			test = get_or_create_json_object(results->tests, piglit_name);
> +		if (json_object_object_get_ex(results->tests, piglit_name, &test)) {
>   			if (!json_object_object_get_ex(test, "result", &resultobj)) {
>   				fprintf(stderr, "Warning: No results set for %s\n", piglit_name);
>   				return;
> @@ -1441,17 +1485,18 @@ static void add_to_totals(const char *binary,
>   		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
>   			generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
>   							 dynamic_piglit_name, sizeof(dynamic_piglit_name));
> -			test = get_or_create_json_object(results->tests, dynamic_piglit_name);
> -			if (!json_object_object_get_ex(test, "result", &resultobj)) {
> -				fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
> -				return;
> +
> +			if (json_object_object_get_ex(results->tests, dynamic_piglit_name, &test)) {
> +				if (!json_object_object_get_ex(test, "result", &resultobj)) {
> +					fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
> +					return;
> +				}
> +				result = json_object_get_string(resultobj);
> +				add_result_to_totals(emptystrtotal, result);
> +				add_result_to_totals(roottotal, result);
> +				add_result_to_totals(binarytotal, result);
>   			}
> -			result = json_object_get_string(resultobj);
> -			add_result_to_totals(emptystrtotal, result);
> -			add_result_to_totals(roottotal, result);
> -			add_result_to_totals(binarytotal, result);
>   		}
> -
>   	}
>   }
>   
> @@ -1483,9 +1528,9 @@ static bool parse_test_directory(int dirfd,
>   		goto parse_output_end;
>   	}
>   
> -	prune_subtests_with_dynamic_subtests(entry->binary, &subtests, results->tests);
> -
>   	override_results(entry->binary, &subtests, results->tests);
> +	prune_subtests(settings, entry, &subtests, results->tests);
> +
>   	add_to_totals(entry->binary, &subtests, results);
>   
>    parse_output_end:
> diff --git a/runner/settings.c b/runner/settings.c
> index a7a12f50..cd64b964 100644
> --- a/runner/settings.c
> +++ b/runner/settings.c
> @@ -29,6 +29,7 @@ enum {
>   	OPT_ENABLE_CODE_COVERAGE,
>   	OPT_COV_RESULTS_PER_TEST,
>   	OPT_VERSION,
> +	OPT_PRUNE_MODE,
>   	OPT_HELP = 'h',
>   	OPT_NAME = 'n',
>   	OPT_DRY_RUN = 'd',
> @@ -65,6 +66,18 @@ static struct {
>   	{ 0, 0 },
>   };
>   
> +static struct {
> +	int value;
> +	const char *name;
> +} prune_modes[] = {
> +	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic-subtests" },
> +	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic" },
> +	{ PRUNE_KEEP_SUBTESTS, "keep-subtests" },
> +	{ PRUNE_KEEP_ALL, "keep-all" },
> +	{ PRUNE_KEEP_REQUESTED, "keep-requested" },
> +	{ 0, 0 },
> +};
> +
>   static bool set_log_level(struct settings* settings, const char *level)
>   {
>   	typeof(*log_levels) *it;
> @@ -103,6 +116,20 @@ static bool set_abort_condition(struct settings* settings, const char *cond)
>   	return false;
>   }
>   
> +static bool set_prune_mode(struct settings* settings, const char *mode)
> +{
> +	typeof(*prune_modes) *it;
> +
> +	for (it = prune_modes; it->name; it++) {
> +		if (!strcmp(mode, it->name)) {
> +			settings->prune_mode = it->value;
> +			return true;
> +		}
> +	}
> +
> +	return false;
> +}
> +
>   static bool parse_abort_conditions(struct settings *settings, const char *optarg)
>   {
>   	char *dup, *origdup, *p;
> @@ -239,6 +266,19 @@ static const char *usage_str =
>   	"                        (longer) filter list means the test result should\n"
>   	"                        change. KERN_NOTICE dmesg level is treated as warn,\n"
>   	"                        unless overridden with --dmesg-warn-level.\n"
> +	"  --prune-mode <mode>   Control reporting of dynamic subtests by selecting test\n"
> +	"                        results that are removed from the final results set.\n"
> +	"                        Possible options:\n"
> +	"                         keep-dynamic-subtests  - Remove subtests that have dynamic\n"
> +	"                                                  subtests. (default)\n"
> +	"                         keep-dynamic           - Alias for the above\n"
> +	"                         keep-subtests          - Remove dynamic subtests,\n"
> +	"                                                  leaving just the parent subtest.\n"
> +	"                         keep-all               - Don't remove anything\n"
> +	"                         keep-requested         - Remove reported results that are\n"
> +	"                                                  not in the requested test set.\n"
> +	"                                                  Useful when you have a hand-written\n"
> +	"                                                  testlist.\n"
>   	"  -b, --blacklist FILENAME\n"
>   	"                        Exclude all test matching to regexes from FILENAME\n"
>   	"                        (can be used more than once)\n"
> @@ -423,6 +463,7 @@ bool parse_options(int argc, char **argv,
>   		{"use-watchdog", no_argument, NULL, OPT_WATCHDOG},
>   		{"piglit-style-dmesg", no_argument, NULL, OPT_PIGLIT_DMESG},
>   		{"dmesg-warn-level", required_argument, NULL, OPT_DMESG_WARN_LEVEL},
> +		{"prune-mode", required_argument, NULL, OPT_PRUNE_MODE},
>   		{"blacklist", required_argument, NULL, OPT_BLACKLIST},
>   		{"list-all", no_argument, NULL, OPT_LIST_ALL},
>   		{ 0, 0, 0, 0},
> @@ -521,6 +562,12 @@ bool parse_options(int argc, char **argv,
>   		case OPT_DMESG_WARN_LEVEL:
>   			settings->dmesg_warn_level = atoi(optarg);
>   			break;
> +		case OPT_PRUNE_MODE:
> +			if (!set_prune_mode(settings, optarg)) {
> +				usage("Cannot parse prune mode", stderr);
> +				goto error;
> +			}
> +			break;
>   		case OPT_BLACKLIST:
>   			if (!parse_blacklist(&settings->exclude_regexes,
>   					     absolute_path(optarg)))
> @@ -779,6 +826,7 @@ bool serialize_settings(struct settings *settings)
>   	SERIALIZE_LINE(f, settings, use_watchdog, "%d");
>   	SERIALIZE_LINE(f, settings, piglit_style_dmesg, "%d");
>   	SERIALIZE_LINE(f, settings, dmesg_warn_level, "%d");
> +	SERIALIZE_LINE(f, settings, prune_mode, "%d");
>   	SERIALIZE_LINE(f, settings, test_root, "%s");
>   	SERIALIZE_LINE(f, settings, results_path, "%s");
>   	SERIALIZE_LINE(f, settings, enable_code_coverage, "%d");
> @@ -830,6 +878,7 @@ bool read_settings_from_file(struct settings *settings, FILE *f)
>   		PARSE_LINE(settings, name, val, use_watchdog, numval);
>   		PARSE_LINE(settings, name, val, piglit_style_dmesg, numval);
>   		PARSE_LINE(settings, name, val, dmesg_warn_level, numval);
> +		PARSE_LINE(settings, name, val, prune_mode, numval);
>   		PARSE_LINE(settings, name, val, test_root, val ? strdup(val) : NULL);
>   		PARSE_LINE(settings, name, val, results_path, val ? strdup(val) : NULL);
>   		PARSE_LINE(settings, name, val, enable_code_coverage, numval);
> diff --git a/runner/settings.h b/runner/settings.h
> index bbd965d2..6ae64695 100644
> --- a/runner/settings.h
> +++ b/runner/settings.h
> @@ -24,6 +24,13 @@ _Static_assert(ABORT_ALL == (ABORT_TAINT | ABORT_LOCKDEP | ABORT_PING), "ABORT_A
>   #define GCOV_RESET GCOV_DIR	"/reset"
>   #define CODE_COV_RESULTS_PATH	"code_cov"
>   
> +enum {
> +	PRUNE_KEEP_DYNAMIC = 0,
> +	PRUNE_KEEP_SUBTESTS,
> +	PRUNE_KEEP_ALL,
> +	PRUNE_KEEP_REQUESTED,
> +};
> +
>   struct regex_list {
>   	char **regex_strings;
>   	GRegex **regexes;
> @@ -51,6 +58,7 @@ struct settings {
>   	char *results_path;
>   	bool piglit_style_dmesg;
>   	int dmesg_warn_level;
> +	int prune_mode;
>   	bool list_all;
>   	char *code_coverage_script;
>   	bool enable_code_coverage;

-- 
~Swati Sharma

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

* Re: [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner
  2022-03-31  9:52 ` [igt-dev] [PATCH i-g-t 1/4] " Sharma, Swati2
@ 2022-03-31 11:42   ` Petri Latvala
  0 siblings, 0 replies; 8+ messages in thread
From: Petri Latvala @ 2022-03-31 11:42 UTC (permalink / raw)
  To: Sharma, Swati2; +Cc: igt-dev

On Thu, Mar 31, 2022 at 03:22:03PM +0530, Sharma, Swati2 wrote:
> The patch series looks good to me.
> 
> Reviewed-by:
> Swati Sharma <swati2.sharma@intel.com>

Thanks for the review! Merged.

-- 
Petri Latvala


> 
> On 23-Mar-22 8:50 PM, Petri Latvala wrote:
> > Allow finer control of reporting dynamic subtests instead of
> > unconditionally assuming that the main subtest result and logs are
> > uninteresting if the subtest has dynamic subtests.
> > 
> > The default is still to remove subtest results when the subtest has
> > dynamic subtests. Other options are:
> > 
> > keep-subtests: Remove the dynamic subtests instead, for cases when a
> > stable test count is more important.
> > 
> > keep-all: Remove nothing.
> > 
> > keep-requested: Remove the results that were not directly requested to
> > be executed. This option is useful in cases where the test selection
> > is a hand-picked mix of subtests and particular dynamic subtests.
> > 
> > Signed-off-by: Petri Latvala <petri.latvala@intel.com>
> > Cc: Arkadiusz Hiler <arek@hiler.eu>
> > ---
> >   runner/resultgen.c | 83 +++++++++++++++++++++++++++++++++++-----------
> >   runner/settings.c  | 49 +++++++++++++++++++++++++++
> >   runner/settings.h  |  8 +++++
> >   3 files changed, 121 insertions(+), 19 deletions(-)
> > 
> > diff --git a/runner/resultgen.c b/runner/resultgen.c
> > index bccfca12..76f9fb7d 100644
> > --- a/runner/resultgen.c
> > +++ b/runner/resultgen.c
> > @@ -1229,19 +1229,64 @@ static void fill_from_journal(int fd,
> >   	fclose(f);
> >   }
> > -static void prune_subtests_with_dynamic_subtests(const char *binary,
> > -						 struct subtest_list *subtests,
> > -						 struct json_object *tests)
> > +static bool result_is_requested(struct job_list_entry *entry,
> > +				const char *subtestname,
> > +				const char *dynamic_name)
> >   {
> > -	char piglit_name[256];
> > +	char entryname[512];
> >   	size_t i;
> > +	if (dynamic_name)
> > +		snprintf(entryname, sizeof(entryname) - 1, "%s@%s", subtestname, dynamic_name);
> > +	else
> > +		strncpy(entryname, subtestname, sizeof(entryname) - 1);
> > +
> > +	for (i = 0; i < entry->subtest_count; i++) {
> > +		if (!strcmp(entry->subtests[i], entryname))
> > +			return true;
> > +	}
> > +
> > +	return false;
> > +}
> > +
> > +static void prune_subtests(struct settings *settings,
> > +			   struct job_list_entry *entry,
> > +			   struct subtest_list *subtests,
> > +			   struct json_object *tests)
> > +{
> > +	char piglit_name[256];
> > +	char dynamic_piglit_name[256];
> > +	size_t i, k;
> > +
> > +	if (settings->prune_mode == PRUNE_KEEP_ALL)
> > +		return;
> > +
> >   	for (i = 0; i < subtests->size; i++) {
> > -		if (subtests->subs[i].dynamic_size) {
> > -			generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
> > +		generate_piglit_name(entry->binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
> > +
> > +		if (settings->prune_mode == PRUNE_KEEP_DYNAMIC) {
> > +			if (subtests->subs[i].dynamic_size)
> > +				json_object_object_del(tests, piglit_name);
> > +
> > +			continue;
> > +		}
> > +
> > +		assert(settings->prune_mode == PRUNE_KEEP_SUBTESTS || settings->prune_mode == PRUNE_KEEP_REQUESTED);
> > +
> > +		if (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
> > +		    !result_is_requested(entry, subtests->subs[i].name, NULL)) {
> >   			json_object_object_del(tests, piglit_name);
> >   		}
> > +		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
> > +			if (settings->prune_mode == PRUNE_KEEP_SUBTESTS ||
> > +			    (settings->prune_mode == PRUNE_KEEP_REQUESTED &&
> > +			     !result_is_requested(entry, subtests->subs[i].name, subtests->subs[i].dynamic_names[k]))) {
> > +				generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
> > +								 dynamic_piglit_name, sizeof(dynamic_piglit_name));
> > +				json_object_object_del(tests, dynamic_piglit_name);
> > +			}
> > +		}
> >   	}
> >   }
> > @@ -1426,8 +1471,7 @@ static void add_to_totals(const char *binary,
> >   	for (i = 0; i < subtests->size; i++) {
> >   		generate_piglit_name(binary, subtests->subs[i].name, piglit_name, sizeof(piglit_name));
> > -		if (subtests->subs[i].dynamic_size == 0) {
> > -			test = get_or_create_json_object(results->tests, piglit_name);
> > +		if (json_object_object_get_ex(results->tests, piglit_name, &test)) {
> >   			if (!json_object_object_get_ex(test, "result", &resultobj)) {
> >   				fprintf(stderr, "Warning: No results set for %s\n", piglit_name);
> >   				return;
> > @@ -1441,17 +1485,18 @@ static void add_to_totals(const char *binary,
> >   		for (k = 0; k < subtests->subs[i].dynamic_size; k++) {
> >   			generate_piglit_name_for_dynamic(piglit_name, subtests->subs[i].dynamic_names[k],
> >   							 dynamic_piglit_name, sizeof(dynamic_piglit_name));
> > -			test = get_or_create_json_object(results->tests, dynamic_piglit_name);
> > -			if (!json_object_object_get_ex(test, "result", &resultobj)) {
> > -				fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
> > -				return;
> > +
> > +			if (json_object_object_get_ex(results->tests, dynamic_piglit_name, &test)) {
> > +				if (!json_object_object_get_ex(test, "result", &resultobj)) {
> > +					fprintf(stderr, "Warning: No results set for %s\n", dynamic_piglit_name);
> > +					return;
> > +				}
> > +				result = json_object_get_string(resultobj);
> > +				add_result_to_totals(emptystrtotal, result);
> > +				add_result_to_totals(roottotal, result);
> > +				add_result_to_totals(binarytotal, result);
> >   			}
> > -			result = json_object_get_string(resultobj);
> > -			add_result_to_totals(emptystrtotal, result);
> > -			add_result_to_totals(roottotal, result);
> > -			add_result_to_totals(binarytotal, result);
> >   		}
> > -
> >   	}
> >   }
> > @@ -1483,9 +1528,9 @@ static bool parse_test_directory(int dirfd,
> >   		goto parse_output_end;
> >   	}
> > -	prune_subtests_with_dynamic_subtests(entry->binary, &subtests, results->tests);
> > -
> >   	override_results(entry->binary, &subtests, results->tests);
> > +	prune_subtests(settings, entry, &subtests, results->tests);
> > +
> >   	add_to_totals(entry->binary, &subtests, results);
> >    parse_output_end:
> > diff --git a/runner/settings.c b/runner/settings.c
> > index a7a12f50..cd64b964 100644
> > --- a/runner/settings.c
> > +++ b/runner/settings.c
> > @@ -29,6 +29,7 @@ enum {
> >   	OPT_ENABLE_CODE_COVERAGE,
> >   	OPT_COV_RESULTS_PER_TEST,
> >   	OPT_VERSION,
> > +	OPT_PRUNE_MODE,
> >   	OPT_HELP = 'h',
> >   	OPT_NAME = 'n',
> >   	OPT_DRY_RUN = 'd',
> > @@ -65,6 +66,18 @@ static struct {
> >   	{ 0, 0 },
> >   };
> > +static struct {
> > +	int value;
> > +	const char *name;
> > +} prune_modes[] = {
> > +	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic-subtests" },
> > +	{ PRUNE_KEEP_DYNAMIC, "keep-dynamic" },
> > +	{ PRUNE_KEEP_SUBTESTS, "keep-subtests" },
> > +	{ PRUNE_KEEP_ALL, "keep-all" },
> > +	{ PRUNE_KEEP_REQUESTED, "keep-requested" },
> > +	{ 0, 0 },
> > +};
> > +
> >   static bool set_log_level(struct settings* settings, const char *level)
> >   {
> >   	typeof(*log_levels) *it;
> > @@ -103,6 +116,20 @@ static bool set_abort_condition(struct settings* settings, const char *cond)
> >   	return false;
> >   }
> > +static bool set_prune_mode(struct settings* settings, const char *mode)
> > +{
> > +	typeof(*prune_modes) *it;
> > +
> > +	for (it = prune_modes; it->name; it++) {
> > +		if (!strcmp(mode, it->name)) {
> > +			settings->prune_mode = it->value;
> > +			return true;
> > +		}
> > +	}
> > +
> > +	return false;
> > +}
> > +
> >   static bool parse_abort_conditions(struct settings *settings, const char *optarg)
> >   {
> >   	char *dup, *origdup, *p;
> > @@ -239,6 +266,19 @@ static const char *usage_str =
> >   	"                        (longer) filter list means the test result should\n"
> >   	"                        change. KERN_NOTICE dmesg level is treated as warn,\n"
> >   	"                        unless overridden with --dmesg-warn-level.\n"
> > +	"  --prune-mode <mode>   Control reporting of dynamic subtests by selecting test\n"
> > +	"                        results that are removed from the final results set.\n"
> > +	"                        Possible options:\n"
> > +	"                         keep-dynamic-subtests  - Remove subtests that have dynamic\n"
> > +	"                                                  subtests. (default)\n"
> > +	"                         keep-dynamic           - Alias for the above\n"
> > +	"                         keep-subtests          - Remove dynamic subtests,\n"
> > +	"                                                  leaving just the parent subtest.\n"
> > +	"                         keep-all               - Don't remove anything\n"
> > +	"                         keep-requested         - Remove reported results that are\n"
> > +	"                                                  not in the requested test set.\n"
> > +	"                                                  Useful when you have a hand-written\n"
> > +	"                                                  testlist.\n"
> >   	"  -b, --blacklist FILENAME\n"
> >   	"                        Exclude all test matching to regexes from FILENAME\n"
> >   	"                        (can be used more than once)\n"
> > @@ -423,6 +463,7 @@ bool parse_options(int argc, char **argv,
> >   		{"use-watchdog", no_argument, NULL, OPT_WATCHDOG},
> >   		{"piglit-style-dmesg", no_argument, NULL, OPT_PIGLIT_DMESG},
> >   		{"dmesg-warn-level", required_argument, NULL, OPT_DMESG_WARN_LEVEL},
> > +		{"prune-mode", required_argument, NULL, OPT_PRUNE_MODE},
> >   		{"blacklist", required_argument, NULL, OPT_BLACKLIST},
> >   		{"list-all", no_argument, NULL, OPT_LIST_ALL},
> >   		{ 0, 0, 0, 0},
> > @@ -521,6 +562,12 @@ bool parse_options(int argc, char **argv,
> >   		case OPT_DMESG_WARN_LEVEL:
> >   			settings->dmesg_warn_level = atoi(optarg);
> >   			break;
> > +		case OPT_PRUNE_MODE:
> > +			if (!set_prune_mode(settings, optarg)) {
> > +				usage("Cannot parse prune mode", stderr);
> > +				goto error;
> > +			}
> > +			break;
> >   		case OPT_BLACKLIST:
> >   			if (!parse_blacklist(&settings->exclude_regexes,
> >   					     absolute_path(optarg)))
> > @@ -779,6 +826,7 @@ bool serialize_settings(struct settings *settings)
> >   	SERIALIZE_LINE(f, settings, use_watchdog, "%d");
> >   	SERIALIZE_LINE(f, settings, piglit_style_dmesg, "%d");
> >   	SERIALIZE_LINE(f, settings, dmesg_warn_level, "%d");
> > +	SERIALIZE_LINE(f, settings, prune_mode, "%d");
> >   	SERIALIZE_LINE(f, settings, test_root, "%s");
> >   	SERIALIZE_LINE(f, settings, results_path, "%s");
> >   	SERIALIZE_LINE(f, settings, enable_code_coverage, "%d");
> > @@ -830,6 +878,7 @@ bool read_settings_from_file(struct settings *settings, FILE *f)
> >   		PARSE_LINE(settings, name, val, use_watchdog, numval);
> >   		PARSE_LINE(settings, name, val, piglit_style_dmesg, numval);
> >   		PARSE_LINE(settings, name, val, dmesg_warn_level, numval);
> > +		PARSE_LINE(settings, name, val, prune_mode, numval);
> >   		PARSE_LINE(settings, name, val, test_root, val ? strdup(val) : NULL);
> >   		PARSE_LINE(settings, name, val, results_path, val ? strdup(val) : NULL);
> >   		PARSE_LINE(settings, name, val, enable_code_coverage, numval);
> > diff --git a/runner/settings.h b/runner/settings.h
> > index bbd965d2..6ae64695 100644
> > --- a/runner/settings.h
> > +++ b/runner/settings.h
> > @@ -24,6 +24,13 @@ _Static_assert(ABORT_ALL == (ABORT_TAINT | ABORT_LOCKDEP | ABORT_PING), "ABORT_A
> >   #define GCOV_RESET GCOV_DIR	"/reset"
> >   #define CODE_COV_RESULTS_PATH	"code_cov"
> > +enum {
> > +	PRUNE_KEEP_DYNAMIC = 0,
> > +	PRUNE_KEEP_SUBTESTS,
> > +	PRUNE_KEEP_ALL,
> > +	PRUNE_KEEP_REQUESTED,
> > +};
> > +
> >   struct regex_list {
> >   	char **regex_strings;
> >   	GRegex **regexes;
> > @@ -51,6 +58,7 @@ struct settings {
> >   	char *results_path;
> >   	bool piglit_style_dmesg;
> >   	int dmesg_warn_level;
> > +	int prune_mode;
> >   	bool list_all;
> >   	char *code_coverage_script;
> >   	bool enable_code_coverage;
> 
> -- 
> ~Swati Sharma

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

end of thread, other threads:[~2022-03-31 11:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-23 15:20 [igt-dev] [PATCH i-g-t 1/4] runner: Introduce --prune_mode to igt_runner Petri Latvala
2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 2/4] runner: Unit tests for the --prune-mode option Petri Latvala
2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 3/4] runner_tests: Rename dynamic-subtests json test to dynamic-subtests-keep-dynamic Petri Latvala
2022-03-23 15:20 ` [igt-dev] [PATCH i-g-t 4/4] runner_tests: json tests for all prune-mode options Petri Latvala
2022-03-23 16:03 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] runner: Introduce --prune_mode to igt_runner Patchwork
2022-03-23 16:58 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2022-03-31  9:52 ` [igt-dev] [PATCH i-g-t 1/4] " Sharma, Swati2
2022-03-31 11:42   ` Petri Latvala

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.