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 http_testcases[];
extern struct testcase_t dns_testcases[]; extern struct testcase_t dns_testcases[];
extern struct testcase_t rpc_testcases[]; extern struct testcase_t rpc_testcases[];
extern struct testcase_t edgetriggered_testcases[];
int legacy_main(void); int legacy_main(void);
void regress_pthread(void); void regress_pthread(void);
void regress_zlib(void); void regress_zlib(void);
void test_edgetriggered(void);
/* Helpers to wrap old testcases */ /* Helpers to wrap old testcases */
extern int pair[2]; extern int pair[2];
extern int test_ok; extern int test_ok;

View File

@ -54,19 +54,18 @@ read_cb(int fd, short event, void *arg)
#define LOCAL_SOCKETPAIR_AF AF_UNIX #define LOCAL_SOCKETPAIR_AF AF_UNIX
#endif #endif
void static void
test_edgetriggered(void) test_edgetriggered(void *et)
{ {
struct event *ev; struct event *ev = NULL;
struct event_base *base; struct event_base *base = NULL;
const char *test = "test string"; const char *test = "test string";
evutil_socket_t pair[2]; evutil_socket_t pair[2] = {-1,-1};
int supports_et; int supports_et;
int success; int success;
if (evutil_socketpair(LOCAL_SOCKETPAIR_AF, SOCK_STREAM, 0, pair) == -1) { if (evutil_socketpair(LOCAL_SOCKETPAIR_AF, SOCK_STREAM, 0, pair) == -1) {
perror("socketpair"); tt_fail_perror("socketpair");
exit(1);
} }
called = was_et = 0; called = was_et = 0;
@ -83,8 +82,9 @@ test_edgetriggered(void)
else else
supports_et = 0; supports_et = 0;
printf("Testing edge-triggered events with %sedge-triggered method %s: ", TT_BLATHER(("Checking for edge-triggered events with %s, which should %s"
supports_et ? "" : "non-", event_base_get_method(base)); "support edge-triggering", event_base_get_method(base),
supports_et?"":"not "));
/* Initalize one event */ /* Initalize one event */
ev = event_new(base, pair[1], EV_READ|EV_ET|EV_PERSIST, read_cb, &ev); 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);
event_base_loop(base,EVLOOP_NONBLOCK|EVLOOP_ONCE); event_base_loop(base,EVLOOP_NONBLOCK|EVLOOP_ONCE);
/* Clean up... */ 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_del(ev);
event_free(ev); event_free(ev);
}
if (base)
event_base_free(base); event_base_free(base);
EVUTIL_CLOSESOCKET(pair[0]); EVUTIL_CLOSESOCKET(pair[0]);
EVUTIL_CLOSESOCKET(pair[1]); 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[] = { struct testgroup_t testgroups[] = {
{ "main/", legacy_testcases }, { "main/", legacy_testcases },
{ "et/", edgetriggered_testcases },
{ "evbuffer/", evbuffer_testcases }, { "evbuffer/", evbuffer_testcases },
{ "signal/", signal_testcases }, { "signal/", signal_testcases },
{ "util/", util_testcases }, { "util/", util_testcases },