summaryrefslogtreecommitdiffstats
path: root/ini/ini_parse_ut.c
diff options
context:
space:
mode:
authorDmitri Pal <dpal@redhat.com>2010-11-26 23:11:07 -0500
committerStephen Gallagher <sgallagh@redhat.com>2010-12-21 11:16:09 -0500
commit5dadfb4371b8ba694b8d9431cb6789bf6de485c4 (patch)
tree2b6843eb1b30a5aa4b23a77a74c7d0a797f9d464 /ini/ini_parse_ut.c
parent500eaf3ef5d53a9961443d2f3ea0d7e8b01d4c1f (diff)
downloadding-libs-5dadfb4371b8ba694b8d9431cb6789bf6de485c4.tar.gz
ding-libs-5dadfb4371b8ba694b8d9431cb6789bf6de485c4.tar.xz
ding-libs-5dadfb4371b8ba694b8d9431cb6789bf6de485c4.zip
New copy and folding functionality
* Added method to copy configuration. * Added unit test for it. * Added method to reset boandary for the whole configuration. * Added unit test for it. * Unit test now can read a file save it read again and save. Both saves produce same files! * Reworked the way the parser was dealing with empty lines. It was sutting off the value in the middle if the folded line consisted of just spaces.
Diffstat (limited to 'ini/ini_parse_ut.c')
-rw-r--r--ini/ini_parse_ut.c129
1 files changed, 91 insertions, 38 deletions
diff --git a/ini/ini_parse_ut.c b/ini/ini_parse_ut.c
index 01b7077..cc37c21 100644
--- a/ini/ini_parse_ut.c
+++ b/ini/ini_parse_ut.c
@@ -23,13 +23,16 @@
#include <string.h>
#include <errno.h>
#include <stdlib.h>
+#include <limits.h>
#include "ini_defines.h"
#include "ini_configobj.h"
+#include "ini_config_priv.h"
#include "simplebuffer.h"
#include "path_utils.h"
#include "config.h"
#define TRACE_HOME
#include "trace.h"
+#include "collection_tools.h"
int verbose = 0;
char *confdir = NULL;
@@ -41,19 +44,19 @@ char *confdir = NULL;
typedef int (*test_fn)(void);
-int test_one_file(const char *filename)
+int test_one_file(const char *in_filename,
+ const char *out_filename)
{
int error = EOK;
struct ini_cfgfile *file_ctx = NULL;
FILE *ff = NULL;
- char new_file[100];
struct ini_cfgobj *ini_config = NULL;
+ struct ini_cfgobj *ini_copy = NULL;
char **error_list = NULL;
struct simplebuffer *sbobj = NULL;
uint32_t left = 0;
- char filename_base[96];
- INIOUT(printf("<==== Testing file %s ====>\n", filename));
+ INIOUT(printf("<==== Testing file %s ====>\n", in_filename));
/* Create config collection */
error = ini_config_create(&ini_config);
@@ -62,7 +65,7 @@ int test_one_file(const char *filename)
return error;
}
- error = ini_config_file_open(filename,
+ error = ini_config_file_open(in_filename,
INI_STOP_ON_NONE,
0, /* TBD */
0, /* TBD */
@@ -83,12 +86,35 @@ int test_one_file(const char *filename)
ini_config_get_filename(file_ctx)));
ini_config_get_errors(file_ctx, &error_list);
INIOUT(ini_print_errors(stdout, error_list));
+ ini_config_free_errors(error_list);
}
/* We do not return here intentionally */
}
ini_config_file_close(file_ctx);
+ INIOUT(col_debug_collection(ini_config->cfg, COL_TRAVERSE_DEFAULT));
+
+ /* Copy configuration */
+ error = ini_config_copy(ini_config, &ini_copy);
+ if (error) {
+ printf("Failed to copy configuration. Error %d.\n", error);
+ ini_config_destroy(ini_config);
+ return error;
+ }
+
+ ini_config_destroy(ini_config);
+ ini_config = ini_copy;
+
+ INIOUT(col_debug_collection(ini_config->cfg, COL_TRAVERSE_DEFAULT));
+
+ error = ini_config_set_wrap(ini_config, 5);
+ if (error) {
+ printf("Failed to set custom wrapper. Error %d.\n", error);
+ ini_config_destroy(ini_config);
+ return error;
+ }
+
error = simplebuffer_alloc(&sbobj);
if (error) {
TRACE_ERROR_NUMBER("Failed to allocate dynamic string.", error);
@@ -104,11 +130,8 @@ int test_one_file(const char *filename)
return error;
}
- error = get_basename(filename_base, 96, filename);
- sprintf(new_file, "%s.out", filename_base);
-
errno = 0;
- ff = fopen(new_file, "w");
+ ff = fopen(out_filename, "w");
if(!ff) {
error = errno;
printf("Failed to open file for writing. Error %d.\n", error);
@@ -143,41 +166,79 @@ int read_save_test(void)
{
int error = EOK;
int i = 0;
- int lasterr = EOK;
- char *files[5];
-
- files[0] = malloc(sizeof(char)*512);
- sprintf(files[0], "%s/ini.d/real.conf", confdir);
- files[1] = malloc(sizeof(char)*512);
- sprintf(files[1], "%s/ini.d/mysssd.conf", confdir);
- files[2] = malloc(sizeof(char)*512);
- sprintf(files[2], "%s/ini.d/ipa.conf", confdir);
- files[3] = malloc(sizeof(char)*512);
- sprintf(files[3], "%s/ini.d/test.conf", confdir);
- files[4] = NULL;
+ char infile[PATH_MAX];
+ char outfile[PATH_MAX];
+ char *srcdir;
+ const char *files[] = { "real",
+ "mysssd",
+ "ipa",
+ "test",
+ NULL };
+
+
+ srcdir = getenv("srcdir");
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;
+
+ sprintf(infile, "%s/ini/ini.d/%s.conf", (srcdir == NULL) ? "." : srcdir,
+ files[i]);
+ sprintf(outfile, "%s/%s.conf.out", (srcdir == NULL) ? "." : srcdir,
+ files[i]);
+ error = test_one_file(infile, outfile);
+ INIOUT(printf("Test for file: %s returned %d\n", files[i], error));
i++;
}
- free(files[3]);
- free(files[2]);
- free(files[1]);
- free(files[0]);
+ return EOK;
+}
+
+/* Run tests for multiple files */
+int read_again_test(void)
+{
+ int error = EOK;
+ int i = 0;
+ char infile[PATH_MAX];
+ char outfile[PATH_MAX];
+ char *srcdir;
+ char command[PATH_MAX * 3];
+ const char *files[] = { "real",
+ "mysssd",
+ "ipa",
+ "test",
+ NULL };
+
- return lasterr;
+ srcdir = getenv("srcdir");
+
+ while(files[i]) {
+
+ sprintf(infile, "%s/%s.conf.out", (srcdir == NULL) ? "." : srcdir,
+ files[i]);
+ sprintf(outfile, "%s/%s.conf.2.out", (srcdir == NULL) ? "." : srcdir,
+ files[i]);
+ error = test_one_file(infile, outfile);
+ INIOUT(printf("Test for file: %s returned %d\n", files[i], error));
+ if (error) break;
+ sprintf(command,"diff -q %s %s", infile, outfile);
+ error = system(command);
+ INIOUT(printf("Comparison of %s %s returned: %d\n",
+ infile, outfile, error));
+ if (error) break;
+
+ i++;
+ }
+
+ return error;
}
+
/* Main function of the unit test */
int main(int argc, char *argv[])
{
int error = 0;
test_fn tests[] = { read_save_test,
+ read_again_test,
NULL };
- char *srcdir;
test_fn t;
int i = 0;
char *var;
@@ -190,14 +251,6 @@ int main(int argc, char *argv[])
INIOUT(printf("Start\n"));
- srcdir = getenv("srcdir");
- if(!srcdir) {
- confdir = strdup("./ini");
- } else {
- confdir = malloc(strlen(srcdir)+5*sizeof(char));
- sprintf(confdir, "%s/ini", srcdir);
- }
-
while ((t = tests[i++])) {
error = t();
if (error) {