Annotation of embedaddon/strongswan/src/libcharon/tests/suites/test_peer_cfg.c, revision 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>