Returns now GNUNET_SYSERR
[oweals/gnunet.git] / src / util / test_configuration.c
index 637c8ed00094cbd52d3982a2c95e69565e657359..429e03178b2ac45492f0314b5bb7d2656c7756a8 100644 (file)
@@ -4,7 +4,7 @@
 
      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
 #include "platform.h"
 #include "gnunet_common.h"
 #include "gnunet_configuration_lib.h"
+#include "gnunet_disk_lib.h"
 
-/* Directives used for testing Configuration Diffs */
 #define DEBUG GNUNET_NO
-#define CONFIGURATION_DIFFS_PATH "/tmp/gnunet-diff.conf"
-#define EDIT_NOTHING 0
-#define EDIT_SECTION 1
-#define EDIT_ALL 2
-#define ADD_NEW_SECTION 3
-#define ADD_NEW_ENTRY 4
-#define REMOVE_SECTION 5
-#define REMOVE_ENTRY 6
-#define COMPARE 7
 
+/* Test Configuration Diffs Options */
+enum
+{
+  EDIT_NOTHING,
+  EDIT_SECTION,
+  EDIT_ALL,
+  ADD_NEW_SECTION,
+  ADD_NEW_ENTRY,
+  REMOVE_SECTION,
+  REMOVE_ENTRY,
+  COMPARE
 #if DEBUG
-#define PRINT 8
+    , PRINT
 #endif
+};
 
 static struct GNUNET_CONFIGURATION_Handle *cfg;
 static struct GNUNET_CONFIGURATION_Handle *cfgDefault;
@@ -81,7 +84,7 @@ diffsCallBack (void *cls,
   switch (cbOption)
     {
     case EDIT_SECTION:
-      if (cbData->section == NULL)
+      if (NULL == cbData->section)
        cbData->section = section;
       if (strcmp (cbData->section, section) == 0)
        {
@@ -114,22 +117,34 @@ diffsCallBack (void *cls,
       {
        int ret;
        char *diffValue;
+
+       diffValue = NULL;
        ret =
          GNUNET_CONFIGURATION_get_value_string (cbData->cfgDiffs, section,
                                                 option, &diffValue);
-       if (ret == GNUNET_SYSERR || diffValue == NULL
-           || strcmp (diffValue, value) != 0)
+       if (NULL != diffValue)
+         {
+           if (ret == GNUNET_SYSERR || strcmp (diffValue, value) != 0)
+             cbData->status = 1;
+         }
+       else
          cbData->status = 1;
+       GNUNET_free_non_null (diffValue);
        break;
       }
 #if DEBUG
     case PRINT:
-      if (cbData->section == NULL || strcmp (cbData->section, section) != 0)
+      if (NULL == cbData->section)
        {
          cbData->section = section;
          printf ("\nSection: %s\n", section);
        }
-      printf ("%s = %s\n", option, value);
+      else if (strcmp (cbData->section, section) != 0)
+       {
+         cbData->section = section;
+         printf ("\nSection: %s\n", section);
+       }
+      printf ("%s = %s\n", option, abs_value);
 #endif
     default:
       break;
@@ -158,9 +173,9 @@ editConfiguration (struct GNUNET_CONFIGURATION_Handle *cfg, int option)
       break;
     case ADD_NEW_SECTION:
       {
-       int i = 0;
+       int i;
        char *key;
-       for (; i < 5; i++)
+       for (i = 0; i < 5; i++)
          {
            GNUNET_asprintf (&key, "key%d", i);
            GNUNET_CONFIGURATION_set_value_string (cfg, "new-section", key,
@@ -168,6 +183,7 @@ editConfiguration (struct GNUNET_CONFIGURATION_Handle *cfg, int option)
            GNUNET_CONFIGURATION_set_value_string (diffsCB.cfgDiffs,
                                                   "new-section", key,
                                                   "new-value");
+           GNUNET_free (key);
          }
        break;
       }
@@ -188,27 +204,40 @@ editConfiguration (struct GNUNET_CONFIGURATION_Handle *cfg, int option)
 static int
 checkDiffs (struct GNUNET_CONFIGURATION_Handle *cfgDefault, int option)
 {
-  struct GNUNET_CONFIGURATION_Handle *cfg, *cfgDiffs;
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  struct GNUNET_CONFIGURATION_Handle *cfgDiffs;
   struct DiffsCBData cbData;
+  int ret;
+  char *diffsFileName;
+
   initDiffsCBData (&cbData);
-  int ret = 0;
 
   cfg = GNUNET_CONFIGURATION_create ();
-  GNUNET_CONFIGURATION_load (cfg, NULL);
+  /* load defaults */
+  GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (cfg, NULL));
 
   /* Modify configuration and save it */
   cfgDiffs = editConfiguration (cfg, option);
-  GNUNET_CONFIGURATION_write_diffs (cfgDefault, cfg,
-                                   CONFIGURATION_DIFFS_PATH);
+  diffsFileName =
+    GNUNET_DISK_mktemp ("gnunet-test-configurations-diffs.conf");
+  if (diffsFileName == NULL)
+    {
+      GNUNET_break (0);
+      GNUNET_CONFIGURATION_destroy (cfg);
+      GNUNET_CONFIGURATION_destroy (cfgDiffs);      
+      return 1;
+    }
+  GNUNET_CONFIGURATION_write_diffs (cfgDefault, cfg, diffsFileName);
   GNUNET_CONFIGURATION_destroy (cfg);
 
   /* Compare the dumped configuration with modifications done */
   cfg = GNUNET_CONFIGURATION_create ();
-  GNUNET_CONFIGURATION_parse (cfg, CONFIGURATION_DIFFS_PATH);
+  GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, diffsFileName));
+  remove (diffsFileName);
   cbData.callBackOption = COMPARE;
   cbData.cfgDiffs = cfgDiffs;
   GNUNET_CONFIGURATION_iterate (cfg, diffsCallBack, &cbData);
-  if ((ret = cbData.status) == 1)
+  if (1 == (ret = cbData.status))
     {
       fprintf (stderr,
               "Incorrect Configuration Diffs: Diffs may contain data not actually edited\n");
@@ -232,6 +261,7 @@ housekeeping:
 #endif
   GNUNET_CONFIGURATION_destroy (cfg);
   GNUNET_CONFIGURATION_destroy (cfgDiffs);
+  GNUNET_free (diffsFileName);
   return ret;
 }
 
@@ -254,26 +284,42 @@ testConfig ()
   GNUNET_free (c);
   if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg,
                                                          "test", "five", &l))
-    return 3;
+    {
+      GNUNET_break (0);
+      return 3;
+    }
   if (5 != l)
-    return 4;
+    {
+      GNUNET_break (0);
+      return 4;
+    }
   GNUNET_CONFIGURATION_set_value_string (cfg, "more", "c", "YES");
   if (GNUNET_NO == GNUNET_CONFIGURATION_get_value_yesno (cfg, "more", "c"))
-    return 5;
+    {
+      GNUNET_break (0);
+      return 5;
+    }
   GNUNET_CONFIGURATION_set_value_number (cfg, "NUMBERS", "TEN", 10);
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_string (cfg, "NUMBERS", "TEN", &c))
-    return 6;
+    {
+      GNUNET_break (0);
+      return 6;
+    }
   if (0 != strcmp (c, "10"))
     {
       GNUNET_free (c);
+      GNUNET_break (0);
       return 7;
     }
   GNUNET_free (c);
 
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_filename (cfg, "last", "test", &c))
-    return 8;
+    {
+      GNUNET_break (0);
+      return 8;
+    }
 #ifndef MINGW
   if (0 != strcmp (c, "/hello/world"))
 #else
@@ -281,6 +327,7 @@ testConfig ()
   if (strstr (c, HI) != c + strlen (c) - strlen (HI))
 #endif
     {
+      GNUNET_break (0);
       GNUNET_free (c);
       return 9;
     }
@@ -307,6 +354,7 @@ check (void *data, const char *fn)
       (*idx)++;
       return GNUNET_OK;
     }
+  GNUNET_break (0);
   return GNUNET_SYSERR;
 }
 
@@ -320,48 +368,72 @@ testConfigFilenames ()
                                                         "FILENAMES",
                                                         "test",
                                                         &check, &idx))
-    return 8;
+    {
+      GNUNET_break (0);
+      return 8;
+    }
   if (idx != 3)
     return 16;
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_remove_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/File Name"))
-    return 24;
+    {
+      GNUNET_break (0);
+      return 24;
+    }
 
   if (GNUNET_NO !=
       GNUNET_CONFIGURATION_remove_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/File Name"))
-    return 32;
+    {
+      GNUNET_break (0);
+      return 32;
+    }
   if (GNUNET_NO !=
       GNUNET_CONFIGURATION_remove_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "Stuff"))
-    return 40;
+    {
+      GNUNET_break (0);
+      return 40;
+    }
 
   if (GNUNET_NO !=
       GNUNET_CONFIGURATION_append_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/Hello"))
-    return 48;
+    {
+      GNUNET_break (0);
+      return 48;
+    }
   if (GNUNET_NO !=
       GNUNET_CONFIGURATION_append_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/World"))
-    return 56;
+    {
+      GNUNET_break (0);
+      return 56;
+    }
 
   if (GNUNET_YES !=
       GNUNET_CONFIGURATION_append_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/File 1"))
-    return 64;
+    {
+      GNUNET_break (0);
+      return 64;
+    }
 
   if (GNUNET_YES !=
       GNUNET_CONFIGURATION_append_value_filename (cfg,
                                                  "FILENAMES",
                                                  "test", "/File 2"))
-    return 72;
+    {
+      GNUNET_break (0);
+      return 72;
+    }
 
   idx = 0;
   want[1] = "/World";
@@ -371,9 +443,15 @@ testConfigFilenames ()
                                                         "FILENAMES",
                                                         "test",
                                                         &check, &idx))
-    return 80;
+    {
+      GNUNET_break (0);
+      return 80;
+    }
   if (idx != 4)
-    return 88;
+    {
+      GNUNET_break (0);
+      return 88;
+    }
   return 0;
 }
 
@@ -414,31 +492,32 @@ main (int argc, char *argv[])
       GNUNET_CONFIGURATION_destroy (cfg);
       return 1;
     }
-  if ((GNUNET_OK !=
-       GNUNET_CONFIGURATION_get_value_string (cfg, "TESTING", "WEAKRANDOM",
-                                             &c))
-      || (0 != strcmp (c, "YES")))
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_string (cfg, "TESTING", "WEAKRANDOM",
+                                            &c))
     {
+      GNUNET_break (0);
       GNUNET_CONFIGURATION_destroy (cfg);
       return 1;
     }
-  GNUNET_free (c);
-  if ((GNUNET_OK !=
-       GNUNET_CONFIGURATION_get_value_string (cfg, "PATHS", "SERVICEHOME",
-                                             &c))
-      || (0 != strcmp (c, "/var/lib/gnunet/")))
+  if (0 != strcmp (c, "YES"))
     {
+      GNUNET_break (0);
+      GNUNET_free (c);
       GNUNET_CONFIGURATION_destroy (cfg);
       return 1;
     }
+
   GNUNET_free (c);
   GNUNET_CONFIGURATION_destroy (cfg);
 
   /* Testing configuration diffs */
   cfgDefault = GNUNET_CONFIGURATION_create ();
-  if (GNUNET_CONFIGURATION_load (cfgDefault, NULL) == GNUNET_SYSERR)
+  if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfgDefault, NULL))
     {
-      printf ("\n Error! \n");
+      GNUNET_break (0);
+      GNUNET_CONFIGURATION_destroy (cfgDefault);
+      return 1;
     }
 
   /* Nothing changed in the new configuration */