Fixed one serious bug, working on another. Still very broken.
[oweals/gnunet.git] / src / util / test_bio.c
index 9ff9a51766465bf8b6c65d05f1c7540c1218356b..7ae0af6433ac6a4f2d9f1a4b884f9fdf14a38376 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
 */
 
 /**
@@ -28,7 +28,7 @@
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #define TESTSTRING "testString"
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #define TESTSTRING "testString"
-#define TESTNUMBER64 100000L
+#define TESTNUMBER64 ((int64_t)100000L)
 
 static int
 test_normal_rw ()
 
 static int
 test_normal_rw ()
@@ -41,29 +41,32 @@ test_normal_rw ()
   struct GNUNET_BIO_ReadHandle *fileR;
   struct GNUNET_CONTAINER_MetaData *metaDataW;
   struct GNUNET_CONTAINER_MetaData *metaDataR;
   struct GNUNET_BIO_ReadHandle *fileR;
   struct GNUNET_CONTAINER_MetaData *metaDataW;
   struct GNUNET_CONTAINER_MetaData *metaDataR;
+
   metaDataW = GNUNET_CONTAINER_meta_data_create ();
   metaDataW = GNUNET_CONTAINER_meta_data_create ();
-  metaDataR = GNUNET_CONTAINER_meta_data_create ();
+  metaDataR = NULL;
   GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
   GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_BIO_write_int64 (fileW, (int64_t) TESTNUMBER64));
+  GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, TESTNUMBER64));
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  readResultString = NULL;
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
+  GNUNET_assert (NULL != readResultString);
+  GNUNET_assert (0 == strcmp (TESTSTRING, readResultString));
+  GNUNET_free (readResultString);
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_YES ==
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_YES ==
-                 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
-                                                        metaDataW));
+                 GNUNET_CONTAINER_meta_data_test_equal (metaDataR, metaDataW));
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_CONTAINER_meta_data_destroy (metaDataW);
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_CONTAINER_meta_data_destroy (metaDataW);
@@ -116,9 +119,11 @@ test_emptystring_rw ()
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  readResultString = NULL;
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
+  GNUNET_free (readResultString);
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
@@ -141,10 +146,14 @@ test_bigstring_rw ()
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  readResultString = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 1));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 1));
+  GNUNET_assert (NULL == readResultString);
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
+  GNUNET_free (msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
   return 0;
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
   return 0;
@@ -155,104 +164,126 @@ test_bigmeta_rw ()
 {
   char *msg;
   static char meta[1024 * 1024 * 10];
 {
   char *msg;
   static char meta[1024 * 1024 * 10];
-  memset (meta, 'b', sizeof (meta));
-  meta[sizeof (meta) - 1] = '\0';
   struct GNUNET_BIO_WriteHandle *fileW;
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
   struct GNUNET_BIO_WriteHandle *fileW;
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
-  struct GNUNET_CONTAINER_MetaData *metaDataW;
   struct GNUNET_CONTAINER_MetaData *metaDataR;
   struct GNUNET_CONTAINER_MetaData *metaDataR;
-  metaDataW = GNUNET_CONTAINER_meta_data_create ();
-  metaDataR = GNUNET_CONTAINER_meta_data_create ();
-  GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CONTAINER_meta_data_insert (metaDataW,
-                                                    EXTRACTOR_COMMENT, meta));
 
 
+  memset (meta, 'b', sizeof (meta));
+  meta[sizeof (meta) - 1] = '\0';
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
-  GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
+  GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, sizeof (meta)));
+  GNUNET_assert (GNUNET_OK == GNUNET_BIO_write (fileW, meta, sizeof (meta)));
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
   GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  metaDataR = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
-
+  GNUNET_free (msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
-  GNUNET_CONTAINER_meta_data_destroy (metaDataR);
-  GNUNET_CONTAINER_meta_data_destroy (metaDataW);
+  GNUNET_assert (NULL == metaDataR);
   GNUNET_free (fileName);
   return 0;
 }
 
 static int
   GNUNET_free (fileName);
   return 0;
 }
 
 static int
-test_directory_r(){
+test_directory_r ()
+{
+#if LINUX
   char *msg;
   char readResult[200];
   struct GNUNET_BIO_ReadHandle *fileR;
 
   fileR = GNUNET_BIO_read_open ("/dev");
   GNUNET_assert (NULL != fileR);
   char *msg;
   char readResult[200];
   struct GNUNET_BIO_ReadHandle *fileR;
 
   fileR = GNUNET_BIO_read_open ("/dev");
   GNUNET_assert (NULL != fileR);
-  GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
+  GNUNET_assert (GNUNET_SYSERR ==
+                 GNUNET_BIO_read (fileR, "Read error", readResult,
+                                  sizeof (readResult)));
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
+  GNUNET_free (msg);
+#endif
   return 0;
 }
 
 static int
 test_nullfile_rw ()
 {
   return 0;
 }
 
 static int
 test_nullfile_rw ()
 {
-  char *msg;
-  int64_t testNum;
-  char *readResultString;
   static char fileNameNO[102401];
   static char fileNameNO[102401];
-  char readResult[200];
+  struct GNUNET_BIO_WriteHandle *fileWNO;
+  struct GNUNET_BIO_ReadHandle *fileRNO;
+
   memset (fileNameNO, 'a', sizeof (fileNameNO));
   fileNameNO[sizeof (fileNameNO) - 1] = '\0';
   memset (fileNameNO, 'a', sizeof (fileNameNO));
   fileNameNO[sizeof (fileNameNO) - 1] = '\0';
-  struct GNUNET_BIO_WriteHandle *fileW, *fileWNO;
-  struct GNUNET_BIO_ReadHandle *fileR, *fileRNO;
-  struct GNUNET_CONTAINER_MetaData *metaDataW;
-  struct GNUNET_CONTAINER_MetaData *metaDataR;
-  metaDataW = GNUNET_CONTAINER_meta_data_create ();
-  metaDataR = GNUNET_CONTAINER_meta_data_create ();
-  GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
 
 
+  GNUNET_log_skip (1, GNUNET_NO);
   fileWNO = GNUNET_BIO_write_open (fileNameNO);
   fileWNO = GNUNET_BIO_write_open (fileNameNO);
+  GNUNET_log_skip (0, GNUNET_YES);
   GNUNET_assert (NULL == fileWNO);
 
   GNUNET_assert (NULL == fileWNO);
 
+  GNUNET_log_skip (1, GNUNET_NO);
   fileRNO = GNUNET_BIO_read_open (fileNameNO);
   fileRNO = GNUNET_BIO_read_open (fileNameNO);
+  GNUNET_log_skip (0, GNUNET_YES);
   GNUNET_assert (NULL == fileRNO);
   GNUNET_assert (NULL == fileRNO);
+  return 0;
+}
+
+
+static int
+test_fullfile_rw ()
+{
+#ifdef LINUX
+  /* /dev/full only seems to exist on Linux */
+  char *msg;
+  int64_t testNum;
+  char *readResultString;
+  char readResult[200];
+  struct GNUNET_BIO_WriteHandle *fileW;
+  struct GNUNET_BIO_ReadHandle *fileR;
+  struct GNUNET_CONTAINER_MetaData *metaDataW;
+  struct GNUNET_CONTAINER_MetaData *metaDataR;
+
+  metaDataW = GNUNET_CONTAINER_meta_data_create ();
+  GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
 
   fileW = GNUNET_BIO_write_open ("/dev/full");
   GNUNET_assert (NULL != fileW);
 
   fileW = GNUNET_BIO_write_open ("/dev/full");
   GNUNET_assert (NULL != fileW);
