diff options
author | Martin Willi <martin@strongswan.org> | 2008-07-21 11:17:20 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-07-21 11:17:20 +0000 |
commit | 0a625fde3e38573f51807276bdee9f975d15b789 (patch) | |
tree | e3edb2f040e014cb36716072d59224f9ce61b971 | |
parent | 6b64fe2684e7ca431b131ef7c3542d54c6495444 (diff) | |
download | strongswan-0a625fde3e38573f51807276bdee9f975d15b789.tar.bz2 strongswan-0a625fde3e38573f51807276bdee9f975d15b789.tar.xz |
pool performance testing
-rw-r--r-- | src/charon/plugins/unit_tester/Makefile.am | 3 | ||||
-rw-r--r-- | src/charon/plugins/unit_tester/tests.h | 3 | ||||
-rw-r--r-- | src/charon/plugins/unit_tester/tests/test_pool.c | 102 |
3 files changed, 106 insertions, 2 deletions
diff --git a/src/charon/plugins/unit_tester/Makefile.am b/src/charon/plugins/unit_tester/Makefile.am index 2487cf207..0fd387f1f 100644 --- a/src/charon/plugins/unit_tester/Makefile.am +++ b/src/charon/plugins/unit_tester/Makefile.am @@ -16,6 +16,7 @@ libstrongswan_unit_tester_la_SOURCES = unit_tester.c unit_tester.h \ tests/test_rsa_gen.c \ tests/test_med_db.c \ tests/test_aes.c \ - tests/test_chunk.c + tests/test_chunk.c \ + tests/test_pool.c libstrongswan_unit_tester_la_LDFLAGS = -module diff --git a/src/charon/plugins/unit_tester/tests.h b/src/charon/plugins/unit_tester/tests.h index 6826fabac..e36000bd2 100644 --- a/src/charon/plugins/unit_tester/tests.h +++ b/src/charon/plugins/unit_tester/tests.h @@ -24,7 +24,7 @@ DEFINE_TEST("linked_list_t->remove()", test_list_remove, FALSE) DEFINE_TEST("simple enumerator", test_enumerate, FALSE) DEFINE_TEST("nested enumerator", test_enumerate_nested, FALSE) DEFINE_TEST("filtered enumerator", test_enumerate_filtered, FALSE) -DEFINE_TEST("token enumerator", test_enumerate_token, TRUE) +DEFINE_TEST("token enumerator", test_enumerate_token, FALSE) DEFINE_TEST("auth info", test_auth_info, FALSE) DEFINE_TEST("FIPS PRF", fips_prf_test, FALSE) DEFINE_TEST("CURL get", test_curl_get, FALSE) @@ -37,3 +37,4 @@ DEFINE_TEST("Mediation database key fetch", test_med_db, FALSE) DEFINE_TEST("AES-128 encryption", test_aes128, FALSE) DEFINE_TEST("AES-XCBC", test_aes_xcbc, FALSE) DEFINE_TEST("Base64 converter", test_chunk_base64, FALSE) +DEFINE_TEST("IP pool", test_pool, TRUE) diff --git a/src/charon/plugins/unit_tester/tests/test_pool.c b/src/charon/plugins/unit_tester/tests/test_pool.c new file mode 100644 index 000000000..5d5295bea --- /dev/null +++ b/src/charon/plugins/unit_tester/tests/test_pool.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2008 Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <sys/time.h> +#include <time.h> + +#include <library.h> +#include <daemon.h> + +#define ALLOCS 1000 +#define THREADS 20 + +static void* testing(void *thread) +{ + int i; + auth_info_t *auth; + host_t *addr[ALLOCS]; + identification_t *id[ALLOCS]; + + + auth = auth_info_create(); + + /* prepare identities */ + for (i = 0; i < ALLOCS; i++) + { + char buf[256]; + + snprintf(buf, sizeof(buf), "%d-%d@strongswan.org", (int)thread, i); + id[i] = identification_create_from_string(buf); + if (!id[i]) + { + return (void*)FALSE; + } + } + + /* allocate addresses */ + for (i = 0; i < ALLOCS; i++) + { + addr[i] = charon->attributes->acquire_address(charon->attributes, + "test", id[i], auth, NULL); + if (!addr[i]) + { + return (void*)FALSE; + } + } + + /* release addresses */ + for (i = 0; i < ALLOCS; i++) + { + charon->attributes->release_address(charon->attributes, "test", addr[i]); + } + + /* cleanup */ + for (i = 0; i < ALLOCS; i++) + { + addr[i]->destroy(addr[i]); + id[i]->destroy(id[i]); + } + auth->destroy(auth); + return (void*)TRUE; +} + + +/******************************************************************************* + * SQL pool performance test + ******************************************************************************/ +bool test_pool() +{ + int i; + void *res; + pthread_t thread[THREADS]; + + for (i = 0; i < THREADS; i++) + { + if (pthread_create(&thread[i], NULL, (void*)testing, (void*)i) < 0) + { + return FALSE; + } + } + for (i = 0; i < THREADS; i++) + { + pthread_join(thread[i], &res); + if (res == NULL) + { + return FALSE; + } + } + return TRUE; +} + |