tests: add one more test for event-loop signal source
authorMarek Chalupa <mchqwerty@gmail.com>
Tue, 12 Aug 2014 09:35:07 +0000 (11:35 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Mon, 18 Aug 2014 10:36:22 +0000 (13:36 +0300)
Test if when we get a signal, all signal sources for that signal
get dispatched.

Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
tests/event-loop-test.c

index e327a66..1709a1a 100644 (file)
@@ -173,6 +173,44 @@ TEST(event_loop_signal)
        wl_event_loop_destroy(loop);
 }
 
+TEST(event_loop_multiple_same_signals)
+{
+       struct wl_event_loop *loop = wl_event_loop_create();
+       struct wl_event_source *s1, *s2;
+       int calls_no = 0;
+       int i;
+
+       s1 = wl_event_loop_add_signal(loop, SIGUSR1,
+                                     signal_callback, &calls_no);
+       assert(s1);
+
+       s2 = wl_event_loop_add_signal(loop, SIGUSR1,
+                                     signal_callback, &calls_no);
+       assert(s2);
+
+       assert(wl_event_loop_dispatch(loop, 0) == 0);
+       assert(!calls_no);
+
+       /* Try it more times */
+       for (i = 0; i < 5; ++i) {
+               calls_no = 0;
+               kill(getpid(), SIGUSR1);
+               assert(wl_event_loop_dispatch(loop, 0) == 0);
+               assert(calls_no == 2);
+       }
+
+       wl_event_source_remove(s1);
+
+       /* Try it again  with one source */
+       calls_no = 0;
+       kill(getpid(), SIGUSR1);
+       assert(wl_event_loop_dispatch(loop, 0) == 0);
+       assert(calls_no == 1);
+
+       wl_event_source_remove(s2);
+
+       wl_event_loop_destroy(loop);
+}
 
 static int
 timer_callback(void *data)