[svn-commits] mmichelson: branch group/dns r432475 - in /team/group/dns: include/asterisk/ ...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Mar 4 14:33:31 CST 2015


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;
 }




More information about the svn-commits mailing list