Author: mmichelson
Date: Wed Mar  4 14:33:30 2015
New Revision: 432475

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432475
Log:
Add more unit test details.

This also makes a core DNS change by allowing a failure to be
returned when setting DNS results.


Modified:
    team/group/dns/include/asterisk/dns_resolver.h
    team/group/dns/main/dns_core.c
    team/group/dns/tests/test_dns.c

Modified: team/group/dns/include/asterisk/dns_resolver.h
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns/include/asterisk/dns_resolver.h?view=diff&rev=432475&r1=432474&r2=432475
==============================================================================
--- team/group/dns/include/asterisk/dns_resolver.h (original)
+++ team/group/dns/include/asterisk/dns_resolver.h Wed Mar  4 14:33:30 2015
@@ -69,8 +69,11 @@
  * \param result Whether the result is secured or not
  * \param bogus Whether the result is bogus or not
  * \param canonical The canonical name
+ *
+ * \retval 0 success
+ * \retval -1 failure
  */
-void ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int 
nxdomain, unsigned int secure, unsigned int bogus,
+int ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int 
nxdomain, unsigned int secure, unsigned int bogus,
        const char *canonical);
 
 /*!

Modified: team/group/dns/main/dns_core.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns/main/dns_core.c?view=diff&rev=432475&r1=432474&r2=432475
==============================================================================
--- team/group/dns/main/dns_core.c (original)
+++ team/group/dns/main/dns_core.c Wed Mar  4 14:33:30 2015
@@ -333,7 +333,7 @@
        return query->resolver_data;
 }
 
-void ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int 
nxdomain, unsigned int secure, unsigned int bogus,
+int ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int 
nxdomain, unsigned int secure, unsigned int bogus,
        const char *canonical)
 {
        if (query->result) {
@@ -341,6 +341,7 @@
        }
 
        query->result = NULL;
+       return 0;
 }
 
 int ast_dns_resolver_add_record(struct ast_dns_query *query, int rr_type, int 
rr_class, int ttl, const char *data, const size_t size)

Modified: team/group/dns/tests/test_dns.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns/tests/test_dns.c?view=diff&rev=432475&r1=432474&r2=432475
==============================================================================
--- team/group/dns/tests/test_dns.c (original)
+++ team/group/dns/tests/test_dns.c Wed Mar  4 14:33:30 2015
@@ -24,6 +24,7 @@
 #include "asterisk.h"
 
 #include <arpa/nameser.h>
+#include <arpa/inet.h>
 
 #include "asterisk/test.h"
 #include "asterisk/module.h"
@@ -211,8 +212,13 @@
                info->name = "resolver_data";
                info->category = "/main/dns/";
                info->summary = "Test getting and setting data on a DNS 
resolver";
-               /* XXX Better description required */
-               info->description = "Sup dawg";
+               info->description = "This test does the following:\n"
+                       "\t* Ensure that requesting resolver data results in a 
NULL return if no data has been set.\n"
+                       "\t* Ensure that setting resolver data does not result 
in an error.\n"
+                       "\t* Ensure that retrieving the set resolver data 
returns the data we expect\n"
+                       "\t* Ensure that setting new resolver data on the query 
does not result in an error\n"
+                       "\t* Ensure that retrieving the resolver data returns 
the new data that we set\n"
+                       "\t* Ensure that ast_dns_resolver_completed() removes 
resolver data from the query\n";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                break;
@@ -270,12 +276,23 @@
 AST_TEST_DEFINE(resolver_add_record)
 {
        struct ast_dns_query some_query;
-       /* XXX I know this isn't what an A record looks like, but just trying 
to get something compiling right now */
-       static const char *CLEAN_ADDR = "127.0.0.1";
-
-       switch (cmd) {
-       case TEST_INIT:
-               /* XXX Add details */
+       static const char *LOCAL_ADDR = "127.0.0.1";
+       static const size_t bufsize = sizeof(struct in_addr);
+       char buf[bufsize];
+
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = "resolver_add_record";
+               info->category = "/main/dns/";
+               info->summary = "Test adding DNS records to a query";
+               info->description =
+                       "This test performs the following:\n"
+                       "\t* Ensure a nominal A record can be added to a 
query\n"
+                       "\t* Ensure that an A record with invalid RR types 
cannot be added to a query\n"
+                       "\t* Ensure that an A record with invalid RR classes 
cannot be added to a query\n"
+                       "\t* Ensure that an A record with invalid TTL cannot be 
added to a query\n"
+                       "\t* Ensure that an A record with NULL data cannot be 
added to a query\n"
+                       "\t* Ensure that an A record with invalid length cannot 
be added to a query\n";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                break;
@@ -283,36 +300,38 @@
 
        memset(&some_query, 0, sizeof(some_query));
 
+       inet_ntop(AF_INET, LOCAL_ADDR, buf, bufsize);
+
        /* Nominal Record */
-       if (ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
buf, bufsize)) {
                ast_test_status_update(test, "Unable to add nominal record to 
query\n");
                return AST_TEST_FAIL;
        }
 
        /* Invalid RR types */
-       if (!ast_dns_resolver_add_record(&some_query, -1, ns_c_in, 12345, 
CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (!ast_dns_resolver_add_record(&some_query, -1, ns_c_in, 12345, buf, 
bufsize)) {
                ast_test_status_update(test, "Successfully added DNS record 
with negative RR type\n");
                return AST_TEST_FAIL;
        }
        
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_max + 1, ns_c_in, 
12345, CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_max + 1, ns_c_in, 
12345, buf, bufsize)) {
                ast_test_status_update(test, "Successfully added DNS record 
with too large RR type\n");
                return AST_TEST_FAIL;
        }
 
        /* Invalid RR classes */
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, -1, 12345, 
CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, -1, 12345, buf, 
bufsize)) {
                ast_test_status_update(test, "Successfully added DNS record 
with negative RR class\n");
                return AST_TEST_FAIL;
        }
 
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_max + 1, 
12345, CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_max + 1, 
12345, buf, bufsize)) {
                ast_test_status_update(test, "Successfully added DNS record 
with too large RR class\n");
                return AST_TEST_FAIL;
        }
 
        /* Invalid TTL */
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, -1, 
CLEAN_ADDR, strlen(CLEAN_ADDR))) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, -1, buf, 
bufsize)) {
                ast_test_status_update(test, "Successfully added DNS record 
with negative TTL\n");
                return AST_TEST_FAIL;
        }
@@ -324,13 +343,12 @@
        }
 
        /* Lie about the length */
