fixed another 64bit compiler warning
[strongswan.git] / src / charon / plugins / unit_tester / tests / test_pool.c
1 /*
2 * Copyright (C) 2008 Martin Willi
3 * 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 <sys/time.h>
17 #include <time.h>
18 #include <pthread.h>
19
20 #include <library.h>
21 #include <daemon.h>
22
23 #define ALLOCS 1000
24 #define THREADS 20
25
26 static void* testing(void *thread)
27 {
28 int i;
29 host_t *addr[ALLOCS];
30 identification_t *id[ALLOCS];
31
32 /* prepare identities */
33 for (i = 0; i < ALLOCS; i++)
34 {
35 char buf[256];
36
37 snprintf(buf, sizeof(buf), "%d-%d@strongswan.org", (uintptr_t)thread, i);
38 id[i] = identification_create_from_string(buf);
39 }
40
41 /* allocate addresses */
42 for (i = 0; i < ALLOCS; i++)
43 {
44 addr[i] = charon->attributes->acquire_address(charon->attributes,
45 "test", id[i], NULL);
46 if (!addr[i])
47 {
48 return (void*)FALSE;
49 }
50 }
51
52 /* release addresses */
53 for (i = 0; i < ALLOCS; i++)
54 {
55 charon->attributes->release_address(charon->attributes, "test", addr[i], id[i]);
56 }
57
58 /* cleanup */
59 for (i = 0; i < ALLOCS; i++)
60 {
61 addr[i]->destroy(addr[i]);
62 id[i]->destroy(id[i]);
63 }
64 return (void*)TRUE;
65 }
66
67
68 /*******************************************************************************
69 * SQL pool performance test
70 ******************************************************************************/
71 bool test_pool()
72 {
73 uintptr_t i;
74 void *res;
75 pthread_t thread[THREADS];
76
77 for (i = 0; i < THREADS; i++)
78 {
79 if (pthread_create(&thread[i], NULL, (void*)testing, (void*)i) < 0)
80 {
81 return FALSE;
82 }
83 }
84 for (i = 0; i < THREADS; i++)
85 {
86 pthread_join(thread[i], &res);
87 if (res == NULL)
88 {
89 return FALSE;
90 }
91 }
92 return TRUE;
93 }
94