expand GNUNET_OS_ProjectData API to also enable de-duplcation of logic for --help
[oweals/gnunet.git] / src / util / test_disk.c
index 772ca2889a74c634a92a4cc2806262114f3903bc..560b6710eeecd02d456cd8ec1af7e4318bf66ba7 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2005, 2006, 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009 GNUnet e.V.
 
      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.
 */
 
 /**
 */
 
 /**
@@ -24,9 +24,7 @@
  * @author Christian Grothoff
  */
 #include "platform.h"
  * @author Christian Grothoff
  */
 #include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_disk_lib.h"
-#include "gnunet_scheduler_lib.h"
+#include "gnunet_util_lib.h"
 
 #define TESTSTRING "Hello World\0"
 
 
 #define TESTSTRING "Hello World\0"
 
@@ -36,43 +34,42 @@ testReadWrite ()
   char tmp[100 + 1];
   int ret;
 
   char tmp[100 + 1];
   int ret;
 
-  if (GNUNET_OK != GNUNET_DISK_fn_write (".testfile", TESTSTRING, strlen (
-      TESTSTRING), GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE))
+  if (strlen (TESTSTRING) !=
+      GNUNET_DISK_fn_write (".testfile", TESTSTRING, strlen (TESTSTRING),
+                            GNUNET_DISK_PERM_USER_READ |
+                            GNUNET_DISK_PERM_USER_WRITE))
     return 1;
   if (GNUNET_OK != GNUNET_DISK_file_test (".testfile"))
     return 1;
   ret = GNUNET_DISK_fn_read (".testfile", tmp, sizeof (tmp) - 1);
   if (ret < 0)
     return 1;
   if (GNUNET_OK != GNUNET_DISK_file_test (".testfile"))
     return 1;
   ret = GNUNET_DISK_fn_read (".testfile", tmp, sizeof (tmp) - 1);
   if (ret < 0)
-    {
-      fprintf (stderr,
-               "Error reading file `%s' in testReadWrite\n", ".testfile");
-      return 1;
-    }
+  {
+    FPRINTF (stderr, "Error reading file `%s' in testReadWrite\n", ".testfile");
+    return 1;
+  }
   tmp[ret] = '\0';
   if (0 != memcmp (tmp, TESTSTRING, strlen (TESTSTRING) + 1))
   tmp[ret] = '\0';
   if (0 != memcmp (tmp, TESTSTRING, strlen (TESTSTRING) + 1))
-    {
-      fprintf (stderr,
-               "Error in testReadWrite: *%s* != *%s* for file %s\n",
-               tmp, TESTSTRING, ".testfile");
-      return 1;
-    }
+  {
+    FPRINTF (stderr, "Error in testReadWrite: *%s* != *%s* for file %s\n", tmp,
+             TESTSTRING, ".testfile");
+    return 1;
+  }
   GNUNET_DISK_file_copy (".testfile", ".testfile2");
   memset (tmp, 0, sizeof (tmp));
   ret = GNUNET_DISK_fn_read (".testfile2", tmp, sizeof (tmp) - 1);
   if (ret < 0)
   GNUNET_DISK_file_copy (".testfile", ".testfile2");
   memset (tmp, 0, sizeof (tmp));
   ret = GNUNET_DISK_fn_read (".testfile2", tmp, sizeof (tmp) - 1);
   if (ret < 0)
-    {
-      fprintf (stderr,
-               "Error reading file `%s' in testReadWrite\n", ".testfile2");
-      return 1;
-    }
+  {
+    FPRINTF (stderr, "Error reading file `%s' in testReadWrite\n",
+             ".testfile2");
+    return 1;
+  }
   tmp[ret] = '\0';
   if (0 != memcmp (tmp, TESTSTRING, strlen (TESTSTRING) + 1))
   tmp[ret] = '\0';
   if (0 != memcmp (tmp, TESTSTRING, strlen (TESTSTRING) + 1))
-    {
-      fprintf (stderr,
-               "Error in testReadWrite: *%s* != *%s* for file %s\n",
-               tmp, TESTSTRING, ".testfile2");
-      return 1;
-    }
+  {
+    FPRINTF (stderr, "Error in testReadWrite: *%s* != *%s* for file %s\n", tmp,
+             TESTSTRING, ".testfile2");
+    return 1;
+  }
 
   GNUNET_break (0 == UNLINK (".testfile"));
   GNUNET_break (0 == UNLINK (".testfile2"));
 
   GNUNET_break (0 == UNLINK (".testfile"));
   GNUNET_break (0 == UNLINK (".testfile2"));
@@ -86,40 +83,22 @@ static int
 testOpenClose ()
 {
   struct GNUNET_DISK_FileHandle *fh;
 testOpenClose ()
 {
   struct GNUNET_DISK_FileHandle *fh;
-  unsigned long long size;
-  long avail;
+  uint64_t size;
 
 
-  fh = GNUNET_DISK_file_open (".testfile", GNUNET_DISK_OPEN_READWRITE
-      | GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_PERM_USER_READ
-      | GNUNET_DISK_PERM_USER_WRITE);
+  fh = GNUNET_DISK_file_open (".testfile",
+                              GNUNET_DISK_OPEN_READWRITE |
+                              GNUNET_DISK_OPEN_CREATE,
+                              GNUNET_DISK_PERM_USER_READ |
+                              GNUNET_DISK_PERM_USER_WRITE);
   GNUNET_assert (GNUNET_NO == GNUNET_DISK_handle_invalid (fh));
   GNUNET_break (5 == GNUNET_DISK_file_write (fh, "Hello", 5));
   GNUNET_DISK_file_close (fh);
   GNUNET_break (GNUNET_OK ==
   GNUNET_assert (GNUNET_NO == GNUNET_DISK_handle_invalid (fh));
   GNUNET_break (5 == GNUNET_DISK_file_write (fh, "Hello", 5));
   GNUNET_DISK_file_close (fh);
   GNUNET_break (GNUNET_OK ==
-                GNUNET_DISK_file_size (".testfile", &size, GNUNET_NO));
+                GNUNET_DISK_file_size (".testfile", &size, GNUNET_NO, GNUNET_YES));
   if (size != 5)
     return 1;
   GNUNET_break (0 == UNLINK (".testfile"));
 
   if (size != 5)
     return 1;
   GNUNET_break (0 == UNLINK (".testfile"));
 
-  /* test that avail goes down as we fill the disk... */
-  GNUNET_log_skip (1);
-  avail = GNUNET_DISK_get_blocks_available (".testfile");
-  GNUNET_log_skip (0);
-  fh = GNUNET_DISK_file_open (".testfile", GNUNET_DISK_OPEN_READWRITE
-      | GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_PERM_USER_WRITE
-      | GNUNET_DISK_PERM_USER_READ);
-  GNUNET_assert (GNUNET_NO == GNUNET_DISK_handle_invalid (fh));
-  while ((avail == GNUNET_DISK_get_blocks_available (".testfile")) &&
-         (avail != -1))
-    if (16 != GNUNET_DISK_file_write (fh, "HelloWorld123456", 16))
-      {
-        GNUNET_DISK_file_close (fh);
-        GNUNET_break (0 == UNLINK (".testfile"));
-        return 1;
-      }
-  GNUNET_DISK_file_close (fh);
-  GNUNET_break (0 == UNLINK (".testfile"));
-
   return 0;
 }
 
   return 0;
 }
 
@@ -136,11 +115,14 @@ scan_callback (void *want, const char *filename)
 static int
 testDirScan ()
 {
 static int
 testDirScan ()
 {
-  if (GNUNET_OK != GNUNET_DISK_directory_create ("test/entry"))
+  if (GNUNET_OK !=
+      GNUNET_DISK_directory_create ("test" DIR_SEPARATOR_STR "entry"))
     return 1;
     return 1;
-  if (GNUNET_OK != GNUNET_DISK_directory_create ("test/entry_more"))
+  if (GNUNET_OK !=
+      GNUNET_DISK_directory_create ("test" DIR_SEPARATOR_STR "entry_more"))
     return 1;
     return 1;
-  GNUNET_DISK_directory_scan ("test", &scan_callback, "test/entry");
+  GNUNET_DISK_directory_scan ("test", &scan_callback,
+                              "test" DIR_SEPARATOR_STR "entry");
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
     return 1;
   if (ok < 2)
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
     return 1;
   if (ok < 2)
@@ -149,11 +131,11 @@ testDirScan ()
 }
 
 static void
 }
 
 static void
-iter_callback (void *cls,
-               struct GNUNET_DISK_DirectoryIterator *di,
+iter_callback (void *cls, struct GNUNET_DISK_DirectoryIterator *di,
                const char *filename, const char *dirname)
 {
   int *i = cls;
                const char *filename, const char *dirname)
 {
   int *i = cls;
+
   (*i)++;
   GNUNET_DISK_directory_iterator_next (di, GNUNET_NO);
 }
   (*i)++;
   GNUNET_DISK_directory_iterator_next (di, GNUNET_NO);
 }
@@ -161,8 +143,7 @@ iter_callback (void *cls,
 static void
 iter_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
 static void
 iter_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  GNUNET_DISK_directory_iterator_start (tc->sched,
-                                        GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+  GNUNET_DISK_directory_iterator_start (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                         "test", &iter_callback, cls);
 }
 
                                         "test", &iter_callback, cls);
 }
 
@@ -187,35 +168,17 @@ testDirIter ()
 }
 
 
 }
 
 
-static int
-testGetHome ()
-{
-  struct GNUNET_CONFIGURATION_Handle *cfg;
-  char *fn;
-  int ret;
-
-  cfg = GNUNET_CONFIGURATION_create ();
-  GNUNET_assert (cfg != NULL);
-  GNUNET_CONFIGURATION_set_value_string (cfg, "service", "HOME",
-                                         "/tmp/a/b/c");
-  fn = GNUNET_DISK_get_home_filename (cfg, "service", "d", "e", NULL);
-  GNUNET_assert (fn != NULL);
-  GNUNET_CONFIGURATION_destroy (cfg);
-  ret = strcmp ("/tmp/a/b/c/d/e", fn);
-  GNUNET_free (fn);
-  return ret;
-}
-
 static int
 testCanonicalize ()
 {
   char *fn = GNUNET_strdup ("ab?><|cd*ef:/g\"");
 static int
 testCanonicalize ()
 {
   char *fn = GNUNET_strdup ("ab?><|cd*ef:/g\"");
+
   GNUNET_DISK_filename_canonicalize (fn);
   if (0 != strcmp (fn, "ab____cd_ef__g_"))
   GNUNET_DISK_filename_canonicalize (fn);
   if (0 != strcmp (fn, "ab____cd_ef__g_"))
-    {
-      GNUNET_free (fn);
-      return 1;
-    }
+  {
+    GNUNET_free (fn);
+    return 1;
+  }
   GNUNET_free (fn);
   return 0;
 }
   GNUNET_free (fn);
   return 0;
 }
@@ -223,9 +186,11 @@ testCanonicalize ()
 static int
 testChangeOwner ()
 {
 static int
 testChangeOwner ()
 {
-  GNUNET_log_skip (1);
+#ifndef WINDOWS
+  GNUNET_log_skip (1, GNUNET_NO);
   if (GNUNET_OK == GNUNET_DISK_file_change_owner ("/dev/null", "unknownuser"))
     return 1;
   if (GNUNET_OK == GNUNET_DISK_file_change_owner ("/dev/null", "unknownuser"))
     return 1;
+#endif
   return 0;
 }
 
   return 0;
 }
 
@@ -242,7 +207,7 @@ testDirMani ()
     return 1;
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test"))
     return 1;
     return 1;
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test"))
     return 1;
-  if (GNUNET_YES != GNUNET_DISK_directory_test ("test"))
+  if (GNUNET_YES != GNUNET_DISK_directory_test ("test", GNUNET_YES))
     return 1;
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
     return 1;
     return 1;
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
     return 1;
@@ -262,14 +227,13 @@ main (int argc, char *argv[])
   failureCount += testOpenClose ();
   failureCount += testDirScan ();
   failureCount += testDirIter ();
   failureCount += testOpenClose ();
   failureCount += testDirScan ();
   failureCount += testDirIter ();
-  failureCount += testGetHome ();
   failureCount += testCanonicalize ();
   failureCount += testChangeOwner ();
   failureCount += testDirMani ();
   if (failureCount != 0)
   failureCount += testCanonicalize ();
   failureCount += testChangeOwner ();
   failureCount += testDirMani ();
   if (failureCount != 0)
-    {
-      fprintf (stderr, "\n%u TESTS FAILED!\n", failureCount);
-      return -1;
-    }
+  {
+    FPRINTF (stderr, "\n%u TESTS FAILED!\n", failureCount);
+    return -1;
+  }
   return 0;
 }                               /* end of main */
   return 0;
 }                               /* end of main */