diff options
Diffstat (limited to 'common/ini/ini_parse_ut.c')
-rw-r--r-- | common/ini/ini_parse_ut.c | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/common/ini/ini_parse_ut.c b/common/ini/ini_parse_ut.c new file mode 100644 index 0000000..c66d250 --- /dev/null +++ b/common/ini/ini_parse_ut.c @@ -0,0 +1,183 @@ +/* + INI LIBRARY + + Unit test for the parser object. + + Copyright (C) Dmitri Pal <dpal@redhat.com> 2010 + + INI Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + INI Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with INI Library. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> +#include "ini_defines.h" +#include "ini_parse.h" +#include "ini_config.h" +#include "ini_configobj.h" +#include "simplebuffer.h" +#include "config.h" +#define TRACE_HOME +#include "trace.h" + +int verbose = 0; + +#define INIOUT(foo) \ + do { \ + if (verbose) foo; \ + } while(0) + +typedef int (*test_fn)(void); + +int test_one_file(const char *filename) +{ + int error = EOK; + FILE *ff = NULL; + char new_file[100]; + struct configobj *ini_config = NULL; + struct collection_item *error_list = NULL; + struct simplebuffer *sbobj = NULL; + uint32_t left = 0; + + INIOUT(printf("<==== Testing file %s ====>\n", filename)); + + /* Create config collection */ + error = ini_config_create(&ini_config); + if (error != EOK) { + printf("Failed to create collection. Error %d.\n", error); + return error; + } + + errno = 0; + ff = fopen(filename,"r"); + if(!ff) { + error = errno; + printf("Failed to open file. Error %d.\n", error); + ini_config_destroy(ini_config); + return error; + } + + error = ini_parse_config(ff, + filename, + ini_config, + INI_STOP_ON_NONE, + &error_list, + 80); + fclose(ff); + if (error != EOK) { + INIOUT(printf("Failed to parse configuration. Error %d.\n", error)); + INIOUT(print_file_parsing_errors(stdout, error_list)); + col_destroy_collection(error_list); + } + + error = simplebuffer_alloc(&sbobj); + if (error) { + TRACE_ERROR_NUMBER("Failed to allocate dynamic string.", error); + ini_config_destroy(ini_config); + return error; + } + + error = ini_serialize_config(ini_config, sbobj); + if (error != EOK) { + printf("Failed to parse configuration. Error %d.\n", error); + ini_config_destroy(ini_config); + simplebuffer_free(sbobj); + return error; + } + + sprintf(new_file, "%s.out", filename); + + errno = 0; + ff = fopen(new_file, "w"); + if(!ff) { + error = errno; + printf("Failed to open file. Error %d.\n", error); + ini_config_destroy(ini_config); + simplebuffer_free(sbobj); + return error; + } + + /* Save */ + left = simplebuffer_get_len(sbobj); + while (left > 0) { + error = simplebuffer_write(fileno(ff), sbobj, &left); + if (error) { + printf("Failed to write back the configuration %d.\n", error); + simplebuffer_free(sbobj); + ini_config_destroy(ini_config); + fclose(ff); + return error; + } + } + + ini_config_destroy(ini_config); + simplebuffer_free(sbobj); + fclose(ff); + + return EOK; +} + + +/* Run tests for multiple files */ +int read_save_test(void) +{ + int error = EOK; + int i = 0; + int lasterr = EOK; + const char *files[] = { "./ini.d/real.conf", + "./ini.d/mysssd.conf", + "./ini.d/ipa.conf", + "./ini.d/test.conf", + NULL }; + + while(files[i]) { + error = test_one_file(files[i]); + INIOUT(printf("Test fo file: %s returned %d\n", files[i], error)); + if (error) lasterr = error; + i++; + } + + return lasterr; +} + +/* Main function of the unit test */ +int main(int argc, char *argv[]) +{ + int error = 0; + test_fn tests[] = { read_save_test, + NULL }; + test_fn t; + int i = 0; + char *var; + + if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = 1; + else { + var = getenv("COMMON_TEST_VERBOSE"); + if (var) verbose = 1; + } + + INIOUT(printf("Start\n")); + + while ((t = tests[i++])) { + error = t(); + if (error) { + INIOUT(printf("Failed with error %d!\n", error)); + return error; + } + } + + INIOUT(printf("Success!\n")); + return 0; +} |