From: Martin Willi Date: Wed, 23 Oct 2013 12:54:00 +0000 (+0200) Subject: unit-tests: Add a simple semaphore test X-Git-Tag: 5.1.2dr1~33^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffab2e0c953281aa0708a5dde4b7e64ddcd47c20;p=thirdparty%2Fstrongswan.git unit-tests: Add a simple semaphore test --- diff --git a/src/libstrongswan/tests/suites/test_threading.c b/src/libstrongswan/tests/suites/test_threading.c index 295b647ab6..dc7796d76c 100644 --- a/src/libstrongswan/tests/suites/test_threading.c +++ b/src/libstrongswan/tests/suites/test_threading.c @@ -25,6 +25,7 @@ #include #include #include +#include #include /******************************************************************************* @@ -777,6 +778,41 @@ START_TEST(test_rwlock_condvar_cancel) } END_TEST +/** + * Semaphore for different tests + */ +static semaphore_t *semaphore; + +static void *semaphore_run(void *data) +{ + semaphore->post(semaphore); + return NULL; +} + +START_TEST(test_semaphore) +{ + thread_t *threads[THREADS]; + int i, initial = 5; + + semaphore = semaphore_create(initial); + + for (i = 0; i < THREADS; i++) + { + threads[i] = thread_create(semaphore_run, NULL); + } + for (i = 0; i < THREADS + initial; i++) + { + semaphore->wait(semaphore); + } + for (i = 0; i < THREADS; i++) + { + threads[i]->join(threads[i]); + } + + semaphore->destroy(semaphore); +} +END_TEST + static void *join_run(void *data) { /* force some context switches */ @@ -1299,6 +1335,10 @@ Suite *threading_suite_create() tcase_add_test(tc, test_rwlock_condvar_cancel); suite_add_tcase(s, tc); + tc = tcase_create("semaphore"); + tcase_add_test(tc, test_semaphore); + suite_add_tcase(s, tc); + tc = tcase_create("thread joining"); tcase_add_test(tc, test_join); tcase_add_test(tc, test_join_exit);