extern struct testcase_t evtag_testcases[];
extern struct testcase_t evbuffer_testcases[];
extern struct testcase_t bufferevent_testcases[];
+extern struct testcase_t bufferevent_iocp_testcases[];
extern struct testcase_t util_testcases[];
extern struct testcase_t signal_testcases[];
extern struct testcase_t http_testcases[];
#define TT_LEGACY (TT_FIRST_USER_FLAG<<3)
#define TT_NEED_THREADS (TT_FIRST_USER_FLAG<<4)
#define TT_NO_LOGS (TT_FIRST_USER_FLAG<<5)
+#define TT_ENABLE_IOCP (TT_FIRST_USER_FLAG<<6)
/* All the flags that a legacy test needs. */
#define TT_ISOLATED TT_FORK|TT_NEED_SOCKETPAIR|TT_NEED_BASE
END_OF_TESTCASES,
};
+
+struct testcase_t bufferevent_iocp_testcases[] = {
+
+ LEGACY(bufferevent, TT_ISOLATED|TT_ENABLE_IOCP),
+ LEGACY(bufferevent_watermarks, TT_ISOLATED|TT_ENABLE_IOCP),
+ LEGACY(bufferevent_filters, TT_ISOLATED|TT_ENABLE_IOCP),
+#if 0
+ { "bufferevent_connect", test_bufferevent_connect, TT_FORK|TT_NEED_BASE,
+ &basic_setup, (void*)"" },
+ { "bufferevent_connect_defer", test_bufferevent_connect,
+ TT_FORK|TT_NEED_BASE, &basic_setup, (void*)"defer" },
+ { "bufferevent_connect_lock", test_bufferevent_connect,
+ TT_FORK|TT_NEED_BASE|TT_NEED_THREADS, &basic_setup, (void*)"lock" },
+ { "bufferevent_connect_lock_defer", test_bufferevent_connect,
+ TT_FORK|TT_NEED_BASE|TT_NEED_THREADS, &basic_setup,
+ (void*)"defer lock" },
+ { "bufferevent_connect_fail", test_bufferevent_connect_fail,
+ TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
+#endif
+
+ END_OF_TESTCASES,
+};
{ "randport", regress_pick_a_port, TT_FORK|TT_NEED_BASE,
&basic_setup, NULL},
+ { "iocp/randport", regress_pick_a_port,
+ TT_FORK|TT_NEED_BASE|TT_ENABLE_IOCP,
+ &basic_setup, NULL},
+
END_OF_TESTCASES,
};
#include "regress.h"
#include "tinytest.h"
#include "tinytest_macros.h"
+#include "../iocp-internal.h"
+
/* ============================================================ */
/* Code to wrap up old legacy test cases that used setup() and cleanup().
int spair[2] = { -1, -1 };
struct basic_test_data *data = NULL;
+#ifndef WIN32
+ if (testcase->flags & TT_ENABLE_IOCP)
+ return (void*)TT_SKIP;
+#endif
+
if (testcase->flags & TT_NEED_THREADS) {
if (!(testcase->flags & TT_FORK))
return NULL;
if (!base)
exit(1);
}
-
+ if (testcase->flags & TT_ENABLE_IOCP) {
+ if (event_base_start_iocp(base)<0) {
+ event_base_free(base);
+ return (void*)TT_SKIP;
+ }
+ }
if (testcase->flags & TT_NEED_DNS) {
evdns_set_log_fn(dnslogcb);
legacy_test_setup(const struct testcase_t *testcase)
{
struct basic_test_data *data = basic_test_setup(testcase);
+ if (data == (void*)TT_SKIP)
+ return data;
global_base = data->base;
pair[0] = data->pair[0];
pair[1] = data->pair[1];
#ifdef WIN32
{ "iocp/", iocp_testcases },
#endif
+ { "iocp/bufferevent/", bufferevent_iocp_testcases },
#ifdef _EVENT_HAVE_OPENSSL
{ "ssl/", ssl_testcases },
#endif