In stdout reported as, ... BEGIN: ptest-dir ... DURATION: N END: ptest-dir ...
In XML reported as, ... <testcase classname='test1' name='run-ptest'> <duration>N</duration> </testcase> ... Signed-off-by: Aníbal Limón <anibal.li...@linaro.org> --- tests/data/reference.xml | 2 ++ tests/utils.c | 20 ++++++++++++-------- utils.c | 19 ++++++++++++------- utils.h | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/tests/data/reference.xml b/tests/data/reference.xml index 17f91c2..f6ff389 100644 --- a/tests/data/reference.xml +++ b/tests/data/reference.xml @@ -1,8 +1,10 @@ <?xml version='1.0' encoding='UTF-8'?> <testsuite name='ptest' tests='2'> <testcase classname='test1' name='run-ptest'> + <duration>5</duration> </testcase> <testcase classname='test2' name='run-ptest'> + <duration>10</duration> <failure type='exit_code' message='run-ptest exited with code: 1'></failure> <failure type='timeout'/> </testcase> diff --git a/tests/utils.c b/tests/utils.c index 662abe8..2ccb1c0 100644 --- a/tests/utils.c +++ b/tests/utils.c @@ -188,26 +188,30 @@ START_TEST(test_run_ptests) END_TEST static void -search_for_timeout(const int rp, FILE *fp_stdout, FILE *fp_stderr) +search_for_timeout_and_duration(const int rp, FILE *fp_stdout, FILE *fp_stderr) { const char *timeout_str = "TIMEOUT"; + const char *duration_str = "DURATION"; char line_buf[PRINT_PTEST_BUF_SIZE]; - int found_timeout = 0; + int found_timeout = 0, found_duration = 0; char *line = NULL; ck_assert(rp != 0); - while ((line = fgets(line_buf, PRINT_PTEST_BUF_SIZE, fp_stdout)) != NULL) + while ((line = fgets(line_buf, PRINT_PTEST_BUF_SIZE, fp_stdout)) != NULL) { find_word(&found_timeout, line, timeout_str); + find_word(&found_duration, line, duration_str); + } ck_assert(found_timeout == 1); + ck_assert(found_duration == 1); } -START_TEST(test_run_timeout_ptest) +START_TEST(test_run_timeout_duration_ptest) struct ptest_list *head = get_available_ptests(opts_directory); int timeout = 1; - test_ptest_expected_failure(head, timeout, "hang", search_for_timeout); + test_ptest_expected_failure(head, timeout, "hang", search_for_timeout_and_duration); ptest_list_free_all(head); END_TEST @@ -257,8 +261,8 @@ START_TEST(test_xml_pass) FILE *xp; xp = xml_create(2, "./test.xml"); ck_assert(xp != NULL); - xml_add_case(xp, 0,"test1", 0); - xml_add_case(xp, 1,"test2", 1); + xml_add_case(xp, 0,"test1", 0, 5); + xml_add_case(xp, 1,"test2", 1, 10); xml_finish(xp); FILE *fp, *fr; @@ -291,7 +295,7 @@ utils_suite() tcase_add_test(tc_core, test_print_ptests); tcase_add_test(tc_core, test_filter_ptests); tcase_add_test(tc_core, test_run_ptests); - tcase_add_test(tc_core, test_run_timeout_ptest); + tcase_add_test(tc_core, test_run_timeout_duration_ptest); tcase_add_test(tc_core, test_run_fail_ptest); tcase_add_test(tc_core, test_xml_pass); tcase_add_test(tc_core, test_xml_fail); diff --git a/utils.c b/utils.c index 4a38ea1..01ee415 100644 --- a/utils.c +++ b/utils.c @@ -45,12 +45,10 @@ #define WAIT_CHILD_BUF_MAX_SIZE 1024 static inline char * -get_stime(char *stime, size_t size) +get_stime(char *stime, size_t size, time_t t) { - time_t t; struct tm *lt; - t = time(NULL); lt = localtime(&t); strftime(stime, size, "%Y-%m-%dT%H:%M", lt); @@ -334,6 +332,8 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, int pipefd_stdout[2]; int pipefd_stderr[2]; int timeouted; + time_t sttime, entime; + int duration; if (opts.xml_filename) { xh = xml_create(ptest_list_length(head), opts.xml_filename); @@ -373,11 +373,15 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0]; FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr; - fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE)); + sttime = time(NULL); + fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime)); fprintf(fp, "BEGIN: %s\n", ptest_dir); status = wait_child(ptest_dir, p->run_ptest, child, opts.timeout, fds, fps, &timeouted); + entime = time(NULL); + duration = entime - sttime; + fprintf(fps[0], "DURATION: %d\n", duration); if (status) { fprintf(fps[0], "\nERROR: Exit status is %d\n", status); @@ -387,10 +391,10 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, fprintf(fps[0], "TIMEOUT: %s\n", ptest_dir); if (opts.xml_filename) - xml_add_case(xh, status, ptest_dir, timeouted); + xml_add_case(xh, status, ptest_dir, timeouted, duration); fprintf(fp, "END: %s\n", ptest_dir); - fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE)); + fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, entime)); } PTEST_LIST_ITERATE_END; fprintf(fp, "STOP: %s\n", progname); @@ -426,9 +430,10 @@ xml_create(int test_count, char *xml_filename) } void -xml_add_case(FILE *xh, int status, const char *ptest_dir, int timeouted) +xml_add_case(FILE *xh, int status, const char *ptest_dir, int timeouted, int duration) { fprintf(xh, "\t<testcase classname='%s' name='run-ptest'>\n", ptest_dir); + fprintf(xh, "\t\t<duration>%d</duration>\n", duration); if (status != 0) { fprintf(xh, "\t\t<failure type='exit_code'"); diff --git a/utils.h b/utils.h index 880105f..5a3f44a 100644 --- a/utils.h +++ b/utils.h @@ -48,7 +48,7 @@ extern int run_ptests(struct ptest_list *, const struct ptest_options, const char *, FILE *, FILE *); extern FILE *xml_create(int, char *); -extern void xml_add_case(FILE *, int, const char *, int); +extern void xml_add_case(FILE *, int, const char *, int, int); extern void xml_finish(FILE *); #endif -- 2.20.1 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto