📄 testpoll.c
字号:
recv_msg(s, LARGE_NUM_SOCKETS - 1, p, tc);
rv = apr_poll(pollarray_large, LARGE_NUM_SOCKETS, &lrv,
2 * APR_USEC_PER_SEC);
CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv));
for (i = 0; i < LARGE_NUM_SOCKETS; i++) {
check_sockets(pollarray_large, s, i, 0, tc);
}
}
static void setup_pollset(CuTest *tc)
{
apr_status_t rv;
rv = apr_pollset_create(&pollset, LARGE_NUM_SOCKETS, p, 0);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
static void add_sockets_pollset(CuTest *tc)
{
apr_status_t rv;
int i;
for (i = 0; i < LARGE_NUM_SOCKETS;i++){
apr_pollfd_t socket_pollfd;
CuAssertPtrNotNull(tc, s[i]);
socket_pollfd.desc_type = APR_POLL_SOCKET;
socket_pollfd.reqevents = APR_POLLIN;
socket_pollfd.desc.s = s[i];
socket_pollfd.client_data = s[i];
rv = apr_pollset_add(pollset, &socket_pollfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
}
static void nomessage_pollset(CuTest *tc)
{
apr_status_t rv;
int lrv;
const apr_pollfd_t *descs = NULL;
rv = apr_pollset_poll(pollset, 0, &lrv, &descs);
CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv));
CuAssertIntEquals(tc, 0, lrv);
CuAssertPtrEquals(tc, NULL, descs);
}
static void send0_pollset(CuTest *tc)
{
apr_status_t rv;
const apr_pollfd_t *descs = NULL;
int num;
send_msg(s, sa, 0, tc);
rv = apr_pollset_poll(pollset, 0, &num, &descs);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 1, num);
CuAssertPtrNotNull(tc, descs);
CuAssertPtrEquals(tc, s[0], descs[0].desc.s);
CuAssertPtrEquals(tc, s[0], descs[0].client_data);
}
static void recv0_pollset(CuTest *tc)
{
apr_status_t rv;
int lrv;
const apr_pollfd_t *descs = NULL;
recv_msg(s, 0, p, tc);
rv = apr_pollset_poll(pollset, 0, &lrv, &descs);
CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv));
CuAssertIntEquals(tc, 0, lrv);
CuAssertPtrEquals(tc, NULL, descs);
}
static void send_middle_pollset(CuTest *tc)
{
apr_status_t rv;
const apr_pollfd_t *descs = NULL;
int num;
send_msg(s, sa, 2, tc);
send_msg(s, sa, 5, tc);
rv = apr_pollset_poll(pollset, 0, &num, &descs);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 2, num);
CuAssertPtrNotNull(tc, descs);
CuAssert(tc, "Incorrect socket in result set",
((descs[0].desc.s == s[2]) && (descs[1].desc.s == s[5])) ||
((descs[0].desc.s == s[5]) && (descs[1].desc.s == s[2])));
}
static void clear_middle_pollset(CuTest *tc)
{
apr_status_t rv;
int lrv;
const apr_pollfd_t *descs = NULL;
recv_msg(s, 2, p, tc);
recv_msg(s, 5, p, tc);
rv = apr_pollset_poll(pollset, 0, &lrv, &descs);
CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv));
CuAssertIntEquals(tc, 0, lrv);
CuAssertPtrEquals(tc, NULL, descs);
}
static void send_last_pollset(CuTest *tc)
{
apr_status_t rv;
const apr_pollfd_t *descs = NULL;
int num;
send_msg(s, sa, LARGE_NUM_SOCKETS - 1, tc);
rv = apr_pollset_poll(pollset, 0, &num, &descs);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 1, num);
CuAssertPtrNotNull(tc, descs);
CuAssertPtrEquals(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].desc.s);
CuAssertPtrEquals(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].client_data);
}
static void clear_last_pollset(CuTest *tc)
{
apr_status_t rv;
int lrv;
const apr_pollfd_t *descs = NULL;
recv_msg(s, LARGE_NUM_SOCKETS - 1, p, tc);
rv = apr_pollset_poll(pollset, 0, &lrv, &descs);
CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv));
CuAssertIntEquals(tc, 0, lrv);
CuAssertPtrEquals(tc, NULL, descs);
}
static void close_all_sockets(CuTest *tc)
{
apr_status_t rv;
int i;
for (i = 0; i < LARGE_NUM_SOCKETS; i++){
rv = apr_socket_close(s[i]);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
}
static void pollset_remove(CuTest *tc)
{
apr_status_t rv;
apr_pollset_t *pollset;
const apr_pollfd_t *hot_files;
apr_pollfd_t pfd;
apr_int32_t num;
rv = apr_pollset_create(&pollset, 5, p, 0);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
pfd.p = p;
pfd.desc_type = APR_POLL_SOCKET;
pfd.reqevents = APR_POLLOUT;
pfd.desc.s = s[0];
pfd.client_data = (void *)1;
rv = apr_pollset_add(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
pfd.desc.s = s[1];
pfd.client_data = (void *)2;
rv = apr_pollset_add(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
pfd.desc.s = s[2];
pfd.client_data = (void *)3;
rv = apr_pollset_add(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
pfd.desc.s = s[1];
pfd.client_data = (void *)4;
rv = apr_pollset_add(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
pfd.desc.s = s[3];
pfd.client_data = (void *)5;
rv = apr_pollset_add(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
rv = apr_pollset_poll(pollset, 1000, &num, &hot_files);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 5, num);
/* now remove the pollset elements referring to desc s[1] */
pfd.desc.s = s[1];
pfd.client_data = (void *)999; /* not used on this call */
rv = apr_pollset_remove(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
/* this time only three should match */
rv = apr_pollset_poll(pollset, 1000, &num, &hot_files);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 3, num);
CuAssertPtrEquals(tc, (void *)1, hot_files[0].client_data);
CuAssertPtrEquals(tc, s[0], hot_files[0].desc.s);
CuAssertPtrEquals(tc, (void *)3, hot_files[1].client_data);
CuAssertPtrEquals(tc, s[2], hot_files[1].desc.s);
CuAssertPtrEquals(tc, (void *)5, hot_files[2].client_data);
CuAssertPtrEquals(tc, s[3], hot_files[2].desc.s);
/* now remove the pollset elements referring to desc s[2] */
pfd.desc.s = s[2];
pfd.client_data = (void *)999; /* not used on this call */
rv = apr_pollset_remove(pollset, &pfd);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
/* this time only two should match */
rv = apr_pollset_poll(pollset, 1000, &num, &hot_files);
CuAssertIntEquals(tc, APR_SUCCESS, rv);
CuAssertIntEquals(tc, 2, num);
CuAssertPtrEquals(tc, (void *)1, hot_files[0].client_data);
CuAssertPtrEquals(tc, s[0], hot_files[0].desc.s);
CuAssertPtrEquals(tc, (void *)5, hot_files[1].client_data);
CuAssertPtrEquals(tc, s[3], hot_files[1].desc.s);
}
CuSuite *testpoll(void)
{
CuSuite *suite = CuSuiteNew("Poll");
SUITE_ADD_TEST(suite, create_all_sockets);
SUITE_ADD_TEST(suite, setup_small_poll);
SUITE_ADD_TEST(suite, setup_large_poll);
SUITE_ADD_TEST(suite, nomessage);
SUITE_ADD_TEST(suite, send_2);
SUITE_ADD_TEST(suite, recv_2_send_1);
SUITE_ADD_TEST(suite, send_2_signaled_1);
SUITE_ADD_TEST(suite, recv_1_send_0);
SUITE_ADD_TEST(suite, clear_all_signalled);
SUITE_ADD_TEST(suite, send_large_pollarray);
SUITE_ADD_TEST(suite, recv_large_pollarray);
SUITE_ADD_TEST(suite, setup_pollset);
SUITE_ADD_TEST(suite, add_sockets_pollset);
SUITE_ADD_TEST(suite, nomessage_pollset);
SUITE_ADD_TEST(suite, send0_pollset);
SUITE_ADD_TEST(suite, recv0_pollset);
SUITE_ADD_TEST(suite, send_middle_pollset);
SUITE_ADD_TEST(suite, clear_middle_pollset);
SUITE_ADD_TEST(suite, send_last_pollset);
SUITE_ADD_TEST(suite, clear_last_pollset);
SUITE_ADD_TEST(suite, pollset_remove);
SUITE_ADD_TEST(suite, close_all_sockets);
return suite;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -