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