[igt-dev] [PATCH i-g-t 1/2] runner/resultgen: Be more robust with incomplete tests
Arkadiusz Hiler
arkadiusz.hiler at intel.com
Thu Aug 16 11:42:10 UTC 2018
On Thu, Aug 16, 2018 at 02:14:15PM +0300, Petri Latvala wrote:
> If a test is incomplete and didn't have time to print that it's
> entering a subtest, the generated results will think the test binary
> does not have subtests. If that case is known, make sure to attribute
> blame correctly.
>
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> Cc: Arkadiusz Hiler <arkadiusz.hiler at intel.com>
> ---
> runner/resultgen.c | 41 +++++++++++++++++++++++++++++------------
> 1 file changed, 29 insertions(+), 12 deletions(-)
>
> diff --git a/runner/resultgen.c b/runner/resultgen.c
> index 347b52a4..81e4fbda 100644
> --- a/runner/resultgen.c
> +++ b/runner/resultgen.c
> @@ -692,6 +692,8 @@ static const char *result_from_exitcode(int exitcode)
> return "pass";
> case IGT_EXIT_INVALID:
> return "notrun";
> + case -1:
> + return "incomplete";
please #define that value
bonus points for static asserts making sure that we do not clash with
IGT exit codes :-P
> default:
> return "fail";
> }
> @@ -712,7 +714,8 @@ static void add_subtest(struct subtests *subtests, char *subtest)
> subtests->names[subtests->size - 1] = subtest;
> }
>
> -static void fill_from_journal(int fd, char *binary,
> +static void fill_from_journal(int fd,
> + struct job_list_entry *entry,
> struct subtests *subtests,
> struct json_object *tests)
> {
> @@ -732,7 +735,7 @@ static void fill_from_journal(int fd, char *binary,
> double time = 0.0;
> struct json_object *obj;
>
> - generate_piglit_name(binary, NULL, piglit_name, sizeof(piglit_name));
> + generate_piglit_name(entry->binary, NULL, piglit_name, sizeof(piglit_name));
> obj = get_or_create_json_object(tests, piglit_name);
>
> exitcode = atoi(line + strlen(exitline));
> @@ -752,7 +755,7 @@ static void fill_from_journal(int fd, char *binary,
> double time = 0.0;
> struct json_object *obj;
>
> - generate_piglit_name(binary, last_subtest, piglit_name, sizeof(piglit_name));
> + generate_piglit_name(entry->binary, last_subtest, piglit_name, sizeof(piglit_name));
> obj = get_or_create_json_object(tests, piglit_name);
>
> set_result(obj, "timeout");
> @@ -764,7 +767,7 @@ static void fill_from_journal(int fd, char *binary,
> add_runtime(obj, time);
>
> /* ... and also for the binary */
> - generate_piglit_name(binary, NULL, piglit_name, sizeof(piglit_name));
> + generate_piglit_name(entry->binary, NULL, piglit_name, sizeof(piglit_name));
> obj = get_or_create_json_object(tests, piglit_name);
> add_runtime(obj, time);
> }
> @@ -774,11 +777,23 @@ static void fill_from_journal(int fd, char *binary,
> }
>
> if (subtests->size == 0) {
> + char *subtestname = NULL;
> char piglit_name[256];
> struct json_object *obj;
> const char *result = has_timeout ? "timeout" : result_from_exitcode(exitcode);
>
> - generate_piglit_name(binary, NULL, piglit_name, sizeof(piglit_name));
> + /*
> + * If the test was killed before it printed that it's
> + * entering a subtest, we would incorrectly generate
> + * results as the binary had no subtests. If we know
> + * otherwise, do otherwise.
> + */
> + if (entry->subtest_count == 1) {
Don't forget about multiple subtests mode, we can have more than one
subtest per entry. Changing the check to `subtest_count > 0` should do it.
With those changes:
Reviewed-by: Arkadiusz Hiler <arkadiusz.hiler at intel.com>
More information about the igt-dev
mailing list