charon-tkm: Add acquire_ref method to ID manager

The function acquires a reference to the given context reference id for
a specific context kind.
This commit is contained in:
Adrian-Ken Rueegsegger
2017-09-15 12:16:57 +02:00
committed by Tobias Brunner
parent fcde9686f6
commit 1b2a8d963a
3 changed files with 108 additions and 0 deletions
+68
View File
@@ -84,6 +84,71 @@ START_TEST(test_acquire_id_same)
}
END_TEST
START_TEST(test_acquire_ref)
{
int i, id = 0;
bool acquired = false;
tkm_id_manager_t *idmgr = tkm_id_manager_create(limits);
for (i = 0; i < TKM_CTX_MAX; i++)
{
id = idmgr->acquire_id(idmgr, i);
acquired = idmgr->acquire_ref(idmgr, i, id);
fail_unless(acquired, "Error acquiring reference context kind %d", i);
/* Reset test variable */
acquired = false;
}
idmgr->destroy(idmgr);
}
END_TEST
START_TEST(test_acquire_ref_invalid_kind)
{
bool acquired;
tkm_id_manager_t *idmgr = tkm_id_manager_create(limits);
acquired = idmgr->acquire_ref(idmgr, TKM_CTX_MAX, 1);
fail_if(acquired, "Acquired reference for invalid context kind %d", TKM_CTX_MAX);
/* Reset test variable */
acquired = 0;
acquired = idmgr->acquire_ref(idmgr, -1, 1);
fail_if(acquired, "Acquired reference for invalid context kind %d", -1);
idmgr->destroy(idmgr);
}
END_TEST
START_TEST(test_acquire_ref_invalid_id)
{
int i;
bool acquired;
tkm_id_manager_t *idmgr = tkm_id_manager_create(limits);
for (i = 0; i < TKM_CTX_MAX; i++)
{
acquired = idmgr->acquire_ref(idmgr, i, -1);
fail_if(acquired,
"Acquired reference for negative id of context kind %d", i);
/* Reset test variable */
acquired = false;
acquired = idmgr->acquire_ref(idmgr, i, limits[i] + 1);
fail_if(acquired,
"Acquired reference exceeding limit of context kind %d", i);
/* Reset test variable */
acquired = false;
}
idmgr->destroy(idmgr);
}
END_TEST
START_TEST(test_release_id)
{
int i, id = 0;
@@ -150,6 +215,9 @@ Suite *make_id_manager_tests()
tcase_add_test(tc, test_acquire_id);
tcase_add_test(tc, test_acquire_id_invalid_kind);
tcase_add_test(tc, test_acquire_id_same);
tcase_add_test(tc, test_acquire_ref);
tcase_add_test(tc, test_acquire_ref_invalid_kind);
tcase_add_test(tc, test_acquire_ref_invalid_id);
suite_add_tcase(s, tc);
tc = tcase_create("release");