diff options
author | Jeff Trawick <trawick@apache.org> | 2009-11-14 02:53:03 +0000 |
---|---|---|
committer | Jeff Trawick <trawick@apache.org> | 2009-11-14 02:53:03 +0000 |
commit | c10aad9b1cf001a7b8744d159fdf2d6b93b4b321 (patch) | |
tree | a23c1caef118eac36e60b2f02f07db1751eb6922 /test | |
parent | a8cae693ead1a0742bb2a626aead495aed01cfcd (diff) | |
download | apr-c10aad9b1cf001a7b8744d159fdf2d6b93b4b321.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: https://svn.apache.org/repos/asf/apr/apr/branches/1.4.x@836104 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test')
-rw-r--r-- | test/testpoll.c | 44 |
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); |