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 <alexandros.frantzis@collabora.com>
This commit is contained in:
parent
0ba650202e
commit
e09010f470
|
@ -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 ---
|
||||
*/
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue
Block a user