Do not crash if key is NULL.
[oweals/gnunet.git] / src / fs / test_fs_search_probes.c
index be710a79c2f5672f5ab31f638f3b471927e8cf27..beae34763c0d0f2deadea9e6312f168118189780 100644 (file)
@@ -25,7 +25,7 @@
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"
-#include "gnunet_testing_lib-new.h"
+#include "gnunet_testing_lib.h"
 #include "gnunet_fs_service.h"
 
 
@@ -53,12 +53,44 @@ static struct GNUNET_FS_SearchContext *search;
 
 static struct GNUNET_FS_PublishContext *publish;
 
+static GNUNET_SCHEDULER_TaskIdentifier timeout_task;
+
+static int err;
+
+
+static void
+abort_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  timeout_task = GNUNET_SCHEDULER_NO_TASK;
+  fprintf (stderr,
+          "Timeout\n");
+  if (NULL != search)
+  {
+    GNUNET_FS_search_stop (search);
+    search = NULL;
+  }
+  if (NULL != publish)
+  {
+    GNUNET_FS_publish_stop (publish);
+    publish = NULL;
+  }
+  err = 1;
+}
+
 
 static void
 abort_publish_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  GNUNET_FS_publish_stop (publish);
-  publish = NULL;
+  if (NULL != publish)
+  {
+    GNUNET_FS_publish_stop (publish);
+    publish = NULL;
+  }
+  if (GNUNET_SCHEDULER_NO_TASK != timeout_task)
+  {
+    GNUNET_SCHEDULER_cancel (timeout_task);
+    timeout_task = GNUNET_SCHEDULER_NO_TASK;
+  }
 }
 
 
@@ -90,6 +122,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event)
                (unsigned long long) event->value.publish.specifics.
                progress.offset);
     break;
+  case GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY:
+    break;
   case GNUNET_FS_STATUS_PUBLISH_COMPLETED:
     kuri = GNUNET_FS_uri_ksk_create_from_args (1, keywords);
     start = GNUNET_TIME_absolute_get ();
@@ -130,9 +164,9 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event)
     fs = NULL;
     break;
   case GNUNET_FS_STATUS_SEARCH_UPDATE:
-    GNUNET_assert (0 < event->value.search.specifics.update.availability_rank);
-    GNUNET_assert (0 < event->value.search.specifics.update.availability_certainty);
-    GNUNET_SCHEDULER_add_now (&abort_search_task, NULL);
+    if ( (0 < event->value.search.specifics.update.availability_rank) &&
+        (0 < event->value.search.specifics.update.availability_certainty) )
+      GNUNET_SCHEDULER_add_now (&abort_search_task, NULL);
     break;
   case GNUNET_FS_STATUS_SEARCH_START:
     GNUNET_assert (search == NULL);
@@ -156,7 +190,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event)
 
 static void
 run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
+     const struct GNUNET_CONFIGURATION_Handle *cfg,
+     struct GNUNET_TESTING_Peer *peer)
 {
   const char *keywords[] = {
     "down_foo",
@@ -170,7 +205,7 @@ run (void *cls,
   size_t i;
 
   fs = GNUNET_FS_start (cfg, "test-fs-search", &progress_cb, NULL,
-                        GNUNET_FS_FLAGS_DO_PROBES, 
+                        GNUNET_FS_FLAGS_DO_PROBES,
                        GNUNET_FS_OPTIONS_END);
   GNUNET_assert (NULL != fs);
   buf = GNUNET_malloc (FILESIZE);
@@ -193,6 +228,8 @@ run (void *cls,
       GNUNET_FS_publish_start (fs, fi, NULL, NULL, NULL,
                                GNUNET_FS_PUBLISH_OPTION_NONE);
   GNUNET_assert (publish != NULL);
+  timeout_task = GNUNET_SCHEDULER_add_delayed (LIFETIME,
+                                              &abort_error, NULL);
 }
 
 
@@ -203,7 +240,7 @@ main (int argc, char *argv[])
                                    "test_fs_search_data.conf",
                                    &run, NULL))
     return 1;
-  return 0;
+  return err;
 }
 
 /* end of test_fs_search_probes.c */