2
* internal unit tests for the uTouch GEIS v2.0 backend_multiplexor module
7
#include "libutouch-geis/geis_backend_multiplexor.h"
9
#include <sys/select.h>
14
static GeisBackendMultiplexor g_mx;
20
g_mx = geis_backend_multiplexor_new();
23
/* fixture teardown */
27
geis_backend_multiplexor_delete(g_mx);
31
testcase_event_callback(int fd, GeisBackendMultiplexorEvent event, void *context)
34
(void)read(fd, buf, 1);
39
/* verify bag construction/destruction */
40
START_TEST(construction)
43
fail_unless(g_mx != NULL, "failed to create backend_multiplexor");
44
fail_unless(geis_backend_multiplexor_fd(g_mx) >= 0, "invalid MX fd");
45
fail_unless(geis_backend_multiplexor_max_events_per_pump(g_mx) == GEIS_BE_MX_DEFAULT_EVENTS_PER_PUMP, "unexpected max fd per pump value");
51
/* verify multiplexor wait */
55
int mx_fd = geis_backend_multiplexor_fd(g_mx);
61
geis_backend_multiplexor_add_fd(g_mx, pfd[0], testcase_event_callback, &called);
73
status = select(mx_fd+1, &fds, NULL, NULL, &tm);
74
fail_if(status < 0, "error in select");
81
fprintf(stderr, "select timeout\n");
82
fail_unless(first_time, "select timed out before read");
88
(void)write(pfd[1], "1", 1);
92
geis_backend_multiplexor_pump(g_mx);
97
fail_if(called == 0, "MX event callback not called");
98
fail_if(called > 1, "MX event callback called too many times");
102
START_TEST(mx_config)
104
geis_backend_multiplexor_set_max_events_per_pump(g_mx, 24);
105
fail_unless(geis_backend_multiplexor_max_events_per_pump(g_mx) == 24,
106
"unexpected max fd per pump value");
112
make_backend_multiplexor_suite()
114
Suite *s = suite_create("utouch-geis2-backend-multiplexor");
116
TCase *create = tcase_create("backend-multiplexor-creation");
117
tcase_add_test(create, construction);
118
suite_add_tcase(s, create);
120
TCase *usage = tcase_create("backend-multiplexor-usage");
121
tcase_add_checked_fixture(usage, construct_mx, destroy_mx);
122
tcase_add_test(usage, mx_wait);
123
suite_add_tcase(s, usage);