From e09010f470b28353e29a673ad76e813a92e61a1f Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Tue, 15 Nov 2022 11:21:37 +0200 Subject: [PATCH] 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. Signed-off-by: Alexandros Frantzis --- tests/test-compositor.c | 22 +++++++++++++++++++--- tests/test-compositor.h | 2 ++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/test-compositor.c b/tests/test-compositor.c index 587bc2b0..49d76d6d 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 b681b093..3fb390c2 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,