Merge remote-tracking branch 'origin/master' into identity_abe
[oweals/gnunet.git] / src / multicast / test_multicast.c
index 9e042d61b9229d8f0781e066ef89fbbe2754765f..7e9b51e2395947f6c8a2c9e2caa413e9d524ad0b 100644 (file)
@@ -31,7 +31,6 @@
 #include "gnunet_common.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_testing_lib.h"
-#include "gnunet_core_service.h"
 #include "gnunet_multicast_service.h"
 
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
@@ -48,7 +47,6 @@ static struct GNUNET_SCHEDULER_Task * end_badly_task;
 
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
-struct GNUNET_CORE_Handle *core;
 struct GNUNET_PeerIdentity this_peer;
 
 struct GNUNET_MULTICAST_Origin *origin;
@@ -110,11 +108,6 @@ member_join (int t);
 static void
 cleanup ()
 {
-  if (NULL != core)
-  {
-    GNUNET_CORE_disconnect (core);
-    core = NULL;
-  }
   if (NULL != member)
   {
     GNUNET_MULTICAST_member_part (member, NULL, NULL);
@@ -152,7 +145,7 @@ end_normally (void *cls)
 {
   res = 0;
   cleanup ();
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test PASSED.\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Test PASSED.\n");
 }
 
 
@@ -201,9 +194,11 @@ tmit_notify (void *cls, size_t *data_size, void *data)
 
   uint16_t size = strlen (tmit->data[tmit->n]);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Transmit notify data: %u bytes available, "
-              "processing fragment %u/%u (size %u).\n",
-              *data_size, tmit->n + 1, tmit->data_count, size);
+              "Transmit notify data: %u bytes available, processing fragment %u/%u (size %u).\n",
+              (unsigned int) *data_size,
+              tmit->n + 1,
+              tmit->data_count,
+              size);
   if (*data_size < size)
   {
     *data_size = 0;
@@ -225,7 +220,7 @@ tmit_notify (void *cls, size_t *data_size, void *data)
   tmit->paused = GNUNET_NO;
 
   *data_size = size;
-  memcpy (data, tmit->data[tmit->n], size);
+  GNUNET_memcpy (data, tmit->data[tmit->n], size);
 
   return ++tmit->n < tmit->data_count ? GNUNET_NO : GNUNET_YES;
 }
@@ -237,7 +232,7 @@ member_recv_join_request (void *cls,
                           const struct GNUNET_MessageHeader *join_msg,
                           struct GNUNET_MULTICAST_JoinHandle *jh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_recv_join_request()\n", test);
 }
 
