Annotation of embedaddon/confuse/tests/suite_validate.c, revision 1.1

1.1     ! misho       1: #include "check_confuse.h"
        !             2: #include <string.h>
        !             3: #include <sys/types.h>
        !             4: #include <sys/socket.h>
        !             5: #include <netinet/in.h>
        !             6: #include <arpa/inet.h>
        !             7: 
        !             8: static cfg_t *cfg = 0;
        !             9: 
        !            10: #define ACTION_NONE 0
        !            11: #define ACTION_RUN 1
        !            12: #define ACTION_WALK 2
        !            13: #define ACTION_CRAWL 3
        !            14: #define ACTION_JUMP 4
        !            15: 
        !            16: int parse_action(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result)
        !            17: {
        !            18:     if(strcmp(value, "run") == 0)
        !            19:         *(int *)result = ACTION_RUN;
        !            20:     else if(strcmp(value, "walk") == 0)
        !            21:         *(int *)result = ACTION_WALK;
        !            22:     else if(strcmp(value, "crawl") == 0)
        !            23:         *(int *)result = ACTION_CRAWL;
        !            24:     else if(strcmp(value, "jump") == 0)
        !            25:         *(int *)result = ACTION_JUMP;
        !            26:     else
        !            27:     {
        !            28:         /* cfg_error(cfg, "Invalid action value '%s'", value); */
        !            29:         return -1;
        !            30:     }
        !            31:     return 0;
        !            32: }
        !            33: 
        !            34: int validate_speed(cfg_t *cfg, cfg_opt_t *opt)
        !            35: {
        !            36:     int i;
        !            37: 
        !            38:     for(i = 0; i < cfg_opt_size(opt); i++)
        !            39:     {
        !            40:         if(cfg_opt_getnint(opt, i) <= 0)
        !            41:         {
        !            42:             /* cfg_error(cfg, "speed must be positive in section %s", cfg->name); */
        !            43:             return 1;
        !            44:         }
        !            45:     }
        !            46:     return 0;
        !            47: }
        !            48: 
        !            49: int validate_ip(cfg_t *cfg, cfg_opt_t *opt)
        !            50: {
        !            51:     int i;
        !            52: 
        !            53:     for(i = 0; i < cfg_opt_size(opt); i++)
        !            54:     {
        !            55:         struct in_addr addr;
        !            56:         char *ip = cfg_opt_getnstr(opt, i);
        !            57:         if(inet_aton(ip, &addr) == 0)
        !            58:         {
        !            59:             /* cfg_error(cfg, "invalid IP address %s in section %s", ip, cfg->name); */
        !            60:             return 1;
        !            61:         }
        !            62:     }
        !            63:     return 0;
        !            64: }
        !            65: 
        !            66: int validate_action(cfg_t *cfg, cfg_opt_t *opt)
        !            67: {
        !            68:     cfg_opt_t *name_opt;
        !            69:     cfg_t *action_sec = cfg_opt_getnsec(opt, 0);
        !            70: 
        !            71:     fail_unless(action_sec != 0);
        !            72: 
        !            73:     name_opt = cfg_getopt(action_sec, "name");
        !            74: 
        !            75:     fail_unless(name_opt != 0);
        !            76:     fail_unless(cfg_opt_size(name_opt) == 1);
        !            77: 
        !            78:     if(cfg_opt_getnstr(name_opt, 0) == NULL)
        !            79:     {
        !            80:         /* cfg_error(cfg, "missing required option 'name' in section %s", opt->name); */
        !            81:         return 1;
        !            82:     }
        !            83:     return 0;
        !            84: }
        !            85: 
        !            86: void validate_setup(void)
        !            87: {
        !            88:     cfg_opt_t *opt = 0;
        !            89: 
        !            90:     cfg_opt_t action_opts[] =
        !            91:     {
        !            92:         CFG_INT("speed", 0, CFGF_NONE),
        !            93:         CFG_STR("name", 0, CFGF_NONE),
        !            94:         CFG_INT("xspeed", 0, CFGF_NONE),
        !            95:         CFG_END()
        !            96:     };
        !            97: 
        !            98:     cfg_opt_t multi_opts[] =
        !            99:     {
        !           100:         CFG_INT_LIST("speeds", 0, CFGF_NONE),
        !           101:         //{"speeds",CFGT_INT,0,0,CFGF_LIST,0,{0,0,cfg_false,0,0},0,0,0,validate_speed,0},
        !           102:         CFG_SEC("options", action_opts, CFGF_NONE),
        !           103:         CFG_END()
        !           104:     };
        !           105: 
        !           106:     cfg_opt_t opts[] = 
        !           107:     {
        !           108:         CFG_STR_LIST("ip-address", 0, CFGF_NONE),
        !           109:         CFG_INT_CB("action", ACTION_NONE, CFGF_NONE, parse_action),
        !           110:         CFG_SEC("options", action_opts, CFGF_NONE),
        !           111:         CFG_SEC("multi_options", multi_opts, CFGF_MULTI),
        !           112:         CFG_END()
        !           113:     };
        !           114: 
        !           115:     cfg = cfg_init(opts, 0);
        !           116: 
        !           117:     cfg_set_validate_func(cfg, "ip-address", validate_ip);
        !           118:     fail_unless(cfg_set_validate_func(cfg, "ip-address", validate_ip) == validate_ip);
        !           119:     opt = cfg_getopt(cfg, "ip-address");
        !           120:     fail_unless(opt != 0);
        !           121:     fail_unless(opt->validcb == validate_ip);
        !           122: 
        !           123:     cfg_set_validate_func(cfg, "options", validate_action);
        !           124:     fail_unless(cfg_set_validate_func(cfg, "options", validate_action) == validate_action);
        !           125:     opt = cfg_getopt(cfg, "options");
        !           126:     fail_unless(opt != 0);
        !           127:     fail_unless(opt->validcb == validate_action);
        !           128: 
        !           129:     cfg_set_validate_func(cfg, "options|speed", validate_speed);
        !           130:     fail_unless(cfg_set_validate_func(cfg, "options|speed", validate_speed) == validate_speed);
        !           131:     opt = cfg_getopt(cfg, "options|speed");
        !           132:     fail_unless(opt != 0);
        !           133:     fail_unless(opt->validcb == validate_speed);
        !           134: 
        !           135:     cfg_set_validate_func(cfg, "multi_options|speeds", validate_speed);
        !           136:     fail_unless(cfg_set_validate_func(cfg, "multi_options|speeds", validate_speed) == validate_speed);
        !           137: 
        !           138:     cfg_set_validate_func(cfg, "multi_options|options|xspeed", validate_speed);
        !           139:     fail_unless(cfg_set_validate_func(cfg, "multi_options|options|xspeed", validate_speed) == validate_speed);
        !           140: }
        !           141: 
        !           142: void validate_teardown(void)
        !           143: {
        !           144:     cfg_free(cfg);
        !           145: }
        !           146: 
        !           147: void validate_test(void)
        !           148: {
        !           149:     char *buf;
        !           150:     int i;
        !           151: 
        !           152:     buf = "action = wlak";
        !           153:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           154: 
        !           155:     buf = "action = walk";
        !           156:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
        !           157: 
        !           158:     buf = "action = run"
        !           159:           " options { speed = 6 }";
        !           160:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           161: 
        !           162:     buf = "action = jump"
        !           163:           " options { speed = 2 name = 'Joe' }";
        !           164:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
        !           165: 
        !           166:     buf = "action = crawl"
        !           167:           " options { speed = -2 name = 'Smith' }";
        !           168:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           169: 
        !           170:     buf = "ip-address = { 0.0.0.0 , 1.2.3.4 , 192.168.0.254 , 10.0.0.255 , 20.30.40.256}";
        !           171:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           172:     buf = "ip-address = { 0.0.0.0 , 1.2.3.4 , 192.168.0.254 , 10.0.0.255 , 20.30.40.250}";
        !           173:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
        !           174:     buf = "ip-address = { 1.2.3. }";
        !           175:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           176: 
        !           177:     buf = "action = run"
        !           178:           " multi_options { speeds = {1, 2, 3, 4, 5} }";
        !           179:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
        !           180:     for(i = 0; i < cfg_size(cfg, "multi_options"); i++)
        !           181:     {
        !           182:         cfg_t *multisec = cfg_getnsec(cfg, "multi_options", i);
        !           183:         cfg_opt_t *speeds_opt = cfg_getopt(multisec, "speeds");
        !           184:         fail_unless(speeds_opt != 0);
        !           185:         fail_unless(speeds_opt->validcb == validate_speed);
        !           186:     }
        !           187: 
        !           188:     buf = "action = run"
        !           189:           " multi_options { speeds = {1, 2, 3, -4, 5} }";
        !           190:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           191: 
        !           192:     buf = "action = run"
        !           193:           " multi_options { speeds = {1, 2, 3, 4, 0} }";
        !           194:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           195: 
        !           196:     buf = "action = run"
        !           197:           " multi_options { options { xspeed = 3 } }";
        !           198:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
        !           199: 
        !           200:     buf = "action = run"
        !           201:           " multi_options { options { xspeed = -3 } }";
        !           202:     fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
        !           203: }
        !           204: 
        !           205: int
        !           206: main(void)
        !           207: {
        !           208:     validate_setup();
        !           209:     validate_test();
        !           210:     validate_teardown();
        !           211: 
        !           212:     return 0;
        !           213: }
        !           214: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>