From: Alexandros Frantzis Date: Tue, 15 Nov 2022 09:21:37 +0000 (+0200) Subject: tests: Support tests that check for client failure X-Git-Tag: accepted/tizen/unified/20230825.044257~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=61e580d24211b8966e2c07547ebf2ebb1e0ea27b;p=platform%2Fupstream%2Fwayland.git tests: Support tests that check for client failure Add the display_destroy_expect_signal() function to check that test clients exit due to a particular signal. This is useful for checking that clients fail in an expected way. Change-Id: Ib7eb2e313f39b04672a45b3a9d39cde0960ef833 Signed-off-by: Alexandros Frantzis --- diff --git a/tests/test-compositor.c b/tests/test-compositor.c index 46705f1..3a45151 100644 --- a/tests/test-compositor.c +++ b/tests/test-compositor.c @@ -114,7 +114,7 @@ handle_client_destroy(void *data) case CLD_DUMPED: fprintf(stderr, "Client '%s' was killed by signal %d\n", ci->name, status.si_status); - ci->exit_code = status.si_status; + ci->kill_code = status.si_status; break; case CLD_EXITED: if (status.si_status != EXIT_SUCCESS) @@ -425,8 +425,10 @@ display_resume(struct display *d) wl_display_run(d->wl_display); } +/* If signum is 0, expect a successful client exit, otherwise + * expect the client to have been killed by that signal. */ void -display_destroy(struct display *d) +display_destroy_expect_signal(struct display *d, int signum) { struct client_info *cl, *next; int failed = 0; @@ -437,7 +439,15 @@ display_destroy(struct display *d) wl_list_for_each_safe(cl, next, &d->clients, link) { assert(cl->wl_client == NULL); - if (cl->exit_code != 0) { + if (signum != 0 && cl->kill_code != signum) { + ++failed; + fprintf(stderr, + "Client '%s' failed, expecting signal %d, " + "got %d\n", + cl->name, signum, cl->kill_code); + } + else if (signum == 0 && + (cl->kill_code != 0 || cl->exit_code != 0)) { ++failed; fprintf(stderr, "Client '%s' failed\n", cl->name); } @@ -457,6 +467,12 @@ display_destroy(struct display *d) } } +void +display_destroy(struct display *d) +{ + display_destroy_expect_signal(d, 0); +} + /* * --- Client helper functions --- */ diff --git a/tests/test-compositor.h b/tests/test-compositor.h index b681b09..3fb390c 100644 --- a/tests/test-compositor.h +++ b/tests/test-compositor.h @@ -40,6 +40,7 @@ struct client_info { int pipe; pid_t pid; int exit_code; + int kill_code; struct wl_list link; void *data; /* for arbitrary use */ @@ -91,6 +92,7 @@ void noop_request(struct client *); */ struct display *display_create(void); void display_destroy(struct display *d); +void display_destroy_expect_signal(struct display *d, int signum); void display_run(struct display *d); /* This function posts the display_resumed event to all waiting clients,