@@ -245,7 +240,7 @@ member_recv_join_request (void *cls,
 static void
 origin_stopped (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_stopped()\n", test);
   end ();
 }
@@ -255,7 +250,7 @@ static void
 schedule_origin_stop (void *cls)
 {
   test = TEST_ORIGIN_STOP;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_stop()\n", test);
   GNUNET_MULTICAST_origin_stop (origin, origin_stopped, NULL);
   origin = NULL;
@@ -265,13 +260,14 @@ schedule_origin_stop (void *cls)
 static void
 member_parted (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_parted()\n", test);
   member = NULL;
 
   switch (test)
   {
   case TEST_MEMBER_JOIN_REFUSE:
+    // Test 3 starts here
     member_join (TEST_MEMBER_JOIN_ADMIT);
     break;
 
@@ -281,7 +277,7 @@ member_parted (void *cls)
 
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in member_recv_join_decision()\n", test);
+                "Invalid test #%d in member_parted()\n", test);
     GNUNET_assert (0);
   }
 }
@@ -290,7 +286,7 @@ member_parted (void *cls)
 static void
 schedule_member_part (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: schedule_member_part()\n", test);
   GNUNET_MULTICAST_member_part (member, member_parted, NULL);
 }
@@ -300,8 +296,9 @@ static void
 member_part ()
 {
   test = TEST_MEMBER_PART;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_part()\n", test);
+  // Test 10 starts here
   GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
 }
 
@@ -309,8 +306,9 @@ member_part ()
 static void
 member_replay_ok ()
 {
+  // Execution of test 8 here
   test = TEST_MEMBER_REPLAY_OK;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_replay_ok()\n", test);
   replay_fragment_id = 1;
   replay_flags = 1 | 1<<11;
@@ -323,7 +321,7 @@ static void
 member_replay_error ()
 {
   test = TEST_MEMBER_REPLAY_ERROR;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_replay_error()\n", test);
   replay_fragment_id = 1234;
   replay_flags = 11 | 1<<11;
@@ -340,7 +338,7 @@ origin_recv_replay_msg (void *cls,
                         uint64_t flags,
                         struct GNUNET_MULTICAST_ReplayHandle *rh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_recv_replay_msg()\n", test);
   GNUNET_assert (0);
 }
@@ -354,7 +352,7 @@ member_recv_replay_msg (void *cls,
                         uint64_t flags,
                         struct GNUNET_MULTICAST_ReplayHandle *rh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_recv_replay_msg()\n", test);
   GNUNET_assert (0);
 }
@@ -367,7 +365,7 @@ origin_recv_replay_frag (void *cls,
                          uint64_t flags,
                          struct GNUNET_MULTICAST_ReplayHandle *rh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_recv_replay_frag()"
               " - fragment_id=%" PRIu64 " flags=%" PRIu64 "\n",
               test, fragment_id, flags);
@@ -375,6 +373,7 @@ origin_recv_replay_frag (void *cls,
   switch (test)
   {
   case TEST_MEMBER_REPLAY_ERROR:
+    // Test 8 starts here
     GNUNET_MULTICAST_replay_response (rh, NULL, GNUNET_SYSERR);
     member_replay_ok ();
     break;
@@ -414,7 +413,7 @@ member_recv_replay_frag (void *cls,
                          uint64_t flags,
                          struct GNUNET_MULTICAST_ReplayHandle *rh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_recv_replay_frag()\n", test);
   GNUNET_assert (0);
 }
@@ -425,7 +424,7 @@ origin_recv_request (void *cls,
                      const struct GNUNET_MULTICAST_RequestHeader *req)
 {
   struct OriginClosure *ocls = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_recv_request()\n", test);
   if (++ocls->n != ocls->msgs_expected)
     return;
@@ -433,9 +432,12 @@ origin_recv_request (void *cls,
   GNUNET_assert (0 == memcmp (&req->member_pub_key,
                               &member_pub_key, sizeof (member_pub_key)));
 
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Test #%u: verify message content, take first 3 bytes: %.3s\n",
+              test, (char *)&req[1]);
+  GNUNET_assert (0 == memcmp (&req[1], "abc", 3));
 
-  // FIXME: check message content
-
+  // Test 7 starts here
   member_replay_error ();
 }
 
@@ -444,7 +446,7 @@ static void
 member_to_origin ()
 {
   test = TEST_MEMBER_TO_ORIGIN;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_to_origin()\n", test);
 
   struct TransmitClosure *tmit = &tmit_cls;
@@ -468,9 +470,13 @@ member_recv_message (void *cls,
                      const struct GNUNET_MULTICAST_MessageHeader *msg)
 {
   struct MemberClosure *mcls = cls;
+
+  // Test 5 starts here after message has been received from origin
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Test #%u: member_recv_message() %u/%u\n",
-              test, mcls->n + 1, mcls->msgs_expected);
+              test,
+              (unsigned int) (mcls->n + 1),
+              mcls->msgs_expected);
   if (++mcls->n != mcls->msgs_expected)
     return;
 
@@ -478,11 +484,17 @@ member_recv_message (void *cls,
 
   switch (test)
   {
+  case TEST_ORIGIN_TO_ALL:
+    test = TEST_ORIGIN_TO_ALL_RECV;
+    break;
+
   case TEST_ORIGIN_TO_ALL_RECV:
+    // Test 6 starts here
     member_to_origin ();
     break;
 
   case TEST_MEMBER_REPLAY_OK:
+    // Test 9 starts here
     GNUNET_assert (replay_fragment_id == GNUNET_ntohll (msg->fragment_id));
     member_part ();
     break;
@@ -500,7 +512,7 @@ origin_recv_message (void *cls,
                      const struct GNUNET_MULTICAST_MessageHeader *msg)
 {
   struct OriginClosure *ocls = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_recv_message() %u/%u\n",
               test, ocls->n + 1, ocls->msgs_expected);
   if (++ocls->n != ocls->msgs_expected)
@@ -511,9 +523,15 @@ origin_recv_message (void *cls,
   switch (test)
   {
   case TEST_ORIGIN_TO_ALL:
+    // Prepare to execute test 5
     test = TEST_ORIGIN_TO_ALL_RECV;
     break;
 
+  case TEST_ORIGIN_TO_ALL_RECV:
+    // Test 6 starts here
+    member_to_origin ();
+    break;
+
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Invalid test #%d in origin_recv_message()\n", test);
@@ -526,7 +544,7 @@ static void
 origin_to_all ()
 {
   test = TEST_ORIGIN_TO_ALL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_to_all()\n", test);
 
   struct TransmitClosure *tmit = &tmit_cls;
@@ -557,7 +575,7 @@ member_recv_join_decision (void *cls,
                            const struct GNUNET_PeerIdentity *relays,
                            const struct GNUNET_MessageHeader *join_msg)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_recv_join_decision() - is_admitted: %d\n",
               test, is_admitted);
 
@@ -569,12 +587,14 @@ member_recv_join_decision (void *cls,
   {
   case TEST_MEMBER_JOIN_REFUSE:
     GNUNET_assert (0 == relay_count);
+    // Test 3 starts here
     GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
     break;
 
   case TEST_MEMBER_JOIN_ADMIT:
     GNUNET_assert (1 == relay_count);
     GNUNET_assert (0 == memcmp (relays, &this_peer, sizeof (this_peer)));
+    // Test 4 starts here
     origin_to_all ();
     break;
 
@@ -585,14 +605,16 @@ member_recv_join_decision (void *cls,
   }
 }
 
-
+/**
+ * Test: origin receives join request
+ */
 static void
 origin_recv_join_request (void *cls,
                           const struct GNUNET_CRYPTO_EcdsaPublicKey *mem_key,
                           const struct GNUNET_MessageHeader *join_msg,
                           struct GNUNET_MULTICAST_JoinHandle *jh)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_recv_join_request()\n", test);
 
   GNUNET_assert (0 == memcmp (mem_key, &member_pub_key, sizeof (member_pub_key)));
@@ -605,15 +627,17 @@ origin_recv_join_request (void *cls,
   join_resp = GNUNET_malloc (sizeof (join_resp) + data_size);
   join_resp->size = htons (sizeof (join_resp) + data_size);
   join_resp->type = htons (456);
-  memcpy (&join_resp[1], data, data_size);
+  GNUNET_memcpy (&join_resp[1], data, data_size);
 
   switch (test)
   {
   case TEST_MEMBER_JOIN_REFUSE:
+    // Test 3 starts here
     GNUNET_MULTICAST_join_decision (jh, GNUNET_NO, 0, NULL, join_resp);
     break;
 
   case TEST_MEMBER_JOIN_ADMIT:
+    // Test 3 is running
     GNUNET_MULTICAST_join_decision (jh, GNUNET_YES, 1, &this_peer, join_resp);
     break;
 
@@ -625,12 +649,14 @@ origin_recv_join_request (void *cls,
   }
 }
 
-
+/**
+ * Test: member joins multicast group
+ */
 static void
 member_join (int t)
 {
   test = t;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: member_join()\n", test);
 
   member_key = GNUNET_CRYPTO_ecdsa_key_create ();
@@ -644,7 +670,7 @@ member_join (int t)
   join_req = GNUNET_malloc (sizeof (join_req) + data_size);
   join_req->size = htons (sizeof (join_req) + data_size);
   join_req->type = htons (123);
-  memcpy (&join_req[1], data, data_size);
+  GNUNET_memcpy (&join_req[1], data, data_size);
 
   member = GNUNET_MULTICAST_member_join (cfg, &group_pub_key, member_key,
                                          &this_peer, 1, &this_peer, join_req,
@@ -656,12 +682,14 @@ member_join (int t)
                                          &member_cls);
 }
 
-
+/**
+ * Test: Start a multicast group as origin
+ */
 static void
 origin_start ()
 {
   test = TEST_ORIGIN_START;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Test #%u: origin_start()\n", test);
 
   group_key = GNUNET_CRYPTO_eddsa_key_create ();
@@ -674,18 +702,11 @@ origin_start ()
                                           origin_recv_request,
                                           origin_recv_message,
                                           &origin_cls);
+  // Test 2 starts here
   member_join (TEST_MEMBER_JOIN_REFUSE);
 }
 
 
-static void
-core_connected (void *cls, const struct GNUNET_PeerIdentity *my_identity)
-{
-  this_peer = *my_identity;
-  origin_start ();
-}
-
-
 /**
  * Main function of the test, run from scheduler.
  *
@@ -708,11 +729,10 @@ run (void *cls,
   cfg = c;
   end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
                                                 &end_badly, NULL);
-  core = GNUNET_CORE_connect (cfg, NULL,
-                             &core_connected, NULL, NULL,
-                              NULL, GNUNET_NO,
-                             NULL, GNUNET_NO,
-                             NULL);
+  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
+
+  // Test 1 starts here
+  origin_start ();
 }