xref: /openbmc/qemu/tests/unit/test-error-report.c (revision 284c52eec2d0a1b9c47f06c3eee46762c5fc0915)
16bbee5dbSMarc-André Lureau /*
26bbee5dbSMarc-André Lureau  * Error reporting test
36bbee5dbSMarc-André Lureau  *
46bbee5dbSMarc-André Lureau  * Copyright (C) 2022 Red Hat Inc.
56bbee5dbSMarc-André Lureau  *
66bbee5dbSMarc-André Lureau  * This work is licensed under the terms of the GNU GPL, version 2 or later.
76bbee5dbSMarc-André Lureau  * See the COPYING file in the top-level directory.
86bbee5dbSMarc-André Lureau  */
96bbee5dbSMarc-André Lureau 
106bbee5dbSMarc-André Lureau #include "qemu/osdep.h"
116bbee5dbSMarc-André Lureau #include "glib-compat.h"
126bbee5dbSMarc-André Lureau #include <locale.h>
136bbee5dbSMarc-André Lureau 
146bbee5dbSMarc-André Lureau #include "qemu/error-report.h"
15*3ffef1a5SMarc-André Lureau #include "qapi/error.h"
166bbee5dbSMarc-André Lureau 
176bbee5dbSMarc-André Lureau static void
test_error_report_simple(void)186bbee5dbSMarc-André Lureau test_error_report_simple(void)
196bbee5dbSMarc-André Lureau {
206bbee5dbSMarc-André Lureau     if (g_test_subprocess()) {
216bbee5dbSMarc-André Lureau         error_report("%s", "test error");
226bbee5dbSMarc-André Lureau         warn_report("%s", "test warn");
236bbee5dbSMarc-André Lureau         info_report("%s", "test info");
246bbee5dbSMarc-André Lureau         return;
256bbee5dbSMarc-André Lureau     }
266bbee5dbSMarc-André Lureau 
276bbee5dbSMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
286bbee5dbSMarc-André Lureau     g_test_trap_assert_passed();
296bbee5dbSMarc-André Lureau     g_test_trap_assert_stderr("\
306bbee5dbSMarc-André Lureau test-error-report: test error*\
316bbee5dbSMarc-André Lureau test-error-report: warning: test warn*\
326bbee5dbSMarc-André Lureau test-error-report: info: test info*\
336bbee5dbSMarc-André Lureau ");
346bbee5dbSMarc-André Lureau }
356bbee5dbSMarc-André Lureau 
366bbee5dbSMarc-André Lureau static void
test_error_report_loc(void)376bbee5dbSMarc-André Lureau test_error_report_loc(void)
386bbee5dbSMarc-André Lureau {
396bbee5dbSMarc-André Lureau     if (g_test_subprocess()) {
406bbee5dbSMarc-André Lureau         loc_set_file("some-file.c", 7717);
416bbee5dbSMarc-André Lureau         error_report("%s", "test error1");
426bbee5dbSMarc-André Lureau         loc_set_none();
436bbee5dbSMarc-André Lureau         error_report("%s", "test error2");
446bbee5dbSMarc-André Lureau         return;
456bbee5dbSMarc-André Lureau     }
466bbee5dbSMarc-André Lureau 
476bbee5dbSMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
486bbee5dbSMarc-André Lureau     g_test_trap_assert_passed();
496bbee5dbSMarc-André Lureau     g_test_trap_assert_stderr("\
506bbee5dbSMarc-André Lureau test-error-report:some-file.c:7717: test error1*\
516bbee5dbSMarc-André Lureau test-error-report: test error2*\
526bbee5dbSMarc-André Lureau ");
536bbee5dbSMarc-André Lureau }
546bbee5dbSMarc-André Lureau 
556bbee5dbSMarc-André Lureau static void
test_error_report_glog(void)566bbee5dbSMarc-André Lureau test_error_report_glog(void)
576bbee5dbSMarc-André Lureau {
586bbee5dbSMarc-André Lureau     if (g_test_subprocess()) {
596bbee5dbSMarc-André Lureau         g_message("gmessage");
606bbee5dbSMarc-André Lureau         return;
616bbee5dbSMarc-André Lureau     }
626bbee5dbSMarc-André Lureau 
636bbee5dbSMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
646bbee5dbSMarc-André Lureau     g_test_trap_assert_passed();
656bbee5dbSMarc-André Lureau     g_test_trap_assert_stderr("test-error-report: info: gmessage*");
666bbee5dbSMarc-André Lureau }
676bbee5dbSMarc-André Lureau 
686bbee5dbSMarc-André Lureau static void
test_error_report_once(void)696bbee5dbSMarc-André Lureau test_error_report_once(void)
706bbee5dbSMarc-André Lureau {
716bbee5dbSMarc-André Lureau     int i;
726bbee5dbSMarc-André Lureau 
736bbee5dbSMarc-André Lureau     if (g_test_subprocess()) {
746bbee5dbSMarc-André Lureau         for (i = 0; i < 3; i++) {
756bbee5dbSMarc-André Lureau             warn_report_once("warn");
766bbee5dbSMarc-André Lureau             error_report_once("err");
776bbee5dbSMarc-André Lureau         }
786bbee5dbSMarc-André Lureau         return;
796bbee5dbSMarc-André Lureau     }
806bbee5dbSMarc-André Lureau 
816bbee5dbSMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
826bbee5dbSMarc-André Lureau     g_test_trap_assert_passed();
836bbee5dbSMarc-André Lureau     g_test_trap_assert_stderr("\
846bbee5dbSMarc-André Lureau test-error-report: warning: warn*\
856bbee5dbSMarc-André Lureau test-error-report: err*\
866bbee5dbSMarc-André Lureau ");
876bbee5dbSMarc-André Lureau }
886bbee5dbSMarc-André Lureau 
896bbee5dbSMarc-André Lureau static void
test_error_report_timestamp(void)906bbee5dbSMarc-André Lureau test_error_report_timestamp(void)
916bbee5dbSMarc-André Lureau {
926bbee5dbSMarc-André Lureau     if (g_test_subprocess()) {
936bbee5dbSMarc-André Lureau         message_with_timestamp = true;
946bbee5dbSMarc-André Lureau         warn_report("warn");
956bbee5dbSMarc-André Lureau         error_report("err");
966bbee5dbSMarc-André Lureau         return;
976bbee5dbSMarc-André Lureau     }
986bbee5dbSMarc-André Lureau 
996bbee5dbSMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
1006bbee5dbSMarc-André Lureau     g_test_trap_assert_passed();
1016bbee5dbSMarc-André Lureau     g_test_trap_assert_stderr("\
1026bbee5dbSMarc-André Lureau *-*-*:*:* test-error-report: warning: warn*\
1036bbee5dbSMarc-André Lureau *-*-*:*:* test-error-report: err*\
1046bbee5dbSMarc-André Lureau ");
1056bbee5dbSMarc-André Lureau }
1066bbee5dbSMarc-André Lureau 
107*3ffef1a5SMarc-André Lureau static void
test_error_warn(void)108*3ffef1a5SMarc-André Lureau test_error_warn(void)
109*3ffef1a5SMarc-André Lureau {
110*3ffef1a5SMarc-André Lureau     if (g_test_subprocess()) {
111*3ffef1a5SMarc-André Lureau         error_setg(&error_warn, "Testing &error_warn");
112*3ffef1a5SMarc-André Lureau         return;
113*3ffef1a5SMarc-André Lureau     }
114*3ffef1a5SMarc-André Lureau 
115*3ffef1a5SMarc-André Lureau     g_test_trap_subprocess(NULL, 0, 0);
116*3ffef1a5SMarc-André Lureau     g_test_trap_assert_passed();
117*3ffef1a5SMarc-André Lureau     g_test_trap_assert_stderr("\
118*3ffef1a5SMarc-André Lureau test-error-report: warning: Testing &error_warn*\
119*3ffef1a5SMarc-André Lureau ");
120*3ffef1a5SMarc-André Lureau }
121*3ffef1a5SMarc-André Lureau 
122*3ffef1a5SMarc-André Lureau 
1236bbee5dbSMarc-André Lureau int
main(int argc,char * argv[])1246bbee5dbSMarc-André Lureau main(int argc, char *argv[])
1256bbee5dbSMarc-André Lureau {
1266bbee5dbSMarc-André Lureau     setlocale(LC_ALL, "");
1276bbee5dbSMarc-André Lureau 
1286bbee5dbSMarc-André Lureau     g_test_init(&argc, &argv, NULL);
1296bbee5dbSMarc-André Lureau     error_init("test-error-report");
1306bbee5dbSMarc-André Lureau 
1316bbee5dbSMarc-André Lureau     g_test_add_func("/error-report/simple", test_error_report_simple);
1326bbee5dbSMarc-André Lureau     g_test_add_func("/error-report/loc", test_error_report_loc);
1336bbee5dbSMarc-André Lureau     g_test_add_func("/error-report/glog", test_error_report_glog);
1346bbee5dbSMarc-André Lureau     g_test_add_func("/error-report/once", test_error_report_once);
1356bbee5dbSMarc-André Lureau     g_test_add_func("/error-report/timestamp", test_error_report_timestamp);
136*3ffef1a5SMarc-André Lureau     g_test_add_func("/error-report/warn", test_error_warn);
1376bbee5dbSMarc-André Lureau 
1386bbee5dbSMarc-André Lureau     return g_test_run();
1396bbee5dbSMarc-André Lureau }
140