Author: mmichelson
Date: Tue Mar 10 15:43:27 2015
New Revision: 432719

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432719
Log:
Improve test structure and doxygen for recurring tests.


Modified:
    team/group/dns/tests/test_dns_recurring.c

Modified: team/group/dns/tests/test_dns_recurring.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns/tests/test_dns_recurring.c?view=diff&rev=432719&r1=432718&r2=432719
==============================================================================
--- team/group/dns/tests/test_dns_recurring.c (original)
+++ team/group/dns/tests/test_dns_recurring.c Tue Mar 10 15:43:27 2015
@@ -77,6 +77,16 @@
        return rdata;
 }
 
+/*!
+ * \brief Thread that performs asynchronous resolution.
+ *
+ * This thread uses the query's user data to determine how to
+ * perform the resolution. The query may either be canceled or
+ * it may be completed with records.
+ *
+ * \param dns_query The ast_dns_query that is being performed
+ * \return NULL
+ */
 static void *resolution_thread(void *dns_query)
 {
        struct ast_dns_query *query = dns_query;
@@ -113,6 +123,9 @@
                return NULL;
        }
 
+       /* When the query isn't canceled, we set the TTL of the results based 
on what
+        * we've been told to set it to
+        */
        ast_dns_resolver_set_result(query, 0, 0, ns_r_noerror, "asterisk.org");
 
        inet_pton(AF_INET, ADDR1, addr1_buf);
@@ -129,6 +142,13 @@
        return NULL;
 }
 
+/*!
+ * \brief Resolver's resolve() method
+ *
+ * \param query The query that is to be resolved
+ * \retval 0 Successfully created thread to perform the resolution
+ * \retval non-zero Failed to create resolution thread
+ */
 static int recurring_resolve(struct ast_dns_query *query)
 {
        struct ast_dns_query_recurring *recurring = 
ast_dns_query_get_data(query);
@@ -140,6 +160,12 @@
        return ast_pthread_create_detached(&resolver_thread, NULL, 
resolution_thread, ao2_bump(query));
 }
 
+/*!
+ * \brief Resolver's cancel() method
+ *
+ * \param query The query to cancel
+ * \return 0
+ */
 static int recurring_cancel(struct ast_dns_query *query)
 {
        struct ast_dns_query_recurring *recurring = 
ast_dns_query_get_data(query);
@@ -160,8 +186,21 @@
        .cancel = recurring_cancel,
 };
 
+/*!
+ * \brief Wait for a successful resolution to complete
+ *
+ * This is called whenever a successful DNS resolution occurs. This function
+ * serves to ensure that parameters are as we expect them to be.
+ *
+ * \param test The test being executed
+ * \param rdata DNS query user data
+ * \param expected_lapse The amount of time we expect to wait for the query to 
complete
+ * \param num_resolves The number of DNS resolutions that have been executed
+ * \param num_completed The number of DNS resolutions we expect to have 
completed successfully
+ * \param canceled Whether the query is expected to have been canceled
+ */
 static int wait_for_resolution(struct ast_test *test, struct recurring_data 
*rdata,
-               int expected_lapse, int num_completed)
+               int expected_lapse, int num_resolves, int num_completed, int 
canceled)
 {
        struct timespec begin;
        struct timespec end;
@@ -197,8 +236,13 @@
                return -1;
        }
 
-       if (rdata->resolves != rdata->complete_resolutions && rdata->resolves 
!= num_completed) {
+       if (rdata->resolves != num_resolves || rdata->complete_resolutions != 
num_completed) {
                ast_test_status_update(test, "Query has not undergone expected 
number of resolutions\n");
+               return -1;
+       }
+
+       if (rdata->canceled != canceled) {
+               ast_test_status_update(test, "Query was canceled 
unexpectedly\n");
                return -1;
        }
 
@@ -269,7 +313,7 @@
        }
 
        /* This should be near instantaneous */
-       if (wait_for_resolution(test, rdata, expected_lapse, 1)) {
+       if (wait_for_resolution(test, rdata, expected_lapse, 1, 1, 0)) {
                res = AST_TEST_FAIL;
                goto cleanup;
        }
@@ -279,7 +323,7 @@
        rdata->ttl2 = 10;
 
        /* This should take approximately 5 seconds */
-       if (wait_for_resolution(test, rdata, expected_lapse, 2)) {
+       if (wait_for_resolution(test, rdata, expected_lapse, 2, 2, 0)) {
                res = AST_TEST_FAIL;
                goto cleanup;
        }
@@ -287,7 +331,7 @@
        expected_lapse = rdata->ttl2;
 
        /* This should take approximately 10 seconds */
-       if (wait_for_resolution(test, rdata, expected_lapse, 3)) {
+       if (wait_for_resolution(test, rdata, expected_lapse, 3, 3, 0)) {
                res = AST_TEST_FAIL;
                goto cleanup;
        }
@@ -444,7 +488,7 @@
                goto cleanup;
        }
 
-       if (wait_for_resolution(test, rdata, 0, 1)) {
+       if (wait_for_resolution(test, rdata, 0, 1, 1, 0)) {
                res = AST_TEST_FAIL;
                goto cleanup;
        }
@@ -527,7 +571,7 @@
                goto cleanup;
        }
 
-       if (wait_for_resolution(test, rdata, 0, 1)) {
+       if (wait_for_resolution(test, rdata, 0, 1, 1, 0)) {
                res = AST_TEST_FAIL;
                goto cleanup;
        }
@@ -549,15 +593,13 @@
                goto cleanup;
        }
 
-       /* Query has been canceled. We'll be told that the query in flight has 
completed */
-       ast_mutex_lock(&rdata->lock);
-       while (!rdata->query_complete) {
-               ast_cond_wait(&rdata->cond, &rdata->lock);
-       }
-       rdata->query_complete = 0;
-       ast_mutex_unlock(&rdata->lock);
-
-       /* Now ensure that no more queries get completed after cancellation */
+       /* Query has been canceled. We'll be told that the query in flight has 
completed. */
+       if (wait_for_resolution(test, rdata, 0, 2, 1, 1)) {
+               res = AST_TEST_FAIL;
+               goto cleanup;
+       }
+
+       /* Now ensure that no more queries get completed after cancellation. */
        clock_gettime(CLOCK_REALTIME, &timeout);
        timeout.tv_sec += 10;
 
@@ -594,6 +636,7 @@
 {
        AST_TEST_REGISTER(recurring_query);
        AST_TEST_REGISTER(recurring_query_off_nominal);
+       AST_TEST_REGISTER(recurring_query_cancel_between);
        AST_TEST_REGISTER(recurring_query_cancel_during);
 
        return AST_MODULE_LOAD_SUCCESS;


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to