-  GNUNET_assert (GNUNET_SYSERR ==
-                 GNUNET_BIO_write (fileW, TESTSTRING, 65537));
-  GNUNET_assert (GNUNET_SYSERR ==
-                 GNUNET_BIO_write_string (fileW, TESTSTRING));
-  GNUNET_assert (GNUNET_SYSERR ==
-                 GNUNET_BIO_write_meta_data (fileW, metaDataW));
+  (void) GNUNET_BIO_write (fileW, TESTSTRING, strlen (TESTSTRING));
+  (void) GNUNET_BIO_write_string (fileW, TESTSTRING);
+  (void) GNUNET_BIO_write_meta_data (fileW, metaDataW);
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
+  GNUNET_CONTAINER_meta_data_destroy (metaDataW);
 
 
-  fileW = GNUNET_BIO_write_open (fileName);
+  fileW = GNUNET_BIO_write_open ("/dev/full");
   GNUNET_assert (NULL != fileW);
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open ("/dev/null");
   GNUNET_assert (NULL != fileR);
   GNUNET_assert (GNUNET_SYSERR ==
   GNUNET_assert (NULL != fileW);
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
 
   fileR = GNUNET_BIO_read_open ("/dev/null");
   GNUNET_assert (NULL != fileR);
   GNUNET_assert (GNUNET_SYSERR ==
-                 GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
+                 GNUNET_BIO_read (fileR, "Read error", readResult,
+                                  sizeof (readResult)));
+  readResultString = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResultString, 200));
+  GNUNET_assert (NULL == readResultString);
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
   GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
