[PATCH wayland] tests: add test for receiving an error on destroyed object

Bryce Harrington bryce at osg.samsung.com
Mon Feb 22 21:25:33 UTC 2016


On Mon, Feb 22, 2016 at 02:37:00PM +0100, Marek Chalupa wrote:
> test if receiving an error on already destroyed object won't
> do any harm
> 
> Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>

Confirmed that this test catches the error that is fixed by
https://patchwork.freedesktop.org/patch/74577/, and that the test passes
when that patch is in place.

Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
Tested-by: Bryce Harrington <bryce at osg.samsung.com>

> ---
>  tests/display-test.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
> 
> diff --git a/tests/display-test.c b/tests/display-test.c
> index 1a6c345..f9f8160 100644
> --- a/tests/display-test.c
> +++ b/tests/display-test.c
> @@ -876,3 +876,53 @@ TEST(versions)
>  
>  	display_destroy(d);
>  }
> +
> +static void
> +check_error_on_destroyed_object(void *data)
> +{
> +	struct client *c;
> +	struct wl_seat *seat;
> +	uint32_t id;
> +	const struct wl_interface *intf;
> +
> +	c = client_connect();
> +	seat = client_get_seat(c);
> +
> +	/* destroy the seat proxy. The display won't know
> +	 * about it yet, so it will post the error as usual */
> +	wl_proxy_destroy((struct wl_proxy *) seat);
> +
> +	/* let display post the error. The error will
> +	 * be caught in stop_display while dispatching */
> +	assert(stop_display(c, 1) == -1);
> +
> +	/* check the returned error. Since the object was destroyed,
> +	 * we don't know the interface and id */
> +	assert(wl_display_get_error(c->wl_display) == EPROTO);
> +	assert(wl_display_get_protocol_error(c->wl_display, &intf, &id) == 23);
> +	assert(intf == NULL);
> +	assert(id == 0);
> +
> +	client_disconnect_nocheck(c);
> +}
> +
> +TEST(error_on_destroyed_object)
> +{
> +	struct client_info *cl;
> +	struct display *d = display_create();
> +
> +	wl_global_create(d->wl_display, &wl_seat_interface,
> +			 1, d, bind_seat);
> +
> +	cl = client_create_noarg(d, check_error_on_destroyed_object);
> +	display_run(d);
> +
> +	/* did client bind to the seat? */
> +	assert(cl->data);
> +
> +	/* post error on the destroyed object */
> +	wl_resource_post_error((struct wl_resource *) cl->data,
> +			       23, "Dummy error");
> +	display_resume(d);
> +	display_destroy(d);
> +}
> -- 
> 2.5.0
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list