mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-29 05:40:16 -04:00
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
2 changed files with 21 additions and 3 deletions
|
|
@ -114,7 +114,7 @@ handle_client_destroy(void *data)
|
||||||
case CLD_DUMPED:
|
case CLD_DUMPED:
|
||||||
fprintf(stderr, "Client '%s' was killed by signal %d\n",
|
fprintf(stderr, "Client '%s' was killed by signal %d\n",
|
||||||
ci->name, status.si_status);
|
ci->name, status.si_status);
|
||||||
ci->exit_code = status.si_status;
|
ci->kill_code = status.si_status;
|
||||||
break;
|
break;
|
||||||
case CLD_EXITED:
|
case CLD_EXITED:
|
||||||
if (status.si_status != EXIT_SUCCESS)
|
if (status.si_status != EXIT_SUCCESS)
|
||||||
|
|
@ -425,8 +425,10 @@ display_resume(struct display *d)
|
||||||
wl_display_run(d->wl_display);
|
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
|
void
|
||||||
display_destroy(struct display *d)
|
display_destroy_expect_signal(struct display *d, int signum)
|
||||||
{
|
{
|
||||||
struct client_info *cl, *next;
|
struct client_info *cl, *next;
|
||||||
int failed = 0;
|
int failed = 0;
|
||||||
|
|
@ -437,7 +439,15 @@ display_destroy(struct display *d)
|
||||||
wl_list_for_each_safe(cl, next, &d->clients, link) {
|
wl_list_for_each_safe(cl, next, &d->clients, link) {
|
||||||
assert(cl->wl_client == NULL);
|
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;
|
++failed;
|
||||||
fprintf(stderr, "Client '%s' failed\n", cl->name);
|
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 ---
|
* --- Client helper functions ---
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ struct client_info {
|
||||||
int pipe;
|
int pipe;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int exit_code;
|
int exit_code;
|
||||||
|
int kill_code;
|
||||||
|
|
||||||
struct wl_list link;
|
struct wl_list link;
|
||||||
void *data; /* for arbitrary use */
|
void *data; /* for arbitrary use */
|
||||||
|
|
@ -91,6 +92,7 @@ void noop_request(struct client *);
|
||||||
*/
|
*/
|
||||||
struct display *display_create(void);
|
struct display *display_create(void);
|
||||||
void display_destroy(struct display *d);
|
void display_destroy(struct display *d);
|
||||||
|
void display_destroy_expect_signal(struct display *d, int signum);
|
||||||
void display_run(struct display *d);
|
void display_run(struct display *d);
|
||||||
|
|
||||||
/* This function posts the display_resumed event to all waiting clients,
|
/* This function posts the display_resumed event to all waiting clients,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue