summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2009-11-14 03:11:38 +0000
committertrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2009-11-14 03:11:38 +0000
commit2bcbf289885b1913570e174419e82872d5f4266e (patch)
treea25b9269de8edb41ecb14198f6f65379bc0e91ba
parent469d64ade77c06b431d0b9770a661b19df257f38 (diff)
downloadlibapr-2bcbf289885b1913570e174419e82872d5f4266e.tar.gz
merge r834130 and r834133 from trunk:
fix incorrect assumptions in pollset/pollcb tests: - polling won't necessary detect the status change immediately after an I/O operation - a single poll call won't necessarily return multiple status changes after multiple I/O operations and whitespace fixes Submitted by: Neil Conway <nrc cs.berkeley.edu> Reviewed by: trawick git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/1.3.x@836109 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--test/testpoll.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/test/testpoll.c b/test/testpoll.c
index e7792c2f1..c5e4b5d22 100644
--- a/test/testpoll.c
+++ b/test/testpoll.c
@@ -53,7 +53,7 @@ static void make_socket(apr_socket_t **sock, apr_sockaddr_t **sa,
rv = apr_socket_create(sock, (*sa)->family, SOCK_DGRAM, 0, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- rv =apr_socket_bind((*sock), (*sa));
+ rv = apr_socket_bind((*sock), (*sa));
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
}
@@ -308,12 +308,14 @@ static void multi_event_pollset(abts_case *tc, void *data)
send_msg(s, sa, 0, tc);
- rv = apr_pollset_poll(pollset, 0, &lrv, &descs);
- ABTS_INT_EQUAL(tc, 0, APR_STATUS_IS_TIMEUP(rv));
+ rv = apr_pollset_poll(pollset, -1, &lrv, &descs);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
if (lrv == 1) {
+ int ev = descs[0].rtnevents;
ABTS_PTR_EQUAL(tc, s[0], descs[0].desc.s);
- ABTS_INT_EQUAL(tc, APR_POLLIN | APR_POLLOUT, descs[0].rtnevents);
ABTS_PTR_EQUAL(tc, s[0], descs[0].client_data);
+ ABTS_ASSERT(tc, "either or both of APR_POLLIN, APR_POLLOUT returned",
+ ((ev & APR_POLLIN) != 0) || ((ev & APR_POLLOUT) != 0));
}
else if (lrv == 2) {
ABTS_PTR_EQUAL(tc, s[0], descs[0].desc.s);
@@ -379,15 +381,15 @@ static void send0_pollset(abts_case *tc, void *data)
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);
+ rv = apr_pollset_poll(pollset, -1, &num, &descs);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_INT_EQUAL(tc, 1, num);
ABTS_PTR_NOTNULL(tc, descs);
ABTS_PTR_EQUAL(tc, s[0], descs[0].desc.s);
- ABTS_PTR_EQUAL(tc, s[0], descs[0].client_data);
+ ABTS_PTR_EQUAL(tc, s[0], descs[0].client_data);
}
static void recv0_pollset(abts_case *tc, void *data)
@@ -411,14 +413,19 @@ static void send_middle_pollset(abts_case *tc, void *data)
send_msg(s, sa, 2, tc);
send_msg(s, sa, 5, tc);
- rv = apr_pollset_poll(pollset, 0, &num, &descs);
+ rv = apr_pollset_poll(pollset, -1, &num, &descs);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, 2, num);
ABTS_PTR_NOTNULL(tc, descs);
-
- ABTS_ASSERT(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])));
+ ABTS_ASSERT(tc, "either one or two events returned",
+ num == 1 || num == 2);
+
+ /* The poll might only see the first sent message, in which
+ * case we just don't bother checking this assertion */
+ if (num == 2) {
+ ABTS_ASSERT(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(abts_case *tc, void *data)
@@ -443,13 +450,13 @@ static void send_last_pollset(abts_case *tc, void *data)
int num;
send_msg(s, sa, LARGE_NUM_SOCKETS - 1, tc);
- rv = apr_pollset_poll(pollset, 0, &num, &descs);
+ rv = apr_pollset_poll(pollset, -1, &num, &descs);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_INT_EQUAL(tc, 1, num);
ABTS_PTR_NOTNULL(tc, descs);
ABTS_PTR_EQUAL(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].desc.s);
- ABTS_PTR_EQUAL(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].client_data);
+ ABTS_PTR_EQUAL(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].client_data);
}
static void clear_last_pollset(abts_case *tc, void *data)
@@ -607,8 +614,8 @@ static void trigger_pollcb(abts_case *tc, void *data)
send_msg(s, sa, 0, tc);
pcb.tc = tc;
pcb.count = 0;
- rv = apr_pollcb_poll(pollcb, 0, trigger_pollcb_cb, &pcb);
- ABTS_INT_EQUAL(tc, 0, APR_STATUS_IS_TIMEUP(rv));
+ rv = apr_pollcb_poll(pollcb, -1, trigger_pollcb_cb, &pcb);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_INT_EQUAL(tc, 1, pcb.count);
rv = apr_pollcb_remove(pollcb, &socket_pollfd);
@@ -688,11 +695,8 @@ abts_suite *testpoll(abts_suite *suite)
abts_run_test(suite, clear_middle_pollset, NULL);
abts_run_test(suite, send_last_pollset, NULL);
abts_run_test(suite, clear_last_pollset, NULL);
-
abts_run_test(suite, pollset_remove, NULL);
-
abts_run_test(suite, close_all_sockets, NULL);
-
abts_run_test(suite, create_all_sockets, NULL);
abts_run_test(suite, setup_pollcb, NULL);
abts_run_test(suite, trigger_pollcb, NULL);