Annotation of embedaddon/strongswan/src/libcharon/tests/suites/test_mem_pool.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2014 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 <attributes/mem_pool.h>
19:
20: static void assert_host(char *expected, host_t *host)
21: {
22: if (!expected)
23: {
24: ck_assert_msg(!host, "not expecting IP != %+H", host);
25: }
26: else
27: {
28: host_t *verifier;
29: verifier = host_create_from_string(expected, 0);
30: ck_assert_msg(host, "expected IP %+H != NULL", verifier);
31: ck_assert_msg(verifier->ip_equals(verifier, host), "expected IP %+H != "
32: "%+H", verifier, host);;
33: verifier->destroy(verifier);
34: }
35: }
36:
37: static void assert_acquire(mem_pool_t *pool, char *requested, char *expected,
38: mem_pool_op_t operation)
39: {
40: identification_t *id;
41: host_t *req, *acquired;
42:
43: id = identification_create_from_string("tester");
44: req = host_create_from_string(requested, 0);
45:
46: acquired = pool->acquire_address(pool, id, req, operation, NULL);
47: assert_host(expected, acquired);
48: DESTROY_IF(acquired);
49:
50: req->destroy(req);
51: id->destroy(id);
52: }
53:
54: static void assert_acquires_new(mem_pool_t *pool, char *pattern, int first)
55: {
56: char expected[16];
57: int i;
58:
59: for (i = 0; i < pool->get_size(pool); i++)
60: {
61: snprintf(expected, sizeof(expected), pattern, first + i);
62: assert_acquire(pool, "0.0.0.0", expected, MEM_POOL_NEW);
63: ck_assert_int_eq(i + 1, pool->get_online(pool));
64: }
65: assert_acquire(pool, "0.0.0.0", NULL, MEM_POOL_NEW);
66: }
67:
68: START_TEST(test_config)
69: {
70: mem_pool_t *pool;
71:
72: pool = mem_pool_create("test", NULL, 0);
73: ck_assert_int_eq(0, pool->get_size(pool));
74: assert_acquire(pool, "192.168.0.1", "192.168.0.1", MEM_POOL_NEW);
75: assert_acquire(pool, "10.0.1.1", "10.0.1.1", MEM_POOL_NEW);
76: assert_acquire(pool, "0.0.0.0", "0.0.0.0", MEM_POOL_NEW);
77: assert_acquire(pool, "255.255.255.255", "255.255.255.255", MEM_POOL_NEW);
78: ck_assert_int_eq(0, pool->get_online(pool));
79: pool->destroy(pool);
80: }
81: END_TEST
82:
83: START_TEST(test_cidr)
84: {
85: mem_pool_t *pool;
86: host_t *base;
87:
88: base = host_create_from_string("192.168.0.0", 0);
89:
90: pool = mem_pool_create("test", base, 32);
91: ck_assert_int_eq(1, pool->get_size(pool));
92: assert_acquires_new(pool, "192.168.0.%d", 0);
93: pool->destroy(pool);
94:
95: pool = mem_pool_create("test", base, 31);
96: ck_assert_int_eq(2, pool->get_size(pool));
97: assert_acquires_new(pool, "192.168.0.%d", 0);
98: pool->destroy(pool);
99:
100: pool = mem_pool_create("test", base, 30);
101: ck_assert_int_eq(2, pool->get_size(pool));
102: assert_acquires_new(pool, "192.168.0.%d", 1);
103: pool->destroy(pool);
104:
105: pool = mem_pool_create("test", base, 29);
106: ck_assert_int_eq(6, pool->get_size(pool));
107: assert_acquires_new(pool, "192.168.0.%d", 1);
108: pool->destroy(pool);
109:
110: pool = mem_pool_create("test", base, 24);
111: ck_assert_int_eq(254, pool->get_size(pool));
112: assert_acquires_new(pool, "192.168.0.%d", 1);
113: pool->destroy(pool);
114:
115: base->destroy(base);
116: }
117: END_TEST
118:
119: START_TEST(test_cidr_offset)
120: {
121: mem_pool_t *pool;
122: host_t *base;
123:
124: base = host_create_from_string("192.168.0.1", 0);
125: pool = mem_pool_create("test", base, 31);
126: ck_assert_int_eq(1, pool->get_size(pool));
127: assert_acquires_new(pool, "192.168.0.%d", 1);
128: pool->destroy(pool);
129:
130: pool = mem_pool_create("test", base, 30);
131: ck_assert_int_eq(2, pool->get_size(pool));
132: assert_acquires_new(pool, "192.168.0.%d", 1);
133: pool->destroy(pool);
134: base->destroy(base);
135:
136: base = host_create_from_string("192.168.0.2", 0);
137: pool = mem_pool_create("test", base, 30);
138: ck_assert_int_eq(1, pool->get_size(pool));
139: assert_acquires_new(pool, "192.168.0.%d", 2);
140: pool->destroy(pool);
141:
142: pool = mem_pool_create("test", base, 24);
143: ck_assert_int_eq(253, pool->get_size(pool));
144: assert_acquires_new(pool, "192.168.0.%d", 2);
145: pool->destroy(pool);
146: base->destroy(base);
147:
148: base = host_create_from_string("192.168.0.254", 0);
149: pool = mem_pool_create("test", base, 24);
150: ck_assert_int_eq(1, pool->get_size(pool));
151: assert_acquires_new(pool, "192.168.0.%d", 254);
152: pool->destroy(pool);
153: base->destroy(base);
154:
155: /* due to size == 0 we get the requested IP back */
156: base = host_create_from_string("192.168.0.255", 0);
157: pool = mem_pool_create("test", base, 24);
158: ck_assert_int_eq(0, pool->get_size(pool));
159: assert_acquire(pool, "192.168.0.1", "192.168.0.1", MEM_POOL_NEW);
160: pool->destroy(pool);
161:
162: base->destroy(base);
163: }
164: END_TEST
165:
166: START_TEST(test_range)
167: {
168: mem_pool_t *pool;
169: host_t *from, *to;
170:
171: from = host_create_from_string("192.168.0.0", 0);
172: to = host_create_from_string("192.168.0.0", 0);
173: pool = mem_pool_create_range("test", from, to);
174: ck_assert_int_eq(1, pool->get_size(pool));
175: assert_acquires_new(pool, "192.168.0.%d", 0);
176: pool->destroy(pool);
177:
178: to->destroy(to);
179: to = host_create_from_string("192.168.0.1", 0);
180: pool = mem_pool_create_range("test", from, to);
181: ck_assert_int_eq(2, pool->get_size(pool));
182: assert_acquires_new(pool, "192.168.0.%d", 0);
183: pool->destroy(pool);
184:
185: from->destroy(from);
186: from = host_create_from_string("192.168.0.10", 0);
187: pool = mem_pool_create_range("test", from, to);
188: ck_assert(!pool);
189:
190: to->destroy(to);
191: to = host_create_from_string("192.168.0.20", 0);
192: pool = mem_pool_create_range("test", from, to);
193: ck_assert_int_eq(11, pool->get_size(pool));
194: assert_acquires_new(pool, "192.168.0.%d", 10);
195: pool->destroy(pool);
196:
197: from->destroy(from);
198: from = host_create_from_string("fec::1", 0);
199: to->destroy(to);
200: to = host_create_from_string("fed::1", 0);
201: pool = mem_pool_create_range("test", from, to);
202: ck_assert(!pool);
203:
204: from->destroy(from);
205: to->destroy(to);
206: }
207: END_TEST
208:
209: Suite *mem_pool_suite_create()
210: {
211: Suite *s;
212: TCase *tc;
213:
214: s = suite_create("mem_pool");
215:
216: tc = tcase_create("%config-like pool");
217: tcase_add_test(tc, test_config);
218: suite_add_tcase(s, tc);
219:
220: tc = tcase_create("cidr constructor");
221: tcase_add_test(tc, test_cidr);
222: tcase_add_test(tc, test_cidr_offset);
223: suite_add_tcase(s, tc);
224:
225: tc = tcase_create("range constructor");
226: tcase_add_test(tc, test_range);
227: suite_add_tcase(s, tc);
228:
229: return s;
230: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>