From 3c7758fdbc0cd07ee4d3e1c5d988fff39df3736d Mon Sep 17 00:00:00 2001
From: Sara Dickinson <sara@sinodun.com>
Date: Thu, 16 Jun 2016 10:47:43 +0100
Subject: [PATCH 1/2] Minor testing updates:

- add option to use IPv6 for manual transport tests
- add recursion mode to call_reporting
---
 src/dict.c                                        |  1 +
 src/test/check_getdns_context_set_dns_transport.h | 12 +++++++++++-
 src/test/tests_transports.sh                      | 11 +++++++----
 src/util-internal.c                               | 13 ++++++++++---
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/dict.c b/src/dict.c
index 8e7eec8f..07d80e51 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -1054,6 +1054,7 @@ getdns_pp_dict(gldns_buffer * buf, size_t indent,
 			     strcmp(item->node.key, "append_name") == 0 ||
 			     strcmp(item->node.key, "follow_redirects") == 0 ||
 				 strcmp(item->node.key, "transport") == 0 ||
+			     strcmp(item->node.key, "resolution_mode") == 0 ||
 			     strcmp(item->node.key, "resolution_type") == 0 ||
 			     strcmp(item->node.key, "tls_authentication") == 0 ) &&
 			    (strval =
diff --git a/src/test/check_getdns_context_set_dns_transport.h b/src/test/check_getdns_context_set_dns_transport.h
index c1135045..af5f7fe6 100644
--- a/src/test/check_getdns_context_set_dns_transport.h
+++ b/src/test/check_getdns_context_set_dns_transport.h
@@ -131,6 +131,7 @@
        struct getdns_dict *extensions = getdns_dict_create();
        uint32_t tc;
        uint32_t transport;
+       uint32_t mode;
 
        /* Note that stricly this test just establishes that the requested transport
           and the reported transport are consistent, it does not guarentee which
@@ -157,6 +158,9 @@
        ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/transport", &transport),
          GETDNS_RETURN_GOOD, "Failed to extract \"transport\"");
        ASSERT_RC(transport, GETDNS_TRANSPORT_UDP, "Query did not go over UDP");
+       ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_mode", &mode),
+         GETDNS_RETURN_GOOD, "Failed to extract \"resolution_mode\"");
+       ASSERT_RC(mode, GETDNS_RESOLUTION_STUB, "Query did not use stub mode");
        ASSERT_RC(getdns_dict_get_int(response, "/replies_tree/0/header/tc", &tc),
          GETDNS_RETURN_GOOD, "Failed to extract \"tc\"");
        ASSERT_RC(tc, 1, "Packet not trucated as expected");
@@ -208,6 +212,7 @@
        struct getdns_dict *response = NULL;
        struct getdns_dict *extensions = getdns_dict_create();
        uint32_t status;
+       uint32_t mode;
        uint32_t tc;
 
        /* Recursive mode does not report the transport used and does not answer
@@ -239,13 +244,18 @@
            CONTEXT_CREATE(TRUE);
 
            /* Re-do over TCP */
+           ASSERT_RC(getdns_dict_set_int(extensions,"return_call_reporting", GETDNS_EXTENSION_TRUE),
+             GETDNS_RETURN_GOOD, "Return code from getdns_dict_set_int()");
            ASSERT_RC(getdns_context_set_dns_transport(context, GETDNS_TRANSPORT_TCP_ONLY),
              GETDNS_RETURN_GOOD, "Return code from getdns_context_set_dns_transport()");
            ASSERT_RC(getdns_context_set_edns_maximum_udp_payload_size(context, 512),
              GETDNS_RETURN_GOOD, "Return code from getdns_context_set_edns_maximum_udp_payload_size()");
            ASSERT_RC(getdns_general_sync(context, "getdnsapi.net", 48, extensions, &response), 
              GETDNS_RETURN_GOOD, "Return code from getdns_general_sync()");
-       
+
+           ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_mode", &mode),
+             GETDNS_RETURN_GOOD, "Failed to extract \"resolution_mode\"");
+           ASSERT_RC(mode, GETDNS_RESOLUTION_RECURSING, "Query did not use Recursive mode");
            ASSERT_RC(getdns_dict_get_int(response, "/replies_tree/0/header/tc", &tc),
              GETDNS_RETURN_GOOD, "Failed to extract \"tc\"");
            ASSERT_RC(tc, 0, "Packet trucated - not as expected");
diff --git a/src/test/tests_transports.sh b/src/test/tests_transports.sh
index 68b80568..13e5b6b6 100755
--- a/src/test/tests_transports.sh
+++ b/src/test/tests_transports.sh
@@ -2,7 +2,9 @@
 
 DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
 SERVER_IP="8.8.8.8"
+SERVER_IPv6="2001:4860:4860::8888"
 TLS_SERVER_IP="185.49.141.38~getdnsapi.net"
+TLS_SERVER_IPv6="2a04:b900:0:100::38~getdnsapi.net"
 TLS_SERVER_KEY="foxZRnIh9gZpWnl+zEiKa0EJ2rdCGroMWm02gaxSc9S="
 TLS_SERVER_WRONG_KEY="foxZRnIh9gZpWnl+zEiKa0EJ2rdCGroMWm02gaxSc1S="
 GOOD_RESULT_SYNC="Status was: At least one response was returned"
@@ -62,21 +64,22 @@ usage () {
 	echo "         -t   server configured for TLS, TCP and UDP"
 	echo "              (This must include the hostname e.g. 185.49.141.38~getdnsapi.net)"
 	echo "         -k   SPKI pin for server configured for TLS, TCP and UDP"
+	echo "         -i   Use IPv6 addresses (when using default servers)"
 }
 
-while getopts ":p:s:t:k:dh" opt; do
+while getopts ":p:s:t:k:idh" opt; do
 	case $opt in
-		d ) set -x ;;
+		d ) set -x ; echo "DEBUG mode set" ;;
 		p ) DIR=$OPTARG ;;
 		s ) SERVER_IP=$OPTARG ; echo "Setting server to $OPTARG" ;;
 		t ) TLS_SERVER_IP=$OPTARG ; echo "Setting TLS server to $OPTARG" ;;
 		k ) TLS_SERVER_KEY=$OPTARG ; echo "Setting TLS server key to $OPTARG" ;;
+		i ) SERVER_IP=$SERVER_IPv6; TLS_SERVER_IP=$TLS_SERVER_IPv6 ; echo "Using IPv6" ;;
 		h ) usage ; exit ;;
 	esac
 done
 
 TLS_SERVER_IP_NO_NAME=`echo ${TLS_SERVER_IP%~*}`
-echo $TLS_SERVER_IP_NO_NAME
 TLS_SERVER_IP_WRONG_NAME=`echo ${TLS_SERVER_IP::${#TLS_SERVER_IP}-1}`
 
 GOOD_QUERIES=(
@@ -100,7 +103,7 @@ NOT_AVAILABLE_QUERIES=(
 "-s -A -q getdnsapi.net -l L      @${SERVER_IP}"
 "-s -A -q getdnsapi.net -l L -m   @${TLS_SERVER_IP_WRONG_NAME}"
 "-s -A -q getdnsapi.net -l L -m   @${TLS_SERVER_IP_NO_NAME}"
-"-s -A -q getdnsapi.net -l L -m   @${TLS_SERVER_IP_NO_NAME} ${TLS_SERVER_WRONG_KEY}")
+"-s -A -q getdnsapi.net -l L -m   @${TLS_SERVER_IP_NO_NAME} -K pin-sha256=\"${TLS_SERVER_WRONG_KEY}\"")
 
 
 echo "Starting transport test"
diff --git a/src/util-internal.c b/src/util-internal.c
index aa255e0e..ae3f071b 100644
--- a/src/util-internal.c
+++ b/src/util-internal.c
@@ -812,12 +812,19 @@ _getdns_create_call_reporting_dict(
 		getdns_dict_destroy(netreq_debug);
 		return NULL;
 
-	} else if (!netreq->upstream)
-
+	} else if (!netreq->upstream) {
+		if (getdns_dict_set_int( netreq_debug, "resolution_mode", GETDNS_RESOLUTION_RECURSING)) {
+			getdns_dict_destroy(netreq_debug);
+			return NULL;
+		}
 		/* Nothing more for full recursion */
 		return netreq_debug;
+	}
 
-
+	if (getdns_dict_set_int( netreq_debug, "resolution_mode", GETDNS_RESOLUTION_STUB)) {
+		getdns_dict_destroy(netreq_debug);
+		return NULL;
+	}
 	/* Stub resolver debug data */
 	_getdns_sockaddr_to_dict(
 	    context, &netreq->upstream->addr, &address_debug);

From 497d87a028289ab569e3c180b73f7b8395db0db6 Mon Sep 17 00:00:00 2001
From: Sara Dickinson <sara@sinodun.com>
Date: Fri, 17 Jun 2016 11:25:21 +0100
Subject: [PATCH 2/2] Correct the name to resolution_type

---
 src/dict.c                                        | 3 +--
 src/test/check_getdns_context_set_dns_transport.h | 8 ++++----
 src/util-internal.c                               | 4 ++--
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/dict.c b/src/dict.c
index 07d80e51..e7294e62 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -1053,8 +1053,7 @@ getdns_pp_dict(gldns_buffer * buf, size_t indent,
 			     strcmp(item->node.key, "status") == 0 ||
 			     strcmp(item->node.key, "append_name") == 0 ||
 			     strcmp(item->node.key, "follow_redirects") == 0 ||
-				 strcmp(item->node.key, "transport") == 0 ||
-			     strcmp(item->node.key, "resolution_mode") == 0 ||
+			     strcmp(item->node.key, "transport") == 0 ||
 			     strcmp(item->node.key, "resolution_type") == 0 ||
 			     strcmp(item->node.key, "tls_authentication") == 0 ) &&
 			    (strval =
diff --git a/src/test/check_getdns_context_set_dns_transport.h b/src/test/check_getdns_context_set_dns_transport.h
index af5f7fe6..1985eac6 100644
--- a/src/test/check_getdns_context_set_dns_transport.h
+++ b/src/test/check_getdns_context_set_dns_transport.h
@@ -158,8 +158,8 @@
        ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/transport", &transport),
          GETDNS_RETURN_GOOD, "Failed to extract \"transport\"");
        ASSERT_RC(transport, GETDNS_TRANSPORT_UDP, "Query did not go over UDP");
-       ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_mode", &mode),
-         GETDNS_RETURN_GOOD, "Failed to extract \"resolution_mode\"");
+       ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_type", &mode),
+         GETDNS_RETURN_GOOD, "Failed to extract \"resolution_type\"");
        ASSERT_RC(mode, GETDNS_RESOLUTION_STUB, "Query did not use stub mode");
        ASSERT_RC(getdns_dict_get_int(response, "/replies_tree/0/header/tc", &tc),
          GETDNS_RETURN_GOOD, "Failed to extract \"tc\"");
@@ -253,8 +253,8 @@
            ASSERT_RC(getdns_general_sync(context, "getdnsapi.net", 48, extensions, &response), 
              GETDNS_RETURN_GOOD, "Return code from getdns_general_sync()");
 
-           ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_mode", &mode),
-             GETDNS_RETURN_GOOD, "Failed to extract \"resolution_mode\"");
+           ASSERT_RC(getdns_dict_get_int(response, "/call_reporting/0/resolution_type", &mode),
+             GETDNS_RETURN_GOOD, "Failed to extract \"resolution_type\"");
            ASSERT_RC(mode, GETDNS_RESOLUTION_RECURSING, "Query did not use Recursive mode");
            ASSERT_RC(getdns_dict_get_int(response, "/replies_tree/0/header/tc", &tc),
              GETDNS_RETURN_GOOD, "Failed to extract \"tc\"");
diff --git a/src/util-internal.c b/src/util-internal.c
index ae3f071b..ca04c7f5 100644
--- a/src/util-internal.c
+++ b/src/util-internal.c
@@ -813,7 +813,7 @@ _getdns_create_call_reporting_dict(
 		return NULL;
 
 	} else if (!netreq->upstream) {
-		if (getdns_dict_set_int( netreq_debug, "resolution_mode", GETDNS_RESOLUTION_RECURSING)) {
+		if (getdns_dict_set_int( netreq_debug, "resolution_type", GETDNS_RESOLUTION_RECURSING)) {
 			getdns_dict_destroy(netreq_debug);
 			return NULL;
 		}
@@ -821,7 +821,7 @@ _getdns_create_call_reporting_dict(
 		return netreq_debug;
 	}
 
-	if (getdns_dict_set_int( netreq_debug, "resolution_mode", GETDNS_RESOLUTION_STUB)) {
+	if (getdns_dict_set_int( netreq_debug, "resolution_type", GETDNS_RESOLUTION_STUB)) {
 		getdns_dict_destroy(netreq_debug);
 		return NULL;
 	}