Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/suites/test_message.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2015 Tobias Brunner
        !             3:  * HSR Hochschule fuer Technik Rapperswil
        !             4:  *
        !             5:  * Copyright (C) 2014 Martin Willi
        !             6:  * Copyright (C) 2014 revosec AG
        !             7:  *
        !             8:  * This program is free software; you can redistribute it and/or modify it
        !             9:  * under the terms of the GNU General Public License as published by the
        !            10:  * Free Software Foundation; either version 2 of the License, or (at your
        !            11:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !            12:  *
        !            13:  * This program is distributed in the hope that it will be useful, but
        !            14:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            15:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            16:  * for more details.
        !            17:  */
        !            18: 
        !            19: #include <test_suite.h>
        !            20: 
        !            21: #include "../vici_message.h"
        !            22: #include "../vici_builder.h"
        !            23: 
        !            24: #include <unistd.h>
        !            25: 
        !            26: static char blob[] = {
        !            27:        0xd3,0xe5,0xee,0x37,0x7b,0x96,0x2f,0x3e,0x5f,0x3e,0x91,0xea,0x38,0x44,0xba,0x6c,
        !            28:        0x75,0xc8,0x42,0x32,0xaf,0x7a,0x66,0x43,0x33,0x92,0xd2,0xef,0x7d,0x91,0x7b,0x59,
        !            29:        0x9f,0x9f,0xd1,0x44,0xb6,0x1e,0x8c,0xd1,0xc5,0xa0,0xd9,0xe4,0xf2,0x31,0xfd,0x7b,
        !            30:        0x5b,0x56,0xa7,0xfe,0x63,0x0d,0xcb,0x31,0x74,0xd8,0xd6,0x4a,0x42,0x3a,0x88,0xf3,
        !            31:        0x79,0xf9,0x41,0xa6,0xc0,0x64,0x53,0x31,0x42,0xe2,0xd4,0x4a,0x22,0x5f,0x3f,0x99,
        !            32:        0xe0,0x1a,0xcb,0x93,0x26,0xd0,0xec,0xac,0x90,0x97,0x0a,0x5f,0x69,0x86,0xf1,0xda,
        !            33:        0xfc,0xa7,0xac,0xd0,0xd8,0x81,0xcf,0x7d,0x47,0x22,0xbe,0xbf,0x00,0x9b,0x6b,0x86,
        !            34:        0x92,0x89,0xbe,0x7f,0x74,0x13,0x53,0xf1,0x4c,0x2b,0xc9,0xe1,0x39,0xd6,0xfc,0x50,
        !            35:        0x3f,0x00,0xfb,0x76,0x42,0xa6,0xa4,0x70,0xfc,0x93,0x17,0x4a,0x35,0xce,0x5e,0x78,
        !            36:        0x41,0x88,0x24,0x50,0x78,0xf2,0x38,0x08,0xff,0x40,0xef,0x61,0xbb,0xbf,0x16,0xff,
        !            37:        0x0b,0xf6,0x33,0x21,0xcb,0x48,0xbd,0x7d,0xd1,0x73,0xfa,0x6d,0xd6,0xab,0xde,0x69,
        !            38:        0x63,0x17,0xdb,0x52,0xe2,0x75,0x4b,0xb7,0x1e,0xf0,0x8a,0x55,0x4f,0x70,0x8d,0x18,
        !            39:        0xe5,0x38,0x6a,0x9f,0xb8,0x06,0xb5,0x91,0x90,0x2b,0xc5,0x67,0xa9,0x12,0xe5,0xf3,
        !            40:        0x48,0x2f,0x80,0x03,0xa1,0xa0,0xfc,0x43,0xe9,0x0f,0x83,0x2b,0xbc,0x7c,0xa8,0x3b,
        !            41:        0x6c,0xc1,0xc8,0x72,0x5f,0x87,0x63,0x77,0x93,0x9b,0xe2,0xd7,0x4e,0xe6,0x65,0xa1,
        !            42:        0x69,0x00,0xda,0xf8,0xb4,0x61,0xee,0xb7,0x20,0xe7,0x2a,0x35,0x23,0xf0,0x37,0x4b,
        !            43:        0x67,0xcf,0x8d,0x85,0x72,0x22,0x6d,0x7a,0xb2,0x96,0xff,0x49,0xf4,0x94,0x3e,0x7e,
        !            44:        0x87,0x26,0x5d,0x34,0x05,0x26,0x60,0x9b,0x89,0xfe,0xf9,0x91,0xd3,0x03,0xe7,0x8a,
        !            45:        0x03,0xf6,0x4e,0xbf,0x68,0x13,0xc6,0xf2,0x7b,0x9c,0xe6,0x36,0x1b,0xe2,0x22,0x44,
        !            46:        0xb1,0x19,0x34,0x5f,0xe8,0x44,0x48,0x3a,0x19,0xe4,0xbd,0xb0,0x4e,0xb5,0x2c,0x40,
        !            47:        0x55,0x39,0xe6,0x4c,0xd5,0x68,0x34,0x72,0x6b,0x6d,0x88,0xce,0x7e,0x77,0x95,0x17,
        !            48:        0x2e,0x68,0x3f,0x0e,0x9d,0x70,0x9a,0x22,0xfa,0x19,0xcc,0x15,0x9d,0xba,0xaa,0xec,
        !            49:        0xb1,0x67,0x19,0x51,0xce,0x60,0x9a,0x38,0xf8,0xa7,0x4e,0xe3,0x25,0x47,0x1e,0x1d,
        !            50:        0x30,0x76,0x91,0x8f,0x4d,0x13,0x59,0x06,0x2f,0x01,0x10,0x95,0xdb,0x08,0x7c,0x46,
        !            51:        0xed,0x47,0xa1,0x19,0x4c,0x46,0xd1,0x3a,0x3f,0x88,0x7a,0x63,0xae,0x29,0x13,0x42,
        !            52:        0xe9,0x17,0xe8,0xa9,0x95,0xfc,0xd1,0xea,0xfa,0x59,0x90,0xfe,0xb7,0xbb,0x7f,0x61,
        !            53:        0x1b,0xcb,0x3d,0x12,0x99,0x96,0x3e,0x23,0x23,0xec,0x3a,0x4d,0x86,0x86,0x74,0xef,
        !            54:        0x38,0xa6,0xdc,0x3a,0x83,0x85,0xf8,0xb8,0xad,0x5b,0x33,0x94,0x4d,0x0e,0x68,0xbc,
        !            55:        0xf2,0xc7,0x6f,0x84,0x18,0x1e,0x5a,0x66,0x1f,0x6c,0x98,0x33,0xda,0xde,0x9e,0xda,
        !            56:        0x82,0xd0,0x56,0x44,0x47,0x08,0x0c,0x07,0x81,0x9d,0x8b,0x64,0x16,0x73,0x9d,0x80,
        !            57:        0x54,0x9c,0x4c,0x42,0xde,0x27,0x4e,0x97,0xb2,0xcf,0x48,0xaf,0x7e,0x85,0xc1,0xcd,
        !            58:        0x6a,0x4d,0x04,0x40,0x89,0xa3,0x9d,0x4e,0x89,0x56,0x60,0x31,0x1f,0x3f,0x49,0x16,
        !            59: };
        !            60: 
        !            61: typedef struct {
        !            62:        vici_type_t type;
        !            63:        char *name;
        !            64:        chunk_t data;
        !            65: } endecode_test_t;
        !            66: 
        !            67: static endecode_test_t endecode_test_simple[] = {
        !            68:        { VICI_SECTION_START,                   "section1", {}                                                  },
        !            69:        {  VICI_KEY_VALUE,                              "key1",         { "value1", 6 }                         },
        !            70:        {  VICI_KEY_VALUE,                              "key2",         { "value2", 6 }                         },
        !            71:        { VICI_SECTION_END,                             NULL,           {}                                                      },
        !            72:        { VICI_END,                                             NULL,           {}                                                      },
        !            73: };
        !            74: 
        !            75: static endecode_test_t endecode_test_nested[] = {
        !            76:        { VICI_SECTION_START,                   "section1", {}                                                  },
        !            77:        {  VICI_SECTION_START,                  "section2", {}                                                  },
        !            78:        {   VICI_SECTION_START,                 "section3", {}                                                  },
        !            79:        {    VICI_KEY_VALUE,                    "key1",         { "value1", 6 }                         },
        !            80:        {    VICI_SECTION_START,                "section4", {}                                                  },
        !            81:        {     VICI_KEY_VALUE,                   "key2",         { "value2", 6 }                         },
        !            82:        {    VICI_SECTION_END,                  NULL,           {}                                                      },
        !            83:        {   VICI_SECTION_END,                   NULL,           {}                                                      },
        !            84:        {  VICI_SECTION_END,                    NULL,           {}                                                      },
        !            85:        {  VICI_KEY_VALUE,                              "key3",         { "value3", 6 }                         },
        !            86:        { VICI_SECTION_END,                             NULL,           {}                                                      },
        !            87:        { VICI_END,                                             NULL,           {}                                                      },
        !            88: };
        !            89: 
        !            90: static endecode_test_t endecode_test_list[] = {
        !            91:        { VICI_SECTION_START,                   "section1", {}                                                  },
        !            92:        {  VICI_LIST_START,                             "list1",        {}                                                      },
        !            93:        {   VICI_LIST_ITEM,                             NULL,           { "item1", 5 }                          },
        !            94:        {   VICI_LIST_ITEM,                             NULL,           { "item2", 5 }                          },
        !            95:        {  VICI_LIST_END,                               NULL,           {}                                                      },
        !            96:        {  VICI_KEY_VALUE,                              "key1",         { "value1", 6 }                         },
        !            97:        { VICI_SECTION_END,                             NULL,           {}                                                      },
        !            98:        { VICI_END,                                             NULL,           {}                                                      },
        !            99: };
        !           100: 
        !           101: static endecode_test_t endecode_test_blobs[] = {
        !           102:        { VICI_KEY_VALUE,                               "key1",         { blob, countof(blob) }         },
        !           103:        { VICI_SECTION_START,                   "section1", {}                                                  },
        !           104:        {  VICI_LIST_START,                             "list1",        {}                                                      },
        !           105:        {   VICI_LIST_ITEM,                             NULL,           { blob, countof(blob) }         },
        !           106:        {   VICI_LIST_ITEM,                             NULL,           { blob, countof(blob) }         },
        !           107:        {  VICI_LIST_END,                               NULL,           {}                                                      },
        !           108:        {  VICI_KEY_VALUE,                              "key2",         { blob, countof(blob) }         },
        !           109:        { VICI_SECTION_END,                             NULL,           {}                                                      },
        !           110:        { VICI_END,                                             NULL,           {}                                                      },
        !           111: };
        !           112: 
        !           113: static endecode_test_t *endecode_tests[] = {
        !           114:        endecode_test_simple,
        !           115:        endecode_test_nested,
        !           116:        endecode_test_list,
        !           117:        endecode_test_blobs,
        !           118: };
        !           119: 
        !           120: typedef struct {
        !           121:        enumerator_t public;
        !           122:        endecode_test_t *next;
        !           123: } endecode_enum_t;
        !           124: 
        !           125: METHOD(enumerator_t, endecode_enumerate, bool,
        !           126:        endecode_enum_t *this, va_list args)
        !           127: {
        !           128:        vici_type_t *type;
        !           129:        chunk_t *data;
        !           130:        char **name;
        !           131: 
        !           132:        VA_ARGS_VGET(args, type, name, data);
        !           133:        if (this->next)
        !           134:        {
        !           135:                *type = this->next->type;
        !           136:                *name = this->next->name;
        !           137:                *data = this->next->data;
        !           138:                if (this->next->type == VICI_END)
        !           139:                {
        !           140:                        this->next = NULL;
        !           141:                }
        !           142:                else
        !           143:                {
        !           144:                        this->next++;
        !           145:                }
        !           146:                return TRUE;
        !           147:        }
        !           148:        return FALSE;
        !           149: }
        !           150: 
        !           151: static enumerator_t *endecode_create_enumerator(endecode_test_t *test)
        !           152: {
        !           153:        endecode_enum_t *enumerator;
        !           154: 
        !           155:        INIT(enumerator,
        !           156:                .public = {
        !           157:                        .enumerate = enumerator_enumerate_default,
        !           158:                        .venumerate = _endecode_enumerate,
        !           159:                        .destroy = (void*)free,
        !           160:                },
        !           161:                .next = test,
        !           162:        );
        !           163: 
        !           164:        return &enumerator->public;
        !           165: }
        !           166: 
        !           167: static void compare_vici(enumerator_t *parse, enumerator_t *tmpl)
        !           168: {
        !           169:        vici_type_t type, ttype;
        !           170:        char *name, *tname;
        !           171:        chunk_t data, tdata;;
        !           172: 
        !           173:        while (TRUE)
        !           174:        {
        !           175:                ck_assert(parse->enumerate(parse, &type, &name, &data));
        !           176:                ck_assert(tmpl->enumerate(tmpl, &ttype, &tname, &tdata));
        !           177:                ck_assert_int_eq(type, ttype);
        !           178:                switch (type)
        !           179:                {
        !           180:                        case VICI_END:
        !           181:                                return;
        !           182:                        case VICI_SECTION_START:
        !           183:                        case VICI_LIST_START:
        !           184:                                ck_assert(streq(name, tname));
        !           185:                                break;
        !           186:                        case VICI_LIST_ITEM:
        !           187:                                ck_assert(chunk_equals(data, tdata));
        !           188:                                break;
        !           189:                        case VICI_KEY_VALUE:
        !           190:                                ck_assert(streq(name, tname));
        !           191:                                ck_assert(chunk_equals(data, tdata));
        !           192:                                break;
        !           193:                        case VICI_SECTION_END:
        !           194:                        case VICI_LIST_END:
        !           195:                                break;
        !           196:                        default:
        !           197:                                ck_assert(FALSE);
        !           198:                                break;
        !           199:                }
        !           200:        }
        !           201: }
        !           202: 
        !           203: START_TEST(test_endecode)
        !           204: {
        !           205:        enumerator_t *parse, *tmpl;
        !           206:        vici_message_t *m;
        !           207:        chunk_t data;
        !           208: 
        !           209:        tmpl = endecode_create_enumerator(endecode_tests[_i]);
        !           210:        m = vici_message_create_from_enumerator(tmpl);
        !           211:        ck_assert(m);
        !           212:        data = chunk_clone(m->get_encoding(m));
        !           213:        tmpl = endecode_create_enumerator(endecode_tests[_i]);
        !           214:        parse = m->create_enumerator(m);
        !           215:        ck_assert(parse);
        !           216:        compare_vici(parse, tmpl);
        !           217:        tmpl->destroy(tmpl);
        !           218:        parse->destroy(parse);
        !           219:        m->destroy(m);
        !           220: 
        !           221:        m = vici_message_create_from_data(data, TRUE);
        !           222:        ck_assert(m);
        !           223:        tmpl = endecode_create_enumerator(endecode_tests[_i]);
        !           224:        parse = m->create_enumerator(m);
        !           225:        ck_assert(parse);
        !           226:        compare_vici(parse, tmpl);
        !           227:        tmpl->destroy(tmpl);
        !           228:        parse->destroy(parse);
        !           229:        m->destroy(m);
        !           230: }
        !           231: END_TEST
        !           232: 
        !           233: START_TEST(test_vararg)
        !           234: {
        !           235:        enumerator_t *parse, *tmpl;
        !           236:        vici_message_t *m;
        !           237: 
        !           238:        m = vici_message_create_from_args(
        !           239:                VICI_SECTION_START, "section1",
        !           240:                 VICI_LIST_START, "list1",
        !           241:                  VICI_LIST_ITEM, chunk_from_str("item1"),
        !           242:                  VICI_LIST_ITEM, chunk_from_str("item2"),
        !           243:                 VICI_LIST_END,
        !           244:                 VICI_KEY_VALUE, "key1", chunk_from_str("value1"),
        !           245:                 VICI_SECTION_END,
        !           246:                VICI_END);
        !           247:        ck_assert(m);
        !           248:        tmpl = endecode_create_enumerator(endecode_test_list);
        !           249:        parse = m->create_enumerator(m);
        !           250:        ck_assert(parse);
        !           251: 
        !           252:        compare_vici(parse, tmpl);
        !           253: 
        !           254:        m->destroy(m);
        !           255:        tmpl->destroy(tmpl);
        !           256:        parse->destroy(parse);
        !           257: }
        !           258: END_TEST
        !           259: 
        !           260: START_TEST(test_builder)
        !           261: {
        !           262:        enumerator_t *parse, *tmpl;
        !           263:        vici_message_t *m;
        !           264:        vici_builder_t *b;
        !           265: 
        !           266:        b = vici_builder_create();
        !           267:        b->add(b, VICI_SECTION_START, "section1");
        !           268:        b->add(b,  VICI_LIST_START, "list1");
        !           269:        b->add(b,   VICI_LIST_ITEM, chunk_from_str("item1"));
        !           270:        b->add(b,   VICI_LIST_ITEM, chunk_from_str("item2"));
        !           271:        b->add(b,  VICI_LIST_END);
        !           272:        b->add(b,  VICI_KEY_VALUE, "key1", chunk_from_str("value1"));
        !           273:        b->add(b, VICI_SECTION_END);
        !           274:        m = b->finalize(b);
        !           275:        ck_assert(m);
        !           276:        tmpl = endecode_create_enumerator(endecode_test_list);
        !           277:        parse = m->create_enumerator(m);
        !           278:        ck_assert(parse);
        !           279: 
        !           280:        compare_vici(parse, tmpl);
        !           281: 
        !           282:        m->destroy(m);
        !           283:        tmpl->destroy(tmpl);
        !           284:        parse->destroy(parse);
        !           285: }
        !           286: END_TEST
        !           287: 
        !           288: START_TEST(test_builder_fmt)
        !           289: {
        !           290:        enumerator_t *parse, *tmpl;
        !           291:        vici_message_t *m;
        !           292:        vici_builder_t *b;
        !           293: 
        !           294:        b = vici_builder_create();
        !           295:        b->begin_section(b, "section1");
        !           296:        b->begin_list(b, "list1");
        !           297:        b->add_li(b, "item%u", 1);
        !           298:        b->add_li(b, "%s%u", "item", 2);
        !           299:        b->end_list(b);
        !           300:        b->add_kv(b, "key1", "value%u", 1);
        !           301:        b->end_section(b);
        !           302:        m = b->finalize(b);
        !           303:        ck_assert(m);
        !           304:        tmpl = endecode_create_enumerator(endecode_test_list);
        !           305:        parse = m->create_enumerator(m);
        !           306:        ck_assert(parse);
        !           307: 
        !           308:        compare_vici(parse, tmpl);
        !           309: 
        !           310:        m->destroy(m);
        !           311:        tmpl->destroy(tmpl);
        !           312:        parse->destroy(parse);
        !           313: }
        !           314: END_TEST
        !           315: 
        !           316: static vici_message_t* build_getter_msg()
        !           317: {
        !           318:        return vici_message_create_from_args(
        !           319:                        VICI_KEY_VALUE, "key1", chunk_from_str("1"),
        !           320:                        VICI_SECTION_START, "section1",
        !           321:                         VICI_KEY_VALUE, "key2", chunk_from_str("0x12"),
        !           322:                         VICI_SECTION_START, "section2",
        !           323:                          VICI_KEY_VALUE, "key3", chunk_from_str("-1"),
        !           324:                         VICI_SECTION_END,
        !           325:                         VICI_KEY_VALUE, "key4", chunk_from_str("asdf"),
        !           326:                        VICI_SECTION_END,
        !           327:                        VICI_KEY_VALUE, "key5", chunk_from_str(""),
        !           328:                        VICI_END);
        !           329: }
        !           330: 
        !           331: START_TEST(test_get_str)
        !           332: {
        !           333:        vici_message_t *m;
        !           334: 
        !           335:        m = build_getter_msg();
        !           336: 
        !           337:        ck_assert_str_eq(m->get_str(m, "def", "key1"), "1");
        !           338:        ck_assert_str_eq(m->get_str(m, "def", "section1.key2"), "0x12");
        !           339:        ck_assert_str_eq(m->get_str(m, "def", "section%d.section2.key3", 1), "-1");
        !           340:        ck_assert_str_eq(m->get_str(m, "def", "section1.key4"), "asdf");
        !           341:        ck_assert_str_eq(m->get_str(m, "def", "key5"), "");
        !           342:        ck_assert_str_eq(m->get_str(m, "no", "nonexistent"), "no");
        !           343:        ck_assert_str_eq(m->get_str(m, "no", "n.o.n.e.x.i.s.t.e.n.t"), "no");
        !           344: 
        !           345:        m->destroy(m);
        !           346: }
        !           347: END_TEST
        !           348: 
        !           349: START_TEST(test_get_int)
        !           350: {
        !           351:        vici_message_t *m;
        !           352: 
        !           353:        m = build_getter_msg();
        !           354: 
        !           355:        ck_assert_int_eq(m->get_int(m, 2, "key1"), 1);
        !           356:        ck_assert_int_eq(m->get_int(m, 2, "section1.key2"), 0x12);
        !           357:        ck_assert_int_eq(m->get_int(m, 2, "section1.section2.key3"), -1);
        !           358:        ck_assert_int_eq(m->get_int(m, 2, "section1.key4"), 2);
        !           359:        ck_assert_int_eq(m->get_int(m, 2, "key5"), 2);
        !           360:        ck_assert_int_eq(m->get_int(m, 2, "nonexistent"), 2);
        !           361:        ck_assert_int_eq(m->get_int(m, 2, "n.o.n.e.x.i.s.t.e.n.t"), 2);
        !           362: 
        !           363:        m->destroy(m);
        !           364: }
        !           365: END_TEST
        !           366: 
        !           367: START_TEST(test_get_bool)
        !           368: {
        !           369:        vici_message_t *m;
        !           370: 
        !           371:        m = build_getter_msg();
        !           372: 
        !           373:        ck_assert(m->get_bool(m, TRUE, "key1"));
        !           374:        ck_assert(m->get_bool(m, FALSE, "key1"));
        !           375: 
        !           376:        ck_assert(m->get_bool(m, TRUE, "section1.key2"));
        !           377:        ck_assert(m->get_bool(m, TRUE, "section1.section2.key3"));
        !           378:        ck_assert(m->get_bool(m, TRUE, "section1.key4"));
        !           379:        ck_assert(m->get_bool(m, TRUE, "key5"));
        !           380:        ck_assert(m->get_bool(m, TRUE, "nonexistent"));
        !           381:        ck_assert(m->get_bool(m, TRUE, "n.o.n.e.x.i.s.t.e.n.t"));
        !           382: 
        !           383:        ck_assert(!m->get_bool(m, FALSE, "section1.key2"));
        !           384:        ck_assert(!m->get_bool(m, FALSE, "section1.section2.key3"));
        !           385:        ck_assert(!m->get_bool(m, FALSE, "section1.key4"));
        !           386:        ck_assert(!m->get_bool(m, FALSE, "key5"));
        !           387:        ck_assert(!m->get_bool(m, FALSE, "nonexistent"));
        !           388:        ck_assert(!m->get_bool(m, FALSE, "n.o.n.e.x.i.s.t.e.n.t"));
        !           389: 
        !           390:        m->destroy(m);
        !           391: }
        !           392: END_TEST
        !           393: 
        !           394: START_TEST(test_get_value)
        !           395: {
        !           396:        vici_message_t *m;
        !           397:        chunk_t d = chunk_from_chars('d','e','f');
        !           398: 
        !           399:        m = build_getter_msg();
        !           400: 
        !           401:        ck_assert_chunk_eq(m->get_value(m, d, "key1"), chunk_from_str("1"));
        !           402:        ck_assert_chunk_eq(m->get_value(m, d, "section1.key2"), chunk_from_str("0x12"));
        !           403:        ck_assert_chunk_eq(m->get_value(m, d, "section1.section2.key3"), chunk_from_str("-1"));
        !           404:        ck_assert_chunk_eq(m->get_value(m, d, "section1.key4"), chunk_from_str("asdf"));
        !           405:        ck_assert_chunk_eq(m->get_value(m, d, "key5"), chunk_empty);
        !           406:        ck_assert_chunk_eq(m->get_value(m, d, "nonexistent"), d);
        !           407:        ck_assert_chunk_eq(m->get_value(m, d, "n.o.n.e.x.i.s.t.e.n.t"), d);
        !           408: 
        !           409:        m->destroy(m);
        !           410: }
        !           411: END_TEST
        !           412: 
        !           413: Suite *message_suite_create()
        !           414: {
        !           415:        Suite *s;
        !           416:        TCase *tc;
        !           417: 
        !           418:        s = suite_create("vici message");
        !           419: 
        !           420:        tc = tcase_create("enumerator en/decode");
        !           421:        tcase_add_loop_test(tc, test_endecode, 0, countof(endecode_tests));
        !           422:        suite_add_tcase(s, tc);
        !           423: 
        !           424:        tc = tcase_create("vararg encode");
        !           425:        tcase_add_test(tc, test_vararg);
        !           426:        suite_add_tcase(s, tc);
        !           427: 
        !           428:        tc = tcase_create("builder encode");
        !           429:        tcase_add_test(tc, test_builder);
        !           430:        suite_add_tcase(s, tc);
        !           431: 
        !           432:        tc = tcase_create("builder format encode");
        !           433:        tcase_add_test(tc, test_builder_fmt);
        !           434:        suite_add_tcase(s, tc);
        !           435: 
        !           436:        tc = tcase_create("convenience getters");
        !           437:        tcase_add_test(tc, test_get_str);
        !           438:        tcase_add_test(tc, test_get_int);
        !           439:        tcase_add_test(tc, test_get_bool);
        !           440:        tcase_add_test(tc, test_get_value);
        !           441:        suite_add_tcase(s, tc);
        !           442: 
        !           443:        return s;
        !           444: }

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