Modify one of the tests to check service list
authorLRN <lrn1986@gmail.com>
Wed, 13 Mar 2013 21:01:29 +0000 (21:01 +0000)
committerLRN <lrn1986@gmail.com>
Wed, 13 Mar 2013 21:01:29 +0000 (21:01 +0000)
src/arm/test_gnunet_service_arm.c

index bd7fe5fa95bedbdfe749c3365175b95d92f2dc38..a641f10c51924bb222d170ec38a45014cf8b277e 100644 (file)
 
 static int ret = 1;
 
+static int resolved_ok = 0;
+
+static int asked_for_a_list = 0;
+
 static struct GNUNET_ARM_Handle *arm;
 
 static void
@@ -59,23 +63,38 @@ arm_stop_cb (void *cls, struct GNUNET_ARM_Handle *h, enum GNUNET_ARM_RequestStat
   GNUNET_SCHEDULER_add_now (trigger_disconnect, NULL);
 }
 
+static void
+service_list (void *cls, struct GNUNET_ARM_Handle *arm,
+    enum GNUNET_ARM_RequestStatus rs,
+    unsigned int count, const char *const*list)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u services are are currently running\n", count);
+  GNUNET_assert (count == 1);
+  GNUNET_break (0 == strcasecmp (list[0], "resolver (gnunet-service-resolver)"));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got service list, now stopping arm\n");
+  ret = 0;
+  GNUNET_ARM_request_service_stop (arm, "arm", TIMEOUT, arm_stop_cb, NULL);
+}
+
 static void
 hostNameResolveCB (void *cls, const struct sockaddr *addr, socklen_t addrlen)
 {
-  if ((ret == 0) || (ret == 4))
+  if ((ret == 0) || (ret == 4) || (resolved_ok == 1))
     return;
   if (NULL == addr)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Name not resolved!\n");
     ret = 3;
+    GNUNET_ARM_request_service_stop (arm, "arm", TIMEOUT, arm_stop_cb, NULL);
   }
-  else
+  else if (asked_for_a_list == 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-        "Resolved hostname, now stopping ARM\n");
-    ret = 0;
+        "Resolved hostname, now checking the service list\n");
+    GNUNET_ARM_request_service_list (arm, TIMEOUT, service_list, NULL);
+    asked_for_a_list = 1;
+    resolved_ok = 1;
   }
-  GNUNET_ARM_request_service_stop (arm, "arm", TIMEOUT, arm_stop_cb, NULL);
 }
 
 static void