+  metaDataR = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
-  GNUNET_CONTAINER_meta_data_destroy (metaDataR);
-  GNUNET_CONTAINER_meta_data_destroy (metaDataW);
+  GNUNET_free (msg);
+  GNUNET_assert (NULL == metaDataR);
+#endif
   return 0;
 }
 
   return 0;
 }
 
@@ -276,7 +307,9 @@ test_fakestring_rw ()
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResult, 200));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_string (fileR, "Read string error",
                                          &readResult, 200));
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
+  GNUNET_free (msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
   return 0;
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_free (fileName);
   return 0;
@@ -291,7 +324,6 @@ test_fakemeta_rw ()
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
   struct GNUNET_CONTAINER_MetaData *metaDataR;
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
   struct GNUNET_CONTAINER_MetaData *metaDataR;
-  metaDataR = GNUNET_CONTAINER_meta_data_create ();
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
@@ -300,12 +332,15 @@ test_fakemeta_rw ()
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  metaDataR = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
+  GNUNET_assert (NULL == metaDataR);
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
+  GNUNET_free (msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
-  GNUNET_CONTAINER_meta_data_destroy (metaDataR);
   GNUNET_free (fileName);
   return 0;
 }
   GNUNET_free (fileName);
   return 0;
 }
@@ -319,7 +354,6 @@ test_fakebigmeta_rw ()
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
   struct GNUNET_CONTAINER_MetaData *metaDataR;
   struct GNUNET_BIO_ReadHandle *fileR;
   char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
   struct GNUNET_CONTAINER_MetaData *metaDataR;
-  metaDataR = GNUNET_CONTAINER_meta_data_create ();
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
 
   fileW = GNUNET_BIO_write_open (fileName);
   GNUNET_assert (NULL != fileW);
@@ -328,12 +362,15 @@ test_fakebigmeta_rw ()
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
 
   fileR = GNUNET_BIO_read_open (fileName);
   GNUNET_assert (NULL != fileR);
+  metaDataR = NULL;
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
   GNUNET_assert (GNUNET_SYSERR ==
                  GNUNET_BIO_read_meta_data (fileR, "Read meta error",
                                             &metaDataR));
+  msg = NULL;
   GNUNET_BIO_read_close (fileR, &msg);
   GNUNET_BIO_read_close (fileR, &msg);
+  GNUNET_free (msg);
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
   GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
-  GNUNET_CONTAINER_meta_data_destroy (metaDataR);
+  GNUNET_assert (NULL == metaDataR);
   GNUNET_free (fileName);
   return 0;
 }
   GNUNET_free (fileName);
   return 0;
 }
@@ -362,14 +399,19 @@ check_file_rw ()
 {
   GNUNET_assert (0 == test_normal_rw ());
   GNUNET_assert (0 == test_nullfile_rw ());
 {
   GNUNET_assert (0 == test_normal_rw ());
   GNUNET_assert (0 == test_nullfile_rw ());
-  GNUNET_assert (0 == test_directory_r());
+  GNUNET_assert (0 == test_fullfile_rw ());
+  GNUNET_assert (0 == test_directory_r ());
   return 0;
 }
 
 int
   return 0;
 }
 
 int
-main (int argc, char *argv[]){
-    GNUNET_assert (0 == check_file_rw());
-    GNUNET_assert (0 == check_metadata_rw());
-    GNUNET_assert (0 == check_string_rw());
-    return 0;
-}                               /* end of main */
+main (int argc, char *argv[])
+{
+  GNUNET_log_setup ("test-bio", "WARNING", NULL);
+  GNUNET_assert (0 == check_file_rw ());
+  GNUNET_assert (0 == check_metadata_rw ());
+  GNUNET_assert (0 == check_string_rw ());
+  return 0;
+}
+
+/* end of test_bio.c */