2 * Copyright (C) 2012 Reto Buerki
3 * Copyright (C) 2012 Adrian-Ken Rueegsegger
5 * Copyright (C) secunet Security Networks AG
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 #include <tests/test_suite.h>
20 #include "tkm_id_manager.h"
22 static const tkm_limits_t limits
= {125, 100, 55, 30, 200, 42};
24 START_TEST(test_id_mgr_creation
)
26 tkm_id_manager_t
*idmgr
= NULL
;
28 idmgr
= tkm_id_manager_create(limits
);
29 fail_if(idmgr
== NULL
, "Error creating tkm id manager");
31 idmgr
->destroy(idmgr
);
35 START_TEST(test_acquire_id
)
38 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
40 for (i
= 0; i
< TKM_CTX_MAX
; i
++)
42 id
= idmgr
->acquire_id(idmgr
, i
);
43 fail_unless(id
> 0, "Error acquiring id of context kind %d", i
);
45 /* Reset test variable */
49 idmgr
->destroy(idmgr
);
53 START_TEST(test_acquire_id_invalid_kind
)
56 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
58 id
= idmgr
->acquire_id(idmgr
, TKM_CTX_MAX
);
59 fail_unless(id
== 0, "Acquired id for invalid context kind %d", TKM_CTX_MAX
);
61 /* Reset test variable */
64 id
= idmgr
->acquire_id(idmgr
, -1);
65 fail_unless(id
== 0, "Acquired id for invalid context kind %d", -1);
67 idmgr
->destroy(idmgr
);
71 START_TEST(test_acquire_id_same
)
74 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
76 id1
= idmgr
->acquire_id(idmgr
, TKM_CTX_NONCE
);
77 fail_unless(id1
> 0, "Unable to acquire first id");
79 /* Acquire another id, must be different than first */
80 id2
= idmgr
->acquire_id(idmgr
, TKM_CTX_NONCE
);
81 fail_unless(id2
> 0, "Unable to acquire second id");
82 fail_unless(id1
!= id2
, "Same id received twice");
84 idmgr
->destroy(idmgr
);
88 START_TEST(test_acquire_ref
)
91 bool acquired
= false;
92 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
94 for (i
= 0; i
< TKM_CTX_MAX
; i
++)
96 id
= idmgr
->acquire_id(idmgr
, i
);
97 acquired
= idmgr
->acquire_ref(idmgr
, i
, id
);
98 fail_unless(acquired
, "Error acquiring reference context kind %d", i
);
100 /* Reset test variable */
104 idmgr
->destroy(idmgr
);
108 START_TEST(test_acquire_ref_invalid_kind
)
111 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
113 acquired
= idmgr
->acquire_ref(idmgr
, TKM_CTX_MAX
, 1);
114 fail_if(acquired
, "Acquired reference for invalid context kind %d", TKM_CTX_MAX
);
116 /* Reset test variable */
119 acquired
= idmgr
->acquire_ref(idmgr
, -1, 1);
120 fail_if(acquired
, "Acquired reference for invalid context kind %d", -1);
122 idmgr
->destroy(idmgr
);
126 START_TEST(test_acquire_ref_invalid_id
)
130 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
132 for (i
= 0; i
< TKM_CTX_MAX
; i
++)
134 acquired
= idmgr
->acquire_ref(idmgr
, i
, -1);
136 "Acquired reference for negative id of context kind %d", i
);
138 /* Reset test variable */
141 acquired
= idmgr
->acquire_ref(idmgr
, i
, limits
[i
] + 1);
143 "Acquired reference exceeding limit of context kind %d", i
);
145 /* Reset test variable */
149 idmgr
->destroy(idmgr
);
153 START_TEST(test_release_id
)
155 int i
, count
, id
= 0;
156 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
158 for (i
= 0; i
< TKM_CTX_MAX
; i
++)
160 id
= idmgr
->acquire_id(idmgr
, i
);
161 count
= idmgr
->release_id(idmgr
, i
, id
);
163 fail_unless(count
== 0, "Error releasing id of context kind %d", i
);
165 /* Reset count variable */
169 idmgr
->destroy(idmgr
);
173 START_TEST(test_release_id_invalid_kind
)
176 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
178 count
= idmgr
->release_id(idmgr
, TKM_CTX_MAX
, 1);
179 fail_if(count
>= 0, "Released id for invalid context kind %d", TKM_CTX_MAX
);
181 /* Reset test variable */
184 count
= idmgr
->release_id(idmgr
, -1, 1);
185 fail_if(count
>= 0, "Released id for invalid context kind %d", -1);
187 idmgr
->destroy(idmgr
);
191 START_TEST(test_release_id_nonexistent
)
194 tkm_id_manager_t
*idmgr
= tkm_id_manager_create(limits
);
196 count
= idmgr
->release_id(idmgr
, TKM_CTX_NONCE
, 1);
197 fail_unless(count
== 0, "Release of nonexistent id failed");
199 idmgr
->destroy(idmgr
);
203 Suite
*make_id_manager_tests()
208 s
= suite_create("context id manager");
210 tc
= tcase_create("creation");
211 tcase_add_test(tc
, test_id_mgr_creation
);
212 suite_add_tcase(s
, tc
);
214 tc
= tcase_create("acquire");
215 tcase_add_test(tc
, test_acquire_id
);
216 tcase_add_test(tc
, test_acquire_id_invalid_kind
);
217 tcase_add_test(tc
, test_acquire_id_same
);
218 tcase_add_test(tc
, test_acquire_ref
);
219 tcase_add_test(tc
, test_acquire_ref_invalid_kind
);
220 tcase_add_test(tc
, test_acquire_ref_invalid_id
);
221 suite_add_tcase(s
, tc
);
223 tc
= tcase_create("release");
224 tcase_add_test(tc
, test_release_id
);
225 tcase_add_test(tc
, test_release_id_invalid_kind
);
226 tcase_add_test(tc
, test_release_id_nonexistent
);
227 suite_add_tcase(s
, tc
);