(no commit message)
[oweals/gnunet.git] / src / transport / test_plugin_transport_http.c
index 5bbb49084affcd79b2ccf38a1531b24891f7002c..6ac9255129bc2d9738d52bde2d30fa2a9e23a260 100644 (file)
@@ -44,7 +44,7 @@
 
 #define VERBOSE GNUNET_YES
 #define DEBUG GNUNET_NO
-#define DEBUG_CURL GNUNET_YES
+#define DEBUG_CURL GNUNET_NO
 #define HTTP_BUFFER_SIZE 2048
 
 #define PLUGIN libgnunet_plugin_transport_template
@@ -304,6 +304,21 @@ static int fail_addr_to_str;
  */
 static int fail_msgs_transmited_to_local_addrs;
 
+/**
+ * Test: transmit msg of max. size
+ */
+static int fail_msg_transmited_bigger_max_size;
+
+/**
+ * Test: transmit msg of max. size
+ */
+static int fail_msg_transmited_max_size;
+
+/**
+ * Test: transmit 2 msgs. in in send operation
+ */
+static int fail_multiple_msgs_in_transmission;
+
 /**
  * Test: connect to peer without peer identification
  */
@@ -362,12 +377,12 @@ shutdown_clean ()
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test plugin functions failed\n");
     fail = 1;
   }
-  if ((test_no_ident.test_failed == GNUNET_YES) || (test_too_short_ident.test_failed == GNUNET_YES) || (test_too_long_ident.test_failed == GNUNET_YES))
+  if ((test_no_ident.test_failed == GNUNET_YES) || (test_too_short_ident.test_failed == GNUNET_YES) || (test_too_long_ident.test_failed == GNUNET_YES) || (test_valid_ident.test_failed == GNUNET_YES))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test connect with wrong data failed\n");
     fail = 1;
   }
-  if ((test_valid_ident.test_failed == GNUNET_YES) || (fail_msgs_transmited_to_local_addrs != count_str_addr))
+  if ((fail_msgs_transmited_to_local_addrs != count_str_addr) || (fail_msg_transmited_max_size == GNUNET_YES) || (fail_msg_transmited_bigger_max_size == GNUNET_YES) || (fail_multiple_msgs_in_transmission != GNUNET_NO))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test sending with plugin failed\n");
     fail = 1;
@@ -437,23 +452,29 @@ static void task_send_cont (void *cls,
   struct Plugin_Address * tmp_addr;
   tmp_addr = addr_head;
 
-  while (tmp_addr != NULL)
+  if ((cls == &fail_msgs_transmited_to_local_addrs) && (result == GNUNET_OK))
   {
-    if (cls == tmp_addr)
-     if (result == GNUNET_OK) fail_msgs_transmited_to_local_addrs++;
-    tmp_addr = tmp_addr->next;
+    fail_msgs_transmited_to_local_addrs++;
+    if (fail_msgs_transmited_to_local_addrs == count_str_addr)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Message sent to %u addresses!\n",fail_msgs_transmited_to_local_addrs);
+    }
+    return;
   }
 
-  if (fail_msgs_transmited_to_local_addrs == count_str_addr)
+  if ((cls == &fail_msg_transmited_bigger_max_size) && (result == GNUNET_SYSERR))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Message bigger max msg size was not sent!\n");
+    fail_msg_transmited_bigger_max_size = GNUNET_NO;
+    return;
+  }
 
+  if ((cls == &fail_msg_transmited_max_size) && (result == GNUNET_OK))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Message sent to %u addresses!\n",fail_msgs_transmited_to_local_addrs);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Message with max msg size succesfully sent!\n",fail_msgs_transmited_to_local_addrs);
+    fail_msg_transmited_max_size = GNUNET_NO;
     shutdown_clean();
   }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Message was sent!\n");
-  fail = GNUNET_NO;
-  //shutdown_clean();
 }
 
 #if 0
@@ -496,7 +517,11 @@ receive (void *cls,
          const char *sender_address,
          uint16_t sender_address_len)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testcase recieved new message from peer `%s' (`%s') with type %u and length %u\n",  GNUNET_i2s(peer), sender_address, ntohs(message->type), ntohs(message->size));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testcase recieved new message from peer `%s' with type %u and length %u\n",  GNUNET_i2s(peer), ntohs(message->type), ntohs(message->size));
+  if ((ntohs(message->type) == 40) &&   (fail_multiple_msgs_in_transmission == 1))
+    fail_multiple_msgs_in_transmission++;
+  if ((ntohs(message->type) == 41) &&   (fail_multiple_msgs_in_transmission == 2))
+    fail_multiple_msgs_in_transmission = GNUNET_NO;
   return GNUNET_TIME_UNIT_ZERO;
 }
 
@@ -874,7 +899,6 @@ static void pretty_printer_cb (void *cls,
 static void run_connection_tests( )
 {
   char * host_str = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,"Addr: %s\n",test_addr);
   /* resetting buffers */
   buffer_in.size = HTTP_BUFFER_SIZE;
   buffer_in.pos = 0;
@@ -944,15 +968,13 @@ static void run_connection_tests( )
   char * tmp = GNUNET_malloc(sizeof(struct GNUNET_MessageHeader));
   char address[INET6_ADDRSTRLEN];
   unsigned int port;
+  unsigned int type = 10;
 
   msg.size=htons(sizeof(struct GNUNET_MessageHeader));
-  msg.type=htons(13);
-  memcpy(tmp,&msg,sizeof(struct GNUNET_MessageHeader));
-
   tmp_addr = addr_head;
   /* send a message to all addresses advertised by plugin */
-  int count = 0;
 
+  int count = 0;
   while (tmp_addr != NULL)
   {
     if (tmp_addr->addrlen == (sizeof (struct IPv4HttpAddress)))
@@ -972,11 +994,67 @@ static void run_connection_tests( )
         GNUNET_break (0);
         return;
       }
-    api->send(api->cls, &my_identity, tmp, sizeof(struct GNUNET_MessageHeader), 0, TIMEOUT, NULL,tmp_addr->addr, tmp_addr->addrlen, GNUNET_YES, &task_send_cont, tmp_addr);
+    msg.type=htons(type);
+    memcpy(tmp,&msg,sizeof(struct GNUNET_MessageHeader));
+    api->send(api->cls, &my_identity, tmp, sizeof(struct GNUNET_MessageHeader), 0, TIMEOUT, NULL,tmp_addr->addr, tmp_addr->addrlen, GNUNET_YES, &task_send_cont, &fail_msgs_transmited_to_local_addrs);
     tmp_addr = tmp_addr->next;
     count ++;
+    type ++;
   }
 
+  /* send a multiple GNUNET_messages at a time*/
+  GNUNET_free(tmp);
+  tmp = GNUNET_malloc(4 * sizeof(struct GNUNET_MessageHeader));
+  struct GNUNET_MessageHeader * msg1 = (struct GNUNET_MessageHeader *) tmp;
+  msg1->size = htons(2 * sizeof(struct GNUNET_MessageHeader));
+  msg1->type = htons(40);
+  struct GNUNET_MessageHeader * msg2 = &msg1[2];
+  msg2->size = htons(2 * sizeof(struct GNUNET_MessageHeader));
+  msg2->type = htons(41);
+  api->send(api->cls, &my_identity, tmp, 4 * sizeof(struct GNUNET_MessageHeader), 0, TIMEOUT, NULL,addr_head->addr, addr_head->addrlen, GNUNET_YES, &task_send_cont, &fail_multiple_msgs_in_transmission);
+
+
+  /* send a multiple GNUNET_messages at a time, second message has incorrect size*/
+  GNUNET_free(tmp);
+  tmp = GNUNET_malloc(4 * sizeof(struct GNUNET_MessageHeader));
+  msg1 = (struct GNUNET_MessageHeader *) tmp;
+  msg1->size = htons(2 * sizeof(struct GNUNET_MessageHeader));
+  msg1->type = htons(40);
+  msg2 = &msg1[2];
+  msg2->size = htons(3 * sizeof(struct GNUNET_MessageHeader));
+  msg2->type = htons(41);
+  api->send(api->cls, &my_identity, tmp, 4 * sizeof(struct GNUNET_MessageHeader), 0, TIMEOUT, NULL,addr_head->addr, addr_head->addrlen, GNUNET_YES, &task_send_cont, NULL);
+
+
+  /* send a multiple GNUNET_messages at a time, second message has incorrect size*/
+/*  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Ping Hello Message\n");
+  GNUNET_free(tmp);
+  tmp = GNUNET_malloc(425);
+  msg1 = (struct GNUNET_MessageHeader *) tmp;
+  msg1->size = htons(353);
+  msg1->type = htons(16);
+  msg2 = &tmp[353];
+  msg2->size = htons(72);
+  msg2->type = htons(32);
+  api->send(api->cls, &my_identity, tmp, 425, 0, TIMEOUT, NULL,addr_head->addr, addr_head->addrlen, GNUNET_YES, &task_send_cont, NULL);*/
+
+
+  /* send a message with size GNUNET_SERVER_MAX_MESSAGE_SIZE )*/
+  GNUNET_free(tmp);
+  tmp = GNUNET_malloc(GNUNET_SERVER_MAX_MESSAGE_SIZE);
+  uint16_t t2 = (uint16_t)GNUNET_SERVER_MAX_MESSAGE_SIZE;
+  msg.size = htons(t2);
+  memcpy(tmp,&msg,sizeof(struct GNUNET_MessageHeader));
+  api->send(api->cls, &my_identity, tmp, GNUNET_SERVER_MAX_MESSAGE_SIZE, 0, TIMEOUT, NULL,addr_head->addr, addr_head->addrlen, GNUNET_YES, &task_send_cont, &fail_msg_transmited_bigger_max_size);
+
+  /* send a message with size GNUNET_SERVER_MAX_MESSAGE_SIZE-1  */
+  GNUNET_free(tmp);
+  tmp = GNUNET_malloc(GNUNET_SERVER_MAX_MESSAGE_SIZE-1);
+  uint16_t t = (uint16_t)GNUNET_SERVER_MAX_MESSAGE_SIZE-1;
+  msg.size = htons(t);
+  memcpy(tmp,&msg,sizeof(struct GNUNET_MessageHeader));
+  api->send(api->cls, &my_identity, tmp, GNUNET_SERVER_MAX_MESSAGE_SIZE-1, 0, TIMEOUT, NULL,addr_head->addr, addr_head->addrlen, GNUNET_YES, &task_send_cont, &fail_msg_transmited_max_size);
+  GNUNET_free(tmp);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No more tests to run\n");
 }
 
@@ -1009,6 +1087,8 @@ run (void *cls,
   fail_notify_address = GNUNET_YES;
   fail_addr_to_str = GNUNET_YES;
   fail_msgs_transmited_to_local_addrs = 0;
+  fail_msg_transmited_max_size = GNUNET_YES;
+  fail_multiple_msgs_in_transmission = GNUNET_YES;
 
   addr_head = NULL;
   count_str_addr = 0;