Enable the edge-triggered test again

svn:r1092
This commit is contained in:
Nick Mathewson 2009-02-01 02:20:16 +00:00
parent 8d3a10f8f1
commit 2e3f0f682a
3 changed files with 33 additions and 28 deletions

View File

@ -41,14 +41,13 @@ extern struct testcase_t signal_testcases[];
extern struct testcase_t http_testcases[];
extern struct testcase_t dns_testcases[];
extern struct testcase_t rpc_testcases[];
extern struct testcase_t edgetriggered_testcases[];
int legacy_main(void);
void regress_pthread(void);
void regress_zlib(void);
void test_edgetriggered(void);
/* Helpers to wrap old testcases */
extern int pair[2];
extern int test_ok;

View File

@ -54,19 +54,18 @@ read_cb(int fd, short event, void *arg)
#define LOCAL_SOCKETPAIR_AF AF_UNIX
#endif
void
test_edgetriggered(void)
static void
test_edgetriggered(void *et)
{
struct event *ev;
struct event_base *base;
struct event *ev = NULL;
struct event_base *base = NULL;
const char *test = "test string";
evutil_socket_t pair[2];
evutil_socket_t pair[2] = {-1,-1};
int supports_et;
int success;
if (evutil_socketpair(LOCAL_SOCKETPAIR_AF, SOCK_STREAM, 0, pair) == -1) {
perror("socketpair");
exit(1);
tt_fail_perror("socketpair");
}
called = was_et = 0;
@ -83,8 +82,9 @@ test_edgetriggered(void)
else
supports_et = 0;
printf("Testing edge-triggered events with %sedge-triggered method %s: ",
supports_et ? "" : "non-", event_base_get_method(base));
TT_BLATHER(("Checking for edge-triggered events with %s, which should %s"
"support edge-triggering", event_base_get_method(base),
supports_et?"":"not "));
/* Initalize one event */
ev = event_new(base, pair[1], EV_READ|EV_ET|EV_PERSIST, read_cb, &ev);
@ -101,23 +101,28 @@ test_edgetriggered(void)
event_base_loop(base,EVLOOP_NONBLOCK|EVLOOP_ONCE);
event_base_loop(base,EVLOOP_NONBLOCK|EVLOOP_ONCE);
/* Clean up... */
event_del(ev);
event_free(ev);
event_base_free(base);
if (supports_et) {
tt_int_op(called, ==, 1);
tt_assert(was_et);
} else {
tt_int_op(called, ==, 2);
tt_assert(!was_et);
success = (called == 2) && !was_et;
}
end:
if (ev) {
event_del(ev);
event_free(ev);
}
if (base)
event_base_free(base);
EVUTIL_CLOSESOCKET(pair[0]);
EVUTIL_CLOSESOCKET(pair[1]);
if (supports_et) {
success = (called == 1) && was_et;
} else {
success = (called == 2) && !was_et;
}
if (success) {
puts("OK");
} else {
printf("FAILED (called=%d, was_et=%d)\n", called, was_et);
exit(1);
}
}
struct testcase_t edgetriggered_testcases[] = {
{ "et", test_edgetriggered, TT_FORK, NULL, NULL },
END_OF_TESTCASES
};

View File

@ -185,6 +185,7 @@ const struct testcase_setup_t legacy_setup = {
struct testgroup_t testgroups[] = {
{ "main/", legacy_testcases },
{ "et/", edgetriggered_testcases },
{ "evbuffer/", evbuffer_testcases },
{ "signal/", signal_testcases },
{ "util/", util_testcases },