Annotation of embedaddon/strongswan/src/libcharon/tests/suites/test_peer_cfg.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2018 Tobias Brunner
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: #include "test_suite.h"
                     17: 
                     18: #include <config/peer_cfg.h>
                     19: #include <config/child_cfg.h>
                     20: 
                     21: /**
                     22:  * Create a simple IKE config
                     23:  */
                     24: static ike_cfg_t *create_ike_cfg()
                     25: {
                     26:        ike_cfg_create_t ike = {
                     27:                .version = IKEV2,
                     28:                .local = "127.0.0.1",
                     29:                .local_port = 500,
                     30:                .remote = "127.0.0.1",
                     31:                .remote_port = 500,
                     32:        };
                     33:        return ike_cfg_create(&ike);
                     34: }
                     35: 
                     36: /**
                     37:  * Create a simple peer config
                     38:  */
                     39: static peer_cfg_t *create_peer_cfg()
                     40: {
                     41:        peer_cfg_create_t peer = {};
                     42: 
                     43:        return peer_cfg_create("peer", create_ike_cfg(), &peer);
                     44: }
                     45: 
                     46: static peer_cfg_t *peer_a, *peer_b;
                     47: 
                     48: START_SETUP(setup_replace)
                     49: {
                     50:        peer_a = create_peer_cfg();
                     51:        peer_b = create_peer_cfg();
                     52: }
                     53: END_SETUP
                     54: 
                     55: START_TEARDOWN(teardown_replace)
                     56: {
                     57:        peer_a->destroy(peer_a);
                     58:        peer_b->destroy(peer_b);
                     59: }
                     60: END_TEARDOWN
                     61: 
                     62: /**
                     63:  * Check if the changes are correctly reported
                     64:  * All given objects are destroyed
                     65:  */
                     66: static void test_replace(enumerator_t *changes, linked_list_t *rem,
                     67:                                                 linked_list_t *add)
                     68: {
                     69:        child_cfg_t *child;
                     70:        bool added;
                     71: 
                     72:        while (changes->enumerate(changes, &child, &added))
                     73:        {
                     74:                if (added)
                     75:                {
                     76:                        ck_assert_msg(add->remove(add, child, NULL) == 1, "child config "
                     77:                                                  "was unexpectedly added");
                     78:                }
                     79:                else
                     80:                {
                     81:                        ck_assert_msg(rem->remove(rem, child, NULL) == 1, "child config "
                     82:                                                  "was unexpectedly removed");
                     83:                }
                     84:        }
                     85:        changes->destroy(changes);
                     86:        ck_assert_msg(!rem->get_count(rem), "expected child config was not removed");
                     87:        ck_assert_msg(!add->get_count(add), "expected child config was not added");
                     88:        rem->destroy(rem);
                     89:        add->destroy(add);
                     90: }
                     91: 
                     92: /**
                     93:  * Check if the given child configs are contained in the peer config
                     94:  * The list is destroyed
                     95:  */
                     96: static void test_child_cfgs(peer_cfg_t *peer, linked_list_t *children)
                     97: {
                     98:        enumerator_t *enumerator;
                     99:        child_cfg_t *child;
                    100: 
                    101:        enumerator = peer->create_child_cfg_enumerator(peer);
                    102:        while (enumerator->enumerate(enumerator, &child))
                    103:        {
                    104:                ck_assert_msg(children->remove(children, child, NULL) == 1, "child "
                    105:                                          "config was unexpectedly contained in peer config");
                    106:        }
                    107:        enumerator->destroy(enumerator);
                    108:        ck_assert_msg(!children->get_count(children), "expected child config was "
                    109:                                  "not contained in peer config");
                    110:        children->destroy(children);
                    111: }
                    112: 
                    113: START_TEST(replace_child_cfgs_empty)
                    114: {
                    115:        child_cfg_create_t cfg = {};
                    116:        child_cfg_t *child;
                    117: 
                    118:        child = child_cfg_create("c", &cfg);
                    119:        peer_b->add_child_cfg(peer_b, child->get_ref(child));
                    120: 
                    121:        test_replace(peer_a->replace_child_cfgs(peer_a, peer_b),
                    122:                                 linked_list_create(),
                    123:                                 linked_list_create_with_items(child, NULL));
                    124:        test_child_cfgs(peer_a,
                    125:                                        linked_list_create_with_items(child, NULL));
                    126: 
                    127:        child->destroy(child);
                    128: }
                    129: END_TEST
                    130: 
                    131: START_TEST(replace_child_cfgs_same)
                    132: {
                    133:        child_cfg_create_t cfg = {};
                    134:        child_cfg_t *child;
                    135: 
                    136:        child = child_cfg_create("c", &cfg);
                    137:        peer_a->add_child_cfg(peer_a, child->get_ref(child));
                    138:        peer_b->add_child_cfg(peer_b, child->get_ref(child));
                    139: 
                    140:        test_replace(peer_a->replace_child_cfgs(peer_a, peer_b),
                    141:                                 linked_list_create(),
                    142:                                 linked_list_create());
                    143:        test_child_cfgs(peer_a,
                    144:                                        linked_list_create_with_items(child, NULL));
                    145: 
                    146:        child->destroy(child);
                    147: }
                    148: END_TEST
                    149: 
                    150: START_TEST(replace_child_cfgs_same_replace)
                    151: {
                    152:        child_cfg_create_t cfg = {};
                    153:        child_cfg_t *c1, *c2;
                    154: 
                    155:        c1 = child_cfg_create("c1", &cfg);
                    156:        peer_a->add_child_cfg(peer_a, c1->get_ref(c1));
                    157:        c2 = child_cfg_create("c2", &cfg);
                    158:        peer_b->add_child_cfg(peer_b, c2->get_ref(c2));
                    159: 
                    160:        test_replace(peer_a->replace_child_cfgs(peer_a, peer_b),
                    161:                                 linked_list_create(),
                    162:                                 linked_list_create());
                    163:        test_child_cfgs(peer_a,
                    164:                                        linked_list_create_with_items(c2, NULL));
                    165: 
                    166:        c1->destroy(c1);
                    167:        c2->destroy(c2);
                    168: }
                    169: END_TEST
                    170: 
                    171: START_TEST(replace_child_cfgs_clear)
                    172: {
                    173:        child_cfg_create_t cfg = {};
                    174:        child_cfg_t *child;
                    175: 
                    176:        child = child_cfg_create("c", &cfg);
                    177:        peer_a->add_child_cfg(peer_a, child->get_ref(child));
                    178: 
                    179:        test_replace(peer_a->replace_child_cfgs(peer_a, peer_b),
                    180:                                 linked_list_create_with_items(child, NULL),
                    181:                                 linked_list_create());
                    182:        test_child_cfgs(peer_a,
                    183:                                        linked_list_create());
                    184: 
                    185:        child->destroy(child);
                    186: }
                    187: END_TEST
                    188: 
                    189: START_TEST(replace_child_cfgs_mixed)
                    190: {
                    191:        child_cfg_create_t cfg1 = {}, cfg2 = { .mode = MODE_TUNNEL, };
                    192:        child_cfg_create_t cfg3 = { .mode = MODE_TRANSPORT};
                    193:        child_cfg_t *c1, *c2, *c3, *c4;
                    194: 
                    195:        c1 = child_cfg_create("c1", &cfg1);
                    196:        peer_a->add_child_cfg(peer_a, c1->get_ref(c1));
                    197:        c2 = child_cfg_create("c2", &cfg2);
                    198:        peer_a->add_child_cfg(peer_a, c2->get_ref(c2));
                    199: 
                    200:        c3 = child_cfg_create("c3", &cfg3);
                    201:        peer_b->add_child_cfg(peer_b, c3->get_ref(c3));
                    202:        c4 = child_cfg_create("c4", &cfg2);
                    203:        peer_b->add_child_cfg(peer_b, c4->get_ref(c4));
                    204: 
                    205:        test_replace(peer_a->replace_child_cfgs(peer_a, peer_b),
                    206:                                 linked_list_create_with_items(c1, NULL),
                    207:                                 linked_list_create_with_items(c3, NULL));
                    208:        test_child_cfgs(peer_a,
                    209:                                        linked_list_create_with_items(c3, c4, NULL));
                    210: 
                    211:        c1->destroy(c1);
                    212:        c2->destroy(c2);
                    213:        c3->destroy(c3);
                    214:        c4->destroy(c4);
                    215: }
                    216: END_TEST
                    217: 
                    218: Suite *peer_cfg_suite_create()
                    219: {
                    220:        Suite *s;
                    221:        TCase *tc;
                    222: 
                    223:        s = suite_create("peer_cfg");
                    224: 
                    225:        tc = tcase_create("replace_child_cfgs");
                    226:        tcase_add_checked_fixture(tc, setup_replace, teardown_replace);
                    227:        tcase_add_test(tc, replace_child_cfgs_empty);
                    228:        tcase_add_test(tc, replace_child_cfgs_same);
                    229:        tcase_add_test(tc, replace_child_cfgs_same_replace);
                    230:        tcase_add_test(tc, replace_child_cfgs_clear);
                    231:        tcase_add_test(tc, replace_child_cfgs_mixed);
                    232:        suite_add_tcase(s, tc);
                    233: 
                    234:        return s;
                    235: }

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