-       /* XXX I don't know how valid these tests actually are. */
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
CLEAN_ADDR, 0)) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
buf, 0)) {
                ast_test_status_update(test, "Successfully added a DNS record 
with length zero\n");
                return AST_TEST_FAIL;
        }
        
-       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
CLEAN_ADDR, strlen(CLEAN_ADDR) * 3)) {
+       if (!ast_dns_resolver_add_record(&some_query, ns_t_a, ns_c_in, 12345, 
buf, bufsize * 3)) {
                ast_test_status_update(test, "Successfully added a DNS record 
with overly-large length\n");
                return AST_TEST_FAIL;
        }
@@ -338,13 +356,44 @@
        return AST_TEST_PASS;
 }
 
+static int test_results(struct ast_test *test, const struct ast_dns_query 
*query,
+               int expected_nxdomain, int expected_secure, int expected_bogus)
+{
+       struct ast_dns_result *result;
+
+       result = ast_dns_query_get_result(query);
+       if (!result) {
+               ast_test_status_update(test, "Unable to retrieve result from 
query\n");
+               return -1;
+       }
+
+       if (ast_dns_result_get_nxdomain(result) != expected_nxdomain ||
+                       ast_dns_result_get_secure(result) != expected_secure ||
+                       ast_dns_result_get_bogus(result) != expected_bogus) {
+               ast_test_status_update(test, "Unexpected values in result from 
query\n");
+               return -1;
+       }
+
+       return 0;
+}
+
 AST_TEST_DEFINE(resolver_set_result)
 {
        struct ast_dns_query some_query;
 
        switch (cmd) {
        case TEST_INIT:
-               /* XXX Add details */
+               info->name = "resolver_set_result";
+               info->category = "/main/dns/";
+               info->summary = "Test setting and getting results on DNS 
queries";
+               info->description =
+                       "This test performs the following:\n"
+                       "\t* Sets a result that is not secure, bogus, or 
nxdomain\n"
+                       "\t* Sets a result that is not secure or nxdomain, but 
is secure\n"
+                       "\t* Sets a result that is not bogus or nxdomain, but 
is secure\n"
+                       "\t* Sets a result that is not secure or bogus, but is 
nxdomain\n"
+                       "After each result is set, we ensure that parameters 
retrieved from\n"
+                       "the result have the expected values.";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                break;
@@ -352,7 +401,73 @@
 
        memset(&some_query, 0, sizeof(some_query));
 
-       /* XXX Not sure what to set for canonical on results */
+       if (ast_dns_resolver_set_result(&some_query, 0, 0, 0, "asterisk.org")) {
+               ast_test_status_update(test, "Unable to add legitimate DNS 
result to query\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (test_results(test, &some_query, 0, 0, 0)) {
+               return AST_TEST_FAIL;
+       }
+
+       if (ast_dns_resolver_set_result(&some_query, 0, 0, 1, "asterisk.org")) {
+               ast_test_status_update(test, "Unable to add bogus DNS result to 
query\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (test_results(test, &some_query, 0, 0, 1)) {
+               return AST_TEST_FAIL;
+       }
+
+       if (ast_dns_resolver_set_result(&some_query, 0, 1, 0, "asterisk.org")) {
+               ast_test_status_update(test, "Unable to add secure DNS result 
to query\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (test_results(test, &some_query, 0, 1, 0)) {
+               return AST_TEST_FAIL;
+       }
+
+       if (ast_dns_resolver_set_result(&some_query, 1, 0, 0, "asterisk.org")) {
+               ast_test_status_update(test, "Unable to add nxdomain DNS result 
to query\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (test_results(test, &some_query, 1, 0, 0)) {
+               return AST_TEST_FAIL;
+       }
+
+       return AST_TEST_PASS;
+}
+
+AST_TEST_DEFINE(resolver_set_result_off_nominal)
+{
+       struct ast_dns_query some_query;
+
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = "resolver_set_result_off_nominal";
+               info->category = "/main/dns/";
+               info->summary = "Test setting off-nominal DNS results\n";
+               info->description =
+                       "This test performs the following:\n"
+                       "\t* Attempt to add a DNS result that is both bogus and 
secure\n"
+                       "\t* Attempt to add a DNS result that has no canonical 
name\n";
+       case TEST_EXECUTE:
+               break;
+       }
+
+       memset(&some_query, 0, sizeof(some_query));
+
+       if (!ast_dns_resolver_set_result(&some_query, 0, 1, 1, "asterisk.org")) 
{
+               ast_test_status_update(test, "Successfully added a result that 
was both secure and bogus\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (!ast_dns_resolver_set_result(&some_query, 0, 0, 0, NULL)) {
+               ast_test_status_update(test, "Successfully added result with no 
canonical name\n");
+               return AST_TEST_FAIL;
+       }
 
        return AST_TEST_PASS;
 }
@@ -365,6 +480,7 @@
        AST_TEST_UNREGISTER(resolver_data);
        AST_TEST_UNREGISTER(resolver_add_record);
        AST_TEST_UNREGISTER(resolver_set_result);
+       AST_TEST_UNREGISTER(resolver_set_result_off_nominal);
 
        return 0;
 }
@@ -377,6 +493,7 @@
        AST_TEST_REGISTER(resolver_data);
        AST_TEST_REGISTER(resolver_add_record);
        AST_TEST_REGISTER(resolver_set_result);
+       AST_TEST_REGISTER(resolver_set_result_off_nominal);
 
        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