[PATCH v2] tests: fix bad-buffer-test

Kristian Høgsberg hoegsberg at gmail.com
Wed Apr 16 22:32:13 PDT 2014


On Sat, Apr 12, 2014 at 12:19:28PM +0300, Pekka Paalanen wrote:
> On Fri, 11 Apr 2014 11:48:55 +0200
> Marek Chalupa <mchqwerty at gmail.com> wrote:
> 
> > bad-buffer-test is FAIL_TEST and every assert() (or even SIGSEGV signal)
> > make it pass. It shouldn't be so for example when assert() is invoked
> > when a client couldn't connect to display.
> > 
> > Make sure that only relevant asserts make the test pass
> > and the other make it fail (by returning 0)
> > ---
> >  tests/bad-buffer-test.c | 30 ++++++++++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> > 
> > diff --git a/tests/bad-buffer-test.c b/tests/bad-buffer-test.c
> > index 6eae313..86e0299 100644
> > --- a/tests/bad-buffer-test.c
> > +++ b/tests/bad-buffer-test.c
> > @@ -25,6 +25,8 @@
> >  
> >  #include <unistd.h>
> >  #include <sys/types.h>
> > +#include <stdio.h>
> > +#include <signal.h>
> >  
> >  #include "../shared/os-compatibility.h"
> >  #include "weston-test-client-helper.h"
> > @@ -58,12 +60,34 @@ create_bad_shm_buffer(struct client *client, int width, int height)
> >  	return buffer;
> >  }
> >  
> > +static void sighandler(int signum)
> > +{
> > +	/* this means failure */
> > +	exit(0);
> > +}
> > +
> >  FAIL_TEST(test_truncated_shm_file)
> >  {
> >  	struct client *client;
> >  	struct wl_buffer *bad_buffer;
> >  	struct wl_surface *surface;
> >  	int frame;
> > +	struct sigaction new_action, old_action;
> > +
> > +	/* until the bad buffer creation, the SIGABRT or SIGSEGV signals
> > +	 * should fail the test. That means returning 0 */
> > +	new_action.sa_handler = sighandler;
> > +	sigemptyset(&new_action.sa_mask);
> > +	new_action.sa_flags = 0;
> > +
> > +	if (sigaction(SIGSEGV, &new_action, NULL) != 0) {
> > +		fprintf(stderr, "Failed setting new sigaction for SIGSEGV");
> > +		exit(0);
> > +	}
> > +	if (sigaction(SIGABRT, &new_action, &old_action) != 0) {
> > +		fprintf(stderr, "Failed setting new sigaction for SIGABRT");
> > +		exit(0);
> > +	}
> >  
> >  	client = client_create(46, 76, 111, 134);
> >  	assert(client);
> > @@ -71,6 +95,12 @@ FAIL_TEST(test_truncated_shm_file)
> >  
> >  	bad_buffer = create_bad_shm_buffer(client, 200, 200);
> >  
> > +	/* from this point we expect the signal */
> > +	if (sigaction(SIGABRT, &old_action, NULL) != 0) {
> > +		fprintf(stderr, "Failed setting old sigaction for SIGABRT");
> > +		exit(0);
> > +	}
> > +
> >  	wl_surface_attach(surface, bad_buffer, 0, 0);
> >  	wl_surface_damage(surface, 0, 0, 200, 200);
> >  	frame_callback_set(surface, &frame);
> > -- 
> > 1.8.4.2
> 
> Looks fine to me. Let's get this in and fix the test suite properly
> later.

Thanks for reviewing Pekka, patch applied.

Kristian

> 
> 
> Thanks,
> pq
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list