X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_configuration.c;h=1242a5c8d5b70321fd83d304862819655bd7f5d5;hb=f501080b97356351732aee8302de888e89a1b502;hp=637c8ed00094cbd52d3982a2c95e69565e657359;hpb=2387be3a722b64e2594d6300eb3882ed6b1ebf8c;p=oweals%2Fgnunet.git diff --git a/src/util/test_configuration.c b/src/util/test_configuration.c index 637c8ed00..1242a5c8d 100644 --- a/src/util/test_configuration.c +++ b/src/util/test_configuration.c @@ -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 @@ -26,22 +26,22 @@ #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 - -#if DEBUG -#define PRINT 8 -#endif + +/* Test Configuration Diffs Options */ +enum +{ + EDIT_NOTHING, + EDIT_SECTION, + EDIT_ALL, + ADD_NEW_SECTION, + ADD_NEW_ENTRY, + REMOVE_SECTION, + REMOVE_ENTRY, + COMPARE, + PRINT +}; static struct GNUNET_CONFIGURATION_Handle *cfg; static struct GNUNET_CONFIGURATION_Handle *cfgDefault; @@ -72,68 +72,81 @@ initDiffsCBData (struct DiffsCBData *cbData) * and comparing configuration */ static void -diffsCallBack (void *cls, - const char *section, const char *option, const char *value) +diffsCallBack (void *cls, const char *section, const char *option, + const char *value) { struct DiffsCBData *cbData = cls; int cbOption = cbData->callBackOption; switch (cbOption) + { + case EDIT_SECTION: + if (NULL == cbData->section) + cbData->section = section; + if (strcmp (cbData->section, section) == 0) { - case EDIT_SECTION: - if (cbData->section == NULL) - cbData->section = section; - if (strcmp (cbData->section, section) == 0) - { - GNUNET_CONFIGURATION_set_value_string (cbData->cfg, section, option, - "new-value"); - GNUNET_CONFIGURATION_set_value_string (cbData->cfgDiffs, section, - option, "new-value"); - } - break; - case EDIT_ALL: GNUNET_CONFIGURATION_set_value_string (cbData->cfg, section, option, - "new-value"); + "new-value"); + GNUNET_CONFIGURATION_set_value_string (cbData->cfgDiffs, section, option, + "new-value"); + } + break; + case EDIT_ALL: + GNUNET_CONFIGURATION_set_value_string (cbData->cfg, section, option, + "new-value"); + GNUNET_CONFIGURATION_set_value_string (cbData->cfgDiffs, section, option, + "new-value"); + break; + case ADD_NEW_ENTRY: + { + static int hit = 0; + + if (hit == 0) + { + hit = 1; + GNUNET_CONFIGURATION_set_value_string (cbData->cfg, section, "new-key", + "new-value"); GNUNET_CONFIGURATION_set_value_string (cbData->cfgDiffs, section, - option, "new-value"); - break; - case ADD_NEW_ENTRY: - { - static int hit = 0; - if (hit == 0) - { - hit = 1; - GNUNET_CONFIGURATION_set_value_string (cbData->cfg, section, - "new-key", "new-value"); - GNUNET_CONFIGURATION_set_value_string (cbData->cfgDiffs, section, - "new-key", "new-value"); - } - break; - } - case COMPARE: - { - int ret; - char *diffValue; - ret = - GNUNET_CONFIGURATION_get_value_string (cbData->cfgDiffs, section, - option, &diffValue); - if (ret == GNUNET_SYSERR || diffValue == NULL - || strcmp (diffValue, value) != 0) - cbData->status = 1; - break; - } -#if DEBUG - case PRINT: - if (cbData->section == NULL || strcmp (cbData->section, section) != 0) - { - cbData->section = section; - printf ("\nSection: %s\n", section); - } - printf ("%s = %s\n", option, value); -#endif - default: - break; + "new-key", "new-value"); } + break; + } + case COMPARE: + { + int ret; + char *diffValue; + + diffValue = NULL; + ret = + GNUNET_CONFIGURATION_get_value_string (cbData->cfgDiffs, section, + option, &diffValue); + 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 0 + case PRINT: + if (NULL == cbData->section) + { + cbData->section = section; + printf ("\nSection: %s\n", section); + } + else if (strcmp (cbData->section, section) != 0) + { + cbData->section = section; + printf ("\nSection: %s\n", section); + } + printf ("%s = %s\n", option, value); +#endif + default: + break; + } } @@ -141,43 +154,45 @@ static struct GNUNET_CONFIGURATION_Handle * editConfiguration (struct GNUNET_CONFIGURATION_Handle *cfg, int option) { struct DiffsCBData diffsCB; + initDiffsCBData (&diffsCB); diffsCB.cfgDiffs = GNUNET_CONFIGURATION_create (); switch (option) + { + case EDIT_SECTION: + case EDIT_ALL: + case ADD_NEW_ENTRY: + diffsCB.callBackOption = option; + diffsCB.cfg = cfg; + GNUNET_CONFIGURATION_iterate (cfg, diffsCallBack, &diffsCB); + break; + case EDIT_NOTHING: + /* Do nothing */ + break; + case ADD_NEW_SECTION: + { + int i; + char *key; + + for (i = 0; i < 5; i++) { - case EDIT_SECTION: - case EDIT_ALL: - case ADD_NEW_ENTRY: - diffsCB.callBackOption = option; - diffsCB.cfg = cfg; - GNUNET_CONFIGURATION_iterate (cfg, diffsCallBack, &diffsCB); - break; - case EDIT_NOTHING: - /* Do nothing */ - break; - case ADD_NEW_SECTION: - { - int i = 0; - char *key; - for (; i < 5; i++) - { - GNUNET_asprintf (&key, "key%d", i); - GNUNET_CONFIGURATION_set_value_string (cfg, "new-section", key, - "new-value"); - GNUNET_CONFIGURATION_set_value_string (diffsCB.cfgDiffs, - "new-section", key, - "new-value"); - } - break; - } - case REMOVE_SECTION: - break; - case REMOVE_ENTRY: - break; - default: - break; + GNUNET_asprintf (&key, "key%d", i); + GNUNET_CONFIGURATION_set_value_string (cfg, "new-section", key, + "new-value"); + GNUNET_CONFIGURATION_set_value_string (diffsCB.cfgDiffs, "new-section", + key, "new-value"); + GNUNET_free (key); } + break; + } + case REMOVE_SECTION: + break; + case REMOVE_ENTRY: + break; + default: + break; + } return diffsCB.cfgDiffs; } @@ -188,40 +203,52 @@ 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) - { - fprintf (stderr, - "Incorrect Configuration Diffs: Diffs may contain data not actually edited\n"); - goto housekeeping; - } + if (1 == (ret = cbData.status)) + { + FPRINTF (stderr, "%s", + "Incorrect Configuration Diffs: Diffs may contain data not actually edited\n"); + goto housekeeping; + } cbData.cfgDiffs = cfg; GNUNET_CONFIGURATION_iterate (cfgDiffs, diffsCallBack, &cbData); if ((ret = cbData.status) == 1) - fprintf (stderr, - "Incorrect Configuration Diffs: Data may be missing in diffs\n"); + FPRINTF (stderr, "%s", + "Incorrect Configuration Diffs: Data may be missing in diffs\n"); housekeeping: -#if DEBUG +#if 0 cbData.section = NULL; cbData.callBackOption = PRINT; printf ("\nExpected Diffs:\n"); @@ -232,6 +259,7 @@ housekeeping: #endif GNUNET_CONFIGURATION_destroy (cfg); GNUNET_CONFIGURATION_destroy (cfgDiffs); + GNUNET_free (diffsFileName); return ret; } @@ -242,50 +270,77 @@ testConfig () char *c; unsigned long long l; - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (cfg, "test", "b", &c)) + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "test", "b", &c)) return 1; if (0 != strcmp ("b", c)) - { - fprintf (stderr, "Got `%s'\n", c); - GNUNET_free (c); - return 2; - } + { + FPRINTF (stderr, "Got `%s'\n", c); + GNUNET_free (c); + return 2; + } GNUNET_free (c); - if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, - "test", "five", &l)) + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_number (cfg, "test", "five", &l)) + { + GNUNET_break (0); return 3; + } if (5 != l) + { + 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")) + { + 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)) + { + GNUNET_break (0); return 6; + } if (0 != strcmp (c, "10")) - { - GNUNET_free (c); - return 7; - } + { + GNUNET_free (c); + GNUNET_break (0); + return 7; + } GNUNET_free (c); if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, "last", "test", &c)) + { + GNUNET_break (0); return 8; + } #ifndef MINGW if (0 != strcmp (c, "/hello/world")) #else #define HI "\\hello\\world" if (strstr (c, HI) != c + strlen (c) - strlen (HI)) #endif - { - GNUNET_free (c); - return 9; - } + { + GNUNET_break (0); + GNUNET_free (c); + return 9; + } GNUNET_free (c); + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_size (cfg, "last", "size", &l)) + { + GNUNET_break (0); + return 10; + } + if (l != 512 * 1024) + { + GNUNET_break (0); + return 11; + } return 0; } @@ -303,10 +358,11 @@ check (void *data, const char *fn) int *idx = data; if (0 == strcmp (want[*idx], fn)) - { - (*idx)++; - return GNUNET_OK; - } + { + (*idx)++; + return GNUNET_OK; + } + GNUNET_break (0); return GNUNET_SYSERR; } @@ -316,64 +372,85 @@ testConfigFilenames () int idx; idx = 0; - if (3 != GNUNET_CONFIGURATION_iterate_value_filenames (cfg, - "FILENAMES", - "test", - &check, &idx)) + if (3 != + GNUNET_CONFIGURATION_iterate_value_filenames (cfg, "FILENAMES", "test", + &check, &idx)) + { + GNUNET_break (0); return 8; + } if (idx != 3) return 16; if (GNUNET_OK != - GNUNET_CONFIGURATION_remove_value_filename (cfg, - "FILENAMES", - "test", "/File Name")) + GNUNET_CONFIGURATION_remove_value_filename (cfg, "FILENAMES", "test", + "/File Name")) + { + GNUNET_break (0); return 24; + } if (GNUNET_NO != - GNUNET_CONFIGURATION_remove_value_filename (cfg, - "FILENAMES", - "test", "/File Name")) + GNUNET_CONFIGURATION_remove_value_filename (cfg, "FILENAMES", "test", + "/File Name")) + { + GNUNET_break (0); return 32; + } if (GNUNET_NO != - GNUNET_CONFIGURATION_remove_value_filename (cfg, - "FILENAMES", - "test", "Stuff")) + GNUNET_CONFIGURATION_remove_value_filename (cfg, "FILENAMES", "test", + "Stuff")) + { + GNUNET_break (0); return 40; + } if (GNUNET_NO != - GNUNET_CONFIGURATION_append_value_filename (cfg, - "FILENAMES", - "test", "/Hello")) + GNUNET_CONFIGURATION_append_value_filename (cfg, "FILENAMES", "test", + "/Hello")) + { + GNUNET_break (0); return 48; + } if (GNUNET_NO != - GNUNET_CONFIGURATION_append_value_filename (cfg, - "FILENAMES", - "test", "/World")) + GNUNET_CONFIGURATION_append_value_filename (cfg, "FILENAMES", "test", + "/World")) + { + GNUNET_break (0); return 56; + } if (GNUNET_YES != - GNUNET_CONFIGURATION_append_value_filename (cfg, - "FILENAMES", - "test", "/File 1")) + GNUNET_CONFIGURATION_append_value_filename (cfg, "FILENAMES", "test", + "/File 1")) + { + GNUNET_break (0); return 64; + } if (GNUNET_YES != - GNUNET_CONFIGURATION_append_value_filename (cfg, - "FILENAMES", - "test", "/File 2")) + GNUNET_CONFIGURATION_append_value_filename (cfg, "FILENAMES", "test", + "/File 2")) + { + GNUNET_break (0); return 72; + } idx = 0; want[1] = "/World"; want[2] = "/File 1"; want[3] = "/File 2"; - if (4 != GNUNET_CONFIGURATION_iterate_value_filenames (cfg, - "FILENAMES", - "test", - &check, &idx)) + if (4 != + GNUNET_CONFIGURATION_iterate_value_filenames (cfg, "FILENAMES", "test", + &check, &idx)) + { + GNUNET_break (0); return 80; + } if (idx != 4) + { + GNUNET_break (0); return 88; + } return 0; } @@ -389,57 +466,62 @@ main (int argc, char *argv[]) GNUNET_assert (cfg != NULL); if (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, "test_configuration_data.conf")) - { - fprintf (stderr, "Failed to parse configuration file\n"); - GNUNET_CONFIGURATION_destroy (cfg); - return 1; - } + { + FPRINTF (stderr, "%s", "Failed to parse configuration file\n"); + GNUNET_CONFIGURATION_destroy (cfg); + return 1; + } failureCount += testConfig (); - failureCount += 2 * testConfigFilenames (); + if (failureCount > 0) + goto error; + + failureCount = testConfigFilenames (); + if (failureCount > 0) + goto error; if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, "/tmp/gnunet-test.conf")) - { - fprintf (stderr, "Failed to write configuration file\n"); - GNUNET_CONFIGURATION_destroy (cfg); - return 1; - } + { + FPRINTF (stderr, "%s", "Failed to write configuration file\n"); + GNUNET_CONFIGURATION_destroy (cfg); + return 1; + } GNUNET_CONFIGURATION_destroy (cfg); GNUNET_assert (0 == UNLINK ("/tmp/gnunet-test.conf")); cfg = GNUNET_CONFIGURATION_create (); if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, "test_configuration_data.conf")) - { - GNUNET_break (0); - GNUNET_CONFIGURATION_destroy (cfg); - return 1; - } - if ((GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (cfg, "TESTING", "WEAKRANDOM", - &c)) - || (0 != strcmp (c, "YES"))) - { - 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/"))) - { - GNUNET_CONFIGURATION_destroy (cfg); - return 1; - } + { + GNUNET_break (0); + GNUNET_CONFIGURATION_destroy (cfg); + return 1; + } + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, "TESTING", "WEAKRANDOM", &c)) + { + GNUNET_break (0); + GNUNET_CONFIGURATION_destroy (cfg); + return 1; + } + 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) - { - printf ("\n Error! \n"); - } + if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfgDefault, NULL)) + { + GNUNET_break (0); + GNUNET_CONFIGURATION_destroy (cfgDefault); + return 1; + } /* Nothing changed in the new configuration */ failureCount += checkDiffs (cfgDefault, EDIT_NOTHING); @@ -458,10 +540,11 @@ main (int argc, char *argv[]) GNUNET_CONFIGURATION_destroy (cfgDefault); +error: if (failureCount != 0) - { - fprintf (stderr, "Test failed: %u\n", failureCount); - return 1; - } + { + FPRINTF (stderr, "Test failed: %u\n", failureCount); + return 1; + } return 0; }