From ea62d4e33f400571313c1f1397e6f7d9fe5d214b Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Mon, 19 Mar 2012 16:41:50 +0000 Subject: -test for zkey resolver --- src/gns/Makefile.am | 14 ++ src/gns/gns.h | 3 + src/gns/gnunet-service-gns_resolver.c | 13 +- src/gns/gnunet-service-gns_resolver.h | 2 - src/gns/test_gns_simple_zkey_lookup.c | 356 ++++++++++++++++++++++++++++++++++ 5 files changed, 384 insertions(+), 4 deletions(-) create mode 100644 src/gns/test_gns_simple_zkey_lookup.c (limited to 'src/gns') diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am index a13296ea7..f41de7e3c 100644 --- a/src/gns/Makefile.am +++ b/src/gns/Makefile.am @@ -36,6 +36,7 @@ check_PROGRAMS = \ test_gns_simple_lookup \ test_gns_simple_delegated_lookup \ test_gns_simple_mx_lookup \ + test_gns_simple_zkey_lookup \ test_gns_dht_delegated_lookup \ test_gns_pseu_shorten @@ -98,6 +99,19 @@ test_gns_simple_mx_lookup_DEPENDENCIES = \ $(top_builddir)/src/gns/libgnunetgns.la \ $(top_builddir)/src/testing/libgnunettesting.la +test_gns_simple_zkey_lookup_SOURCES = \ + test_gns_simple_zkey_lookup.c +test_gns_simple_zkey_lookup_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/namestore/libgnunetnamestore.la \ + $(top_builddir)/src/gns/libgnunetgns.la \ + $(top_builddir)/src/testing/libgnunettesting.la +test_gns_simple_zkey_lookup_DEPENDENCIES = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/namestore/libgnunetnamestore.la \ + $(top_builddir)/src/gns/libgnunetgns.la \ + $(top_builddir)/src/testing/libgnunettesting.la + test_gns_dht_delegated_lookup_SOURCES = \ test_gns_dht_delegated_lookup.c test_gns_dht_delegated_lookup_LDADD = \ diff --git a/src/gns/gns.h b/src/gns/gns.h index 0f9d77537..5950c460b 100644 --- a/src/gns/gns.h +++ b/src/gns/gns.h @@ -32,6 +32,9 @@ #define GNUNET_GNS_TLD_ZKEY "zkey" #define GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL 3600 +#define MAX_DNS_LABEL_LENGTH 63 +#define MAX_DNS_NAME_LENGTH 253 + GNUNET_NETWORK_STRUCT_BEGIN /** diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index 13c903806..1bbb431e0 100644 --- a/src/gns/gnunet-service-gns_resolver.c +++ b/src/gns/gnunet-service-gns_resolver.c @@ -1544,7 +1544,7 @@ gns_resolver_lookup_record(GNUNET_HashCode zone, { struct ResolverHandle *rh; struct RecordLookupHandle* rlh; - char* string_hash = ""; + char string_hash[MAX_DNS_NAME_LENGTH]; //FIXME name len as soon as shorthash GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting resolution for %s (type=%d)!\n", @@ -1575,8 +1575,12 @@ gns_resolver_lookup_record(GNUNET_HashCode zone, } else { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Checking for TLD...\n"); if (is_zkey_tld(name) == GNUNET_YES) { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "TLD is zkey\n"); /** * This is a zkey tld * build hash and use as initial authority @@ -1587,6 +1591,9 @@ gns_resolver_lookup_record(GNUNET_HashCode zone, strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY) - 1); pop_tld(rh->name, string_hash); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "ZKEY is %s!\n", string_hash); + if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string(string_hash, &rh->authority)) { @@ -1601,6 +1608,8 @@ gns_resolver_lookup_record(GNUNET_HashCode zone, } else { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "TLD is gnunet\n"); /** * Presumably GNUNET tld */ @@ -1772,7 +1781,7 @@ handle_delegation_ns_shorten(void* cls, * This is our zone append .gnunet unless name is empty * (it shouldn't be, usually FIXME what happens if we * shorten to our zone to a "" record??) - **/ + */ answer_len = strlen(rh->name) + strlen(GNUNET_GNS_TLD) + 2; memset(result, 0, answer_len); diff --git a/src/gns/gnunet-service-gns_resolver.h b/src/gns/gnunet-service-gns_resolver.h index ecd059765..fb612d72d 100644 --- a/src/gns/gnunet-service-gns_resolver.h +++ b/src/gns/gnunet-service-gns_resolver.h @@ -7,8 +7,6 @@ #define DHT_OPERATION_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3) #define DHT_LOOKUP_TIMEOUT DHT_OPERATION_TIMEOUT #define DHT_GNS_REPLICATION_LEVEL 5 -#define MAX_DNS_LABEL_LENGTH 63 -#define MAX_DNS_NAME_LENGTH 253 /* * DLL to hold the authority chain diff --git a/src/gns/test_gns_simple_zkey_lookup.c b/src/gns/test_gns_simple_zkey_lookup.c new file mode 100644 index 000000000..f8db33973 --- /dev/null +++ b/src/gns/test_gns_simple_zkey_lookup.c @@ -0,0 +1,356 @@ +/* + This file is part of GNUnet. + (C) 2009 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @file gns/test_gns_simple_zkey_lookup.c + * @brief base testcase for testing zkey lookup + * + */ +#include "platform.h" +#include "gnunet_testing_lib.h" +#include "gnunet_core_service.h" +#include "block_dns.h" +#include "gnunet_signatures.h" +#include "gnunet_namestore_service.h" +#include "../namestore/namestore.h" +#include "gnunet_dnsparser_lib.h" +#include "gnunet_gns_service.h" +#include "gns.h" + +/* DEFINES */ +#define VERBOSE GNUNET_YES + +/* Timeout for entire testcase */ +#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5) + +/* If number of peers not in config file, use this number */ +#define DEFAULT_NUM_PEERS 2 + +/* test records to resolve */ +#define TEST_IP "127.0.0.1" +#define TEST_RECORD_NAME "www" + +#define TEST_AUTHORITY_NAME "bob" + +/* Globals */ + +/** + * Directory to store temp data in, defined in config file + */ +static char *test_directory; + +struct GNUNET_TESTING_Daemon *d1; + + +/* Task handle to use to schedule test failure */ +GNUNET_SCHEDULER_TaskIdentifier die_task; + +/* Global return value (0 for success, anything else for failure) */ +static int ok; + +static struct GNUNET_NAMESTORE_Handle *namestore_handle; + +static struct GNUNET_GNS_Handle *gns_handle; + +const struct GNUNET_CONFIGURATION_Handle *cfg; + +GNUNET_HashCode bob_hash; + +/** + * Check whether peers successfully shut down. + */ +void +shutdown_callback (void *cls, const char *emsg) +{ + if (emsg != NULL) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Error on shutdown! ret=%d\n", ok); + if (ok == 0) + ok = 2; + } + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "done(ret=%d)!\n", ok); +} + +static void +on_lookup_result(void *cls, uint32_t rd_count, + const struct GNUNET_NAMESTORE_RecordData *rd) +{ + struct in_addr a; + int i; + char* addr; + + if (rd_count == 0) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Lookup failed, rp_filtering?\n"); + ok = 2; + } + else + { + ok = 1; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "name: %s\n", (char*)cls); + for (i=0; i