1/***
2  This file is part of PulseAudio.
3
4  PulseAudio is free software; you can redistribute it and/or modify
5  it under the terms of the GNU Lesser General Public License as published
6  by the Free Software Foundation; either version 2.1 of the License,
7  or (at your option) any later version.
8
9  PulseAudio is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13
14  You should have received a copy of the GNU Lesser General Public License
15  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
16***/
17
18#ifdef HAVE_CONFIG_H
19#include <config.h>
20#endif
21
22#include <check.h>
23#include <signal.h>
24
25#include <pulsecore/poll.h>
26#include <pulsecore/log.h>
27#include <pulsecore/rtpoll.h>
28
29static int before(pa_rtpoll_item *i) {
30    pa_log("before");
31    return 0;
32}
33
34static void after(pa_rtpoll_item *i) {
35    pa_log("after");
36}
37
38static int worker(pa_rtpoll_item *w) {
39    pa_log("worker");
40    return 0;
41}
42
43START_TEST (rtpoll_test) {
44    pa_rtpoll *p;
45    pa_rtpoll_item *i, *w;
46    struct pollfd *pollfd;
47
48    p = pa_rtpoll_new();
49
50    i = pa_rtpoll_item_new(p, PA_RTPOLL_EARLY, 1);
51    pa_rtpoll_item_set_before_callback(i, before, NULL);
52    pa_rtpoll_item_set_after_callback(i, after, NULL);
53
54    pollfd = pa_rtpoll_item_get_pollfd(i, NULL);
55    pollfd->fd = 0;
56    pollfd->events = POLLIN;
57
58    w = pa_rtpoll_item_new(p, PA_RTPOLL_NORMAL, 0);
59    pa_rtpoll_item_set_before_callback(w, worker, NULL);
60
61    pa_rtpoll_set_timer_relative(p, 10000000); /* 10 s */
62
63    fail_unless(pa_rtpoll_run(p) >= 0);
64
65    pa_rtpoll_item_free(i);
66
67    i = pa_rtpoll_item_new(p, PA_RTPOLL_EARLY, 1);
68    pa_rtpoll_item_set_before_callback(i, before, NULL);
69    pa_rtpoll_item_set_after_callback(i, after, NULL);
70
71    pollfd = pa_rtpoll_item_get_pollfd(i, NULL);
72    pollfd->fd = 0;
73    pollfd->events = POLLIN;
74
75    fail_unless(pa_rtpoll_run(p) >= 0);
76
77    pa_rtpoll_item_free(i);
78
79    pa_rtpoll_item_free(w);
80
81    pa_rtpoll_free(p);
82}
83END_TEST
84
85int main(int argc, char *argv[]) {
86    int failed = 0;
87    Suite *s;
88    TCase *tc;
89    SRunner *sr;
90
91    s = suite_create("RT Poll");
92    tc = tcase_create("rtpoll");
93    tcase_add_test(tc, rtpoll_test);
94    /* the default timeout is too small,
95     * set it to a reasonable large one.
96     */
97    tcase_set_timeout(tc, 60 * 60);
98    suite_add_tcase(s, tc);
99
100    sr = srunner_create(s);
101    srunner_run_all(sr, CK_NORMAL);
102    failed = srunner_ntests_failed(sr);
103    srunner_free(sr);
104
105    return (failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
106}
107