mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-18 00:36:49 -04:00
Add a test for event_pending; especially the timeout part.
svn:r1214
This commit is contained in:
parent
ff1f429510
commit
386279d051
@ -1470,9 +1470,11 @@ test_event_once(void *ptr)
|
|||||||
r = event_base_once(data->base, data->pair[0], EV_READ,
|
r = event_base_once(data->base, data->pair[0], EV_READ,
|
||||||
read_called_once_cb, NULL, NULL);
|
read_called_once_cb, NULL, NULL);
|
||||||
tt_int_op(r, ==, 0);
|
tt_int_op(r, ==, 0);
|
||||||
r = event_base_once(data->base, data->pair[0], EV_TIMEOUT,
|
r = event_base_once(data->base, -1, EV_TIMEOUT,
|
||||||
timeout_called_once_cb, NULL, &tv);
|
timeout_called_once_cb, NULL, &tv);
|
||||||
tt_int_op(r, ==, 0);
|
tt_int_op(r, ==, 0);
|
||||||
|
r = event_base_once(data->base, -1, 0, NULL, NULL, NULL);
|
||||||
|
tt_int_op(r, <, 0);
|
||||||
|
|
||||||
write(data->pair[1], TEST1, strlen(TEST1)+1);
|
write(data->pair[1], TEST1, strlen(TEST1)+1);
|
||||||
shutdown(data->pair[1], SHUT_WR);
|
shutdown(data->pair[1], SHUT_WR);
|
||||||
@ -1484,6 +1486,54 @@ end:
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_event_pending(void *ptr)
|
||||||
|
{
|
||||||
|
struct basic_test_data *data = ptr;
|
||||||
|
struct event *r=NULL, *w=NULL, *t=NULL;
|
||||||
|
struct timeval tv, now, tv2, diff;
|
||||||
|
|
||||||
|
tv.tv_sec = 0;
|
||||||
|
tv.tv_usec = 500 * 1000;
|
||||||
|
r = event_new(data->base, data->pair[0], EV_READ, simple_read_cb,
|
||||||
|
NULL);
|
||||||
|
w = event_new(data->base, data->pair[1], EV_WRITE, simple_write_cb,
|
||||||
|
NULL);
|
||||||
|
t = evtimer_new(data->base, timeout_cb, NULL);
|
||||||
|
|
||||||
|
evutil_gettimeofday(&now, NULL);
|
||||||
|
event_add(r, NULL);
|
||||||
|
event_add(t, &tv);
|
||||||
|
|
||||||
|
tt_assert( event_pending(r, EV_READ, NULL));
|
||||||
|
tt_assert(!event_pending(w, EV_WRITE, NULL));
|
||||||
|
tt_assert(!event_pending(r, EV_WRITE, NULL));
|
||||||
|
tt_assert( event_pending(r, EV_READ|EV_WRITE, NULL));
|
||||||
|
tt_assert(!event_pending(r, EV_TIMEOUT, NULL));
|
||||||
|
tt_assert( event_pending(t, EV_TIMEOUT, NULL));
|
||||||
|
tt_assert( event_pending(t, EV_TIMEOUT, &tv2));
|
||||||
|
|
||||||
|
tt_assert(evutil_timercmp(&tv2, &now, >));
|
||||||
|
evutil_timeradd(&now, &tv, &tv);
|
||||||
|
evutil_timersub(&tv2, &tv, &diff);
|
||||||
|
tt_int_op(diff.tv_sec, ==, 0);
|
||||||
|
tt_int_op(labs(diff.tv_usec), <, 1000);
|
||||||
|
|
||||||
|
end:
|
||||||
|
if (r) {
|
||||||
|
event_del(r);
|
||||||
|
event_free(r);
|
||||||
|
}
|
||||||
|
if (w) {
|
||||||
|
event_del(w);
|
||||||
|
event_free(w);
|
||||||
|
}
|
||||||
|
if (t) {
|
||||||
|
event_del(t);
|
||||||
|
event_free(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct testcase_t main_testcases[] = {
|
struct testcase_t main_testcases[] = {
|
||||||
/* Some converted-over tests */
|
/* Some converted-over tests */
|
||||||
{ "methods", test_methods, TT_FORK, NULL, NULL },
|
{ "methods", test_methods, TT_FORK, NULL, NULL },
|
||||||
@ -1511,7 +1561,9 @@ struct testcase_t main_testcases[] = {
|
|||||||
LEGACY(nonpersist_readd, TT_ISOLATED),
|
LEGACY(nonpersist_readd, TT_ISOLATED),
|
||||||
LEGACY(multiple_events_for_same_fd, TT_ISOLATED),
|
LEGACY(multiple_events_for_same_fd, TT_ISOLATED),
|
||||||
LEGACY(want_only_once, TT_ISOLATED),
|
LEGACY(want_only_once, TT_ISOLATED),
|
||||||
{ "event_once", test_event_once, TT_ISOLATED, &legacy_setup, NULL },
|
{ "event_once", test_event_once, TT_ISOLATED, &basic_setup, NULL },
|
||||||
|
{ "event_pending", test_event_pending, TT_ISOLATED, &basic_setup,
|
||||||
|
NULL },
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
LEGACY(fork, TT_ISOLATED),
|
LEGACY(fork, TT_ISOLATED),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user