fix
[oweals/gnunet.git] / src / gns / test_gns_ns_lookup.c
index 33797a55ab983672c4b89e96bf73f73483d78fee..440568509c0ea1da62e92e68352bf6b16211fb2c 100644 (file)
 #include "block_dns.h"
 #include "gnunet_signatures.h"
 #include "gnunet_namestore_service.h"
+#include "gnunet_resolver_service.h"
 #include "gnunet_dnsparser_lib.h"
 #include "gnunet_gns_service.h"
 
-/* DEFINES */
-#define VERBOSE GNUNET_YES
-
 /* Timeout for entire testcase */
 #define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 20)
 
@@ -65,10 +63,14 @@ GNUNET_SCHEDULER_TaskIdentifier die_task;
 /* Global return value (0 for success, anything else for failure) */
 static int ok;
 
+static int resolver_working;
+
 static struct GNUNET_NAMESTORE_Handle *namestore_handle;
 
 static struct GNUNET_GNS_Handle *gns_handle;
 
+static struct GNUNET_RESOLVER_RequestHandle *resolver_handle;
+
 const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 /**
@@ -98,7 +100,7 @@ on_lookup_result_alt2 (void *cls, uint32_t rd_count,
   if (rd_count == 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Lookup failed, rp_filtering?\n");
+                "Lookup failed\n");
     ok = 2;
   }
   else
@@ -108,7 +110,7 @@ on_lookup_result_alt2 (void *cls, uint32_t rd_count,
     for (i=0; i<rd_count; i++)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO, "type: %d\n", rd[i].record_type);
-      if (rd[i].record_type == GNUNET_GNS_RECORD_TYPE_A)
+      if (rd[i].record_type == GNUNET_GNS_RECORD_A)
       {
         memcpy(&a, rd[i].data, sizeof(a));
         addr = inet_ntoa(a);
@@ -142,7 +144,7 @@ on_lookup_result_alt (void *cls, uint32_t rd_count,
   if (rd_count == 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Lookup failed, rp_filtering?\n");
+                "Lookup failed\n");
     ok = 2;
   }
   else
@@ -152,7 +154,7 @@ on_lookup_result_alt (void *cls, uint32_t rd_count,
     for (i=0; i<rd_count; i++)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO, "type: %d\n", rd[i].record_type);
-      if (rd[i].record_type == GNUNET_GNS_RECORD_TYPE_A)
+      if (rd[i].record_type == GNUNET_GNS_RECORD_A)
       {
         memcpy(&a, rd[i].data, sizeof(a));
         addr = inet_ntoa(a);
@@ -171,7 +173,7 @@ on_lookup_result_alt (void *cls, uint32_t rd_count,
     }
   }
 
-  GNUNET_GNS_lookup(gns_handle, TEST_DOMAIN_ALT2, GNUNET_GNS_RECORD_TYPE_A,
+  GNUNET_GNS_lookup(gns_handle, TEST_DOMAIN_ALT2, GNUNET_GNS_RECORD_A,
                     GNUNET_YES,
                     NULL,
                     &on_lookup_result_alt2, TEST_DOMAIN_ALT2);
@@ -188,7 +190,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
   if (rd_count == 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Lookup failed, rp_filtering?\n");
+                "Lookup failed\n");
     ok = 2;
   }
   else
@@ -198,7 +200,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
     for (i=0; i<rd_count; i++)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO, "type: %d\n", rd[i].record_type);
-      if (rd[i].record_type == GNUNET_GNS_RECORD_TYPE_A)
+      if (rd[i].record_type == GNUNET_GNS_RECORD_A)
       {
         memcpy(&a, rd[i].data, sizeof(a));
         addr = inet_ntoa(a);
@@ -217,25 +219,20 @@ on_lookup_result(void *cls, uint32_t rd_count,
     }
   }
 
-  GNUNET_GNS_lookup(gns_handle, TEST_DOMAIN_ALT, GNUNET_GNS_RECORD_TYPE_A,
+  GNUNET_GNS_lookup(gns_handle, TEST_DOMAIN_ALT, GNUNET_GNS_RECORD_A,
                     GNUNET_YES,
                     NULL,
                     &on_lookup_result_alt, TEST_DOMAIN_ALT);
 }
 
 
-/**
- * Function scheduled to be run on the successful start of services
- * tries to look up the dns record for TEST_DOMAIN
- */
 static void
-commence_testing (void *cls, int32_t success, const char *emsg)
+start_lookup (void)
 {
+
   
-  
-  GNUNET_NAMESTORE_disconnect(namestore_handle, GNUNET_YES);
-  
-  gns_handle = GNUNET_GNS_connect(cfg);
+  GNUNET_NAMESTORE_disconnect (namestore_handle);
+  gns_handle = GNUNET_GNS_connect (cfg);
 
   if (NULL == gns_handle)
   {
@@ -244,10 +241,63 @@ commence_testing (void *cls, int32_t success, const char *emsg)
     ok = 2;
   }
 
-  GNUNET_GNS_lookup(gns_handle, TEST_DOMAIN, GNUNET_GNS_RECORD_TYPE_A,
-                    GNUNET_YES,
-                    NULL,
-                    &on_lookup_result, TEST_DOMAIN);
+  GNUNET_GNS_lookup (gns_handle, TEST_DOMAIN, GNUNET_GNS_RECORD_A,
+                     GNUNET_YES,
+                     NULL,
+                     &on_lookup_result, TEST_DOMAIN);
+}
+
+
+static void
+handle_dns_test (void *cls,
+                 const struct sockaddr *addr,
+                 socklen_t addrlen)
+{
+  struct sockaddr_in* sai;
+
+  if (NULL == addr)
+  {
+    /* end of results */
+    if (GNUNET_YES != resolver_working)
+    {
+      ok = 0;
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "System resolver not working. Test inconclusive!\n");
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n");
+      GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
+      return;
+    }
+    start_lookup ();
+    return;
+  }
+
+  if (addrlen == sizeof (struct sockaddr_in))
+  {
+    sai = (struct sockaddr_in*) addr;
+    if (0 == strcmp (TEST_IP, inet_ntoa (sai->sin_addr)))
+      resolver_working = GNUNET_YES;
+  }
+}
+
+
+
+
+/**
+ * Function scheduled to be run on the successful start of services
+ * tries to look up the dns record for TEST_DOMAIN
+ */
+static void
+commence_testing (void *cls, int32_t success, const char *emsg)
+{
+  
+  resolver_working = GNUNET_NO;
+
+  GNUNET_RESOLVER_connect (cfg);
+  resolver_handle = GNUNET_RESOLVER_ip_get (TEST_RECORD_NS,
+                                            AF_INET,
+                                            TIMEOUT,
+                                            &handle_dns_test,
+                                            NULL);
 }
 
 
@@ -258,7 +308,8 @@ commence_testing (void *cls, int32_t success, const char *emsg)
 static void
 end_badly_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-
+  if (resolver_handle != NULL)
+    GNUNET_RESOLVER_request_cancel (resolver_handle);
   if (pg != NULL)
     GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
   GNUNET_SCHEDULER_cancel (die_task);
@@ -335,7 +386,7 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id,
 
   rd.data_size = strlen (TEST_RECORD_NS);
   rd.data = TEST_RECORD_NS;
-  rd.record_type = GNUNET_GNS_RECORD_TYPE_NS;
+  rd.record_type = GNUNET_GNS_RECORD_NS;
  
   GNUNET_NAMESTORE_record_create (namestore_handle,
                                   alice_key,
@@ -383,9 +434,6 @@ check ()
   char *const argv[] = { "test-gns-ns-lookup", /* Name to give running binary */
     "-c",
     "test_gns_simple_lookup.conf",       /* Config file to use */
-#if VERBOSE
-    "-L", "DEBUG",
-#endif
     NULL
   };
   struct GNUNET_GETOPT_CommandLineOption options[] = {
@@ -410,11 +458,7 @@ main (int argc, char *argv[])
   int ret;
 
   GNUNET_log_setup ("test-gns-simple-lookup",
-#if VERBOSE
-                    "DEBUG",
-#else
                     "WARNING",
-#endif
                     NULL);
   ret = check ();
   /**