X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3a5692bb27e561f7ae39e7a8e8bd1a29cd989884..85897b1307bb68f05f31385803f1b3a5b806a73f:/src/xbt/config.c diff --git a/src/xbt/config.c b/src/xbt/config.c index e6a802e9dd..0dadc2f331 100644 --- a/src/xbt/config.c +++ b/src/xbt/config.c @@ -365,7 +365,7 @@ xbt_cfg_check(xbt_cfg_t cfg) { static xbt_cfgelm_t xbt_cfgelm_get(xbt_cfg_t cfg, const char *name, e_xbt_cfgelm_type_t type){ - xbt_cfgelm_t res; + xbt_cfgelm_t res=NULL; xbt_ex_t e; TRY { @@ -432,7 +432,7 @@ xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa) { char *str; int i; double d; - e_xbt_cfgelm_type_t type; + e_xbt_cfgelm_type_t type=0; /* Set a dummy value to make gcc happy. It cannot get uninitialized */ xbt_ex_t e; @@ -508,7 +508,7 @@ xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) { double d; char *str; - xbt_cfgelm_t variable; + xbt_cfgelm_t variable=NULL; char *optionlist_cpy; char *option, *name,*val; @@ -541,8 +541,8 @@ xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) { option=NULL; /* don't do next iteration */ } else { - DEBUG3("Boundary on '%c'. len=%d;option-name=%d", - *option,len,option-name); + DEBUG3("Boundary on '%c'. len=%d;option-name=%ld", + *option,len,(long)(option-name)); /* Pass the following blank chars */ *(option++)='\0'; @@ -565,7 +565,7 @@ xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) { if (!val) { free(optionlist_cpy); xbt_assert1(FALSE, - "Malformated option: '%s'; Should be of the form 'name:value'", + "Option '%s' badly formated. Should be of the form 'name:value'", name); } *(val++)='\0'; @@ -942,7 +942,7 @@ void xbt_cfg_rm_at (xbt_cfg_t cfg, const char *name, int pos) { void xbt_cfg_empty(xbt_cfg_t cfg,const char*name) { - xbt_cfgelm_t variable; + xbt_cfgelm_t variable=NULL; xbt_ex_t e; TRY { @@ -1085,7 +1085,7 @@ void xbt_cfg_get_host (xbt_cfg_t cfg, const char *name, * \warning the returned value is the actual content of the config set */ xbt_dynar_t xbt_cfg_get_dynar (xbt_cfg_t cfg, const char *name) { - xbt_cfgelm_t variable; + xbt_cfgelm_t variable=NULL; xbt_ex_t e; TRY { @@ -1139,3 +1139,125 @@ xbt_cfg_get_host_at(xbt_cfg_t cfg, const char *name, int pos, *port = val->port; *host = val->name; } + + +#ifdef SIMGRID_TEST +#include "xbt.h" +#include "xbt/ex.h" + +XBT_TEST_SUITE("config","Configuration support"); + +static xbt_cfg_t make_set(){ + xbt_cfg_t set=NULL; + + set = xbt_cfg_new(); + xbt_cfg_register_str(set,"speed:1_to_2_int"); + xbt_cfg_register_str(set,"hostname:1_to_1_string"); + xbt_cfg_register_str(set,"user:1_to_10_string"); + + return set; +} /* end_of_make_set */ + +XBT_TEST_UNIT("memuse",test_config_memuse,"Alloc and free a config set") { + xbt_cfg_t set=make_set(); + xbt_test_add0("Alloc and free a config set"); + xbt_cfg_set_parse(set, "hostname:veloce user:mquinson\nuser:oaumage\tuser:alegrand"); + xbt_cfg_free(&set); + xbt_cfg_free(&set); +} + +XBT_TEST_UNIT("validation",test_config_validation,"Validation tests") { + xbt_cfg_t set = set=make_set(); + xbt_ex_t e; + + xbt_test_add0("Having too few elements for speed"); + xbt_cfg_set_parse(set, "hostname:veloce user:mquinson\nuser:oaumage\tuser:alegrand"); + TRY { + xbt_cfg_check(set); + } CATCH(e) { + if (e.category != mismatch_error || + strncmp(e.msg,"Config elem speed needs",strlen("Config elem speed needs"))) + xbt_test_fail1("Got an exception. msg=%s",e.msg); + xbt_ex_free(e); + } + xbt_cfg_free(&set); + xbt_cfg_free(&set); + + + + xbt_test_add0("Having too much values of 'speed'"); + set=make_set(); + xbt_cfg_set_parse(set,"hostname:toto:42 user:alegrand"); + TRY { + xbt_cfg_set_parse(set,"speed:42 speed:24 speed:34"); + } CATCH(e) { + if (e.category != mismatch_error || + strncmp(e.msg,"Cannot add value 34 to the config elem speed", + strlen("Config elem speed needs"))) + xbt_test_fail1("Got an exception. msg=%s",e.msg); + xbt_ex_free(e); + } + xbt_cfg_check(set); + xbt_cfg_free(&set); + xbt_cfg_free(&set); + +} + +XBT_TEST_UNIT("use",test_config_use,"Data retrieving tests") { + xbt_cfg_t set = set=make_set(); + + + xbt_test_add0("Get a single value"); + { + /* get_single_value */ + int ival; + xbt_cfg_t myset=make_set(); + + xbt_cfg_set_parse(myset,"hostname:toto:42 speed:42"); + ival = xbt_cfg_get_int(myset,"speed"); + if (ival != 42) + xbt_test_fail1("Speed value = %d, I expected 42",ival); + xbt_cfg_free(&myset); + } + + xbt_test_add0("Get multiple values"); + { + /* get_multiple_value */ + xbt_dynar_t dyn; + xbt_cfg_t myset=make_set(); + + xbt_cfg_set_parse(myset, "hostname:veloce user:foo\nuser:bar\tuser:toto"); + xbt_cfg_set_parse(myset,"speed:42"); + xbt_cfg_check(myset); + dyn = xbt_cfg_get_dynar(myset,"user"); + + if (xbt_dynar_length(dyn) != 3) + xbt_test_fail1("Dynar length = %d, I expected 3", (int)xbt_dynar_length(dyn)); + + if (strcmp(xbt_dynar_get_as(dyn,0,char*),"foo")) + xbt_test_fail1("Dynar[0] = %s, I expected foo", xbt_dynar_get_as(dyn,0,char*)); + + if (strcmp(xbt_dynar_get_as(dyn,1,char*),"bar")) + xbt_test_fail1("Dynar[1] = %s, I expected bar", xbt_dynar_get_as(dyn,1,char*)); + + if (strcmp(xbt_dynar_get_as(dyn,2,char*),"toto")) + xbt_test_fail1("Dynar[2] = %s, I expected toto", xbt_dynar_get_as(dyn,2,char*)); + xbt_cfg_free(&myset); + } + + xbt_test_add0("Access to a non-existant entry"); + { + /* non-existant_entry */ + xbt_cfg_t myset=make_set(); + + TRY { + xbt_cfg_set_parse(myset, "color:blue"); + } CATCH(e) { + if (e.category != mismatch_error) + xbt_test_exception(e); + xbt_ex_free(e); + } + xbt_cfg_free(&myset); + } +} +#endif /* SIMGRID_TEST */