You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2009/11/14 04:11:38 UTC

svn commit: r836109 - /apr/apr/branches/1.3.x/test/testpoll.c

Author: trawick
Date: Sat Nov 14 03:11:38 2009
New Revision: 836109

URL: http://svn.apache.org/viewvc?rev=836109&view=rev
Log:
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

Modified:
    apr/apr/branches/1.3.x/test/testpoll.c

Modified: apr/apr/branches/1.3.x/test/testpoll.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.3.x/test/testpoll.c?rev=836109&r1=836108&r2=836109&view=diff
==============================================================================
--- apr/apr/branches/1.3.x/test/testpoll.c (original)
+++ apr/apr/branches/1.3.x/test/testpoll.c Sat Nov 14 03:11:38 2009
@@ -53,7 +53,7 @@
     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 @@
 
     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 @@
     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 @@
     
     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, "either one or two events returned",
+                num == 1 || 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])));
+    /* 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 @@
     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 @@
     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_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);