summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68>2006-03-31 05:21:32 +0000
committerpquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68>2006-03-31 05:21:32 +0000
commit7f9e23b625ec90964f4809cc436b83b85845cb7f (patch)
tree27097d92d8dd29f57fa4f169d966d8168bbd0d4f
parent7d5f2b0770cc9e4420c492237c5a9e3738c5cc7a (diff)
downloadlibapr-7f9e23b625ec90964f4809cc436b83b85845cb7f.tar.gz
Add a simple Callback testcase, to make sure it kind-of-works. YMMV :)
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/pollcb-dev@390328 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--test/testpoll.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/testpoll.c b/test/testpoll.c
index 3e7130def..6a66f0db3 100644
--- a/test/testpoll.c
+++ b/test/testpoll.c
@@ -560,6 +560,44 @@ static void setup_pollcb(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
}
+typedef struct pollcb_baton_t {
+ abts_case *tc;
+ int count;
+} pollcb_baton_t;
+
+static apr_status_t trigger_pollcb_cb(void* baton, apr_pollfd_t *descriptor)
+{
+ pollcb_baton_t* pcb = (pollcb_baton_t*) baton;
+ ABTS_PTR_EQUAL(pcb->tc, s[0], descriptor->desc.s);
+ ABTS_PTR_EQUAL(pcb->tc, s[0], descriptor->client_data);
+ pcb->count++;
+ return APR_SUCCESS;
+}
+
+static void trigger_pollcb(abts_case *tc, void *data)
+{
+ apr_status_t rv;
+ apr_pollfd_t socket_pollfd;
+ pollcb_baton_t pcb;
+
+ ABTS_PTR_NOTNULL(tc, s[0]);
+ socket_pollfd.desc_type = APR_POLL_SOCKET;
+ socket_pollfd.reqevents = APR_POLLIN | APR_POLLOUT;
+ socket_pollfd.desc.s = s[0];
+ socket_pollfd.client_data = s[0];
+ rv = apr_pollcb_add(pollcb, &socket_pollfd);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+ 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));
+ ABTS_INT_EQUAL(tc, 1, pcb.count);
+
+ rv = apr_pollcb_remove(pollcb, &socket_pollfd);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+}
abts_suite *testpoll(abts_suite *suite)
{
@@ -595,7 +633,10 @@ abts_suite *testpoll(abts_suite *suite)
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);
+ abts_run_test(suite, close_all_sockets, NULL);
return suite;
}