From: Tobias Brunner Date: Wed, 27 Mar 2013 08:16:59 +0000 (+0100) Subject: Converted test for recursive mutex_t X-Git-Tag: 5.1.0dr1~129^2~34 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de42bf35f9c9f6312a28f8befd8b2a1eaa6d9bfc;p=thirdparty%2Fstrongswan.git Converted test for recursive mutex_t --- diff --git a/src/libcharon/plugins/unit_tester/Makefile.am b/src/libcharon/plugins/unit_tester/Makefile.am index db11d934c7..84628b507e 100644 --- a/src/libcharon/plugins/unit_tester/Makefile.am +++ b/src/libcharon/plugins/unit_tester/Makefile.am @@ -16,7 +16,6 @@ libstrongswan_unit_tester_la_SOURCES = \ tests/test_curl.c \ tests/test_mysql.c \ tests/test_sqlite.c \ - tests/test_mutex.c \ tests/test_rsa_gen.c \ tests/test_cert.c \ tests/test_med_db.c \ diff --git a/src/libcharon/plugins/unit_tester/tests.h b/src/libcharon/plugins/unit_tester/tests.h index 4fd358e6bd..bcb82c3bd8 100644 --- a/src/libcharon/plugins/unit_tester/tests.h +++ b/src/libcharon/plugins/unit_tester/tests.h @@ -22,7 +22,6 @@ DEFINE_TEST("auth cfg", test_auth_cfg, FALSE) DEFINE_TEST("CURL get", test_curl_get, FALSE) DEFINE_TEST("MySQL operations", test_mysql, FALSE) DEFINE_TEST("SQLite operations", test_sqlite, FALSE) -DEFINE_TEST("mutex primitive", test_mutex, FALSE) DEFINE_TEST("RSA key generation", test_rsa_gen, FALSE) DEFINE_TEST("RSA subjectPublicKeyInfo loading", test_rsa_load_any, FALSE) DEFINE_TEST("X509 certificate", test_cert_x509, FALSE) diff --git a/src/libstrongswan/tests/Makefile.am b/src/libstrongswan/tests/Makefile.am index bb1ce91a7b..fbceddab5d 100644 --- a/src/libstrongswan/tests/Makefile.am +++ b/src/libstrongswan/tests/Makefile.am @@ -5,7 +5,8 @@ check_PROGRAMS = $(TESTS) test_runner_SOURCES = \ test_runner.c test_runner.h \ test_linked_list.c test_enumerator.c test_linked_list_enumerator.c \ - test_chunk.c test_hashtable.c test_identification.c + test_chunk.c test_hashtable.c test_identification.c \ + test_threading.c test_runner_CFLAGS = \ diff --git a/src/libstrongswan/tests/test_runner.c b/src/libstrongswan/tests/test_runner.c index 03287e53c6..7dc40ff2e6 100644 --- a/src/libstrongswan/tests/test_runner.c +++ b/src/libstrongswan/tests/test_runner.c @@ -38,6 +38,7 @@ int main() srunner_add_suite(sr, linked_list_enumerator_suite_create()); srunner_add_suite(sr, hashtable_suite_create()); srunner_add_suite(sr, identification_suite_create()); + srunner_add_suite(sr, threading_suite_create()); srunner_run_all(sr, CK_NORMAL); nf = srunner_ntests_failed(sr); diff --git a/src/libstrongswan/tests/test_runner.h b/src/libstrongswan/tests/test_runner.h index 7593c6aa64..8ec40a721f 100644 --- a/src/libstrongswan/tests/test_runner.h +++ b/src/libstrongswan/tests/test_runner.h @@ -24,5 +24,6 @@ Suite *linked_list_suite_create(); Suite *linked_list_enumerator_suite_create(); Suite *hashtable_suite_create(); Suite *identification_suite_create(); +Suite *threading_suite_create(); #endif /** TEST_RUNNER_H_ */ diff --git a/src/libcharon/plugins/unit_tester/tests/test_mutex.c b/src/libstrongswan/tests/test_threading.c similarity index 67% rename from src/libcharon/plugins/unit_tester/tests/test_mutex.c rename to src/libstrongswan/tests/test_threading.c index 77085cb2f1..1ffbcb6b0d 100644 --- a/src/libcharon/plugins/unit_tester/tests/test_mutex.c +++ b/src/libstrongswan/tests/test_threading.c @@ -1,4 +1,5 @@ /* + * Copyright (C) 2013 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -13,41 +14,43 @@ * for more details. */ -#include -#include - -#include +#include #include #include +#include -static mutex_t *mutex; +/******************************************************************************* + * recursive mutex test + */ -static int locked = 0; +#define THREADS 20 + +static mutex_t *mutex; -static bool failed = FALSE; +static pthread_barrier_t mutex_barrier; -static pthread_barrier_t barrier; +static int mutex_locked = 0; -static void* run(void* null) +static void *mutex_run(void *data) { int i; /* wait for all threads before getting in action */ - pthread_barrier_wait(&barrier); + pthread_barrier_wait(&mutex_barrier); for (i = 0; i < 100; i++) { mutex->lock(mutex); mutex->lock(mutex); mutex->lock(mutex); - locked++; + mutex_locked++; sched_yield(); - if (locked > 1) + if (mutex_locked > 1) { - failed = TRUE; + fail("two threads locked the mutex concurrently"); } - locked--; + mutex_locked--; mutex->unlock(mutex); mutex->unlock(mutex); mutex->unlock(mutex); @@ -55,15 +58,10 @@ static void* run(void* null) return NULL; } -#define THREADS 20 - -/******************************************************************************* - * mutex test - ******************************************************************************/ -bool test_mutex() +START_TEST(test_mutex) { - int i; pthread_t threads[THREADS]; + int i; mutex = mutex_create(MUTEX_TYPE_RECURSIVE); @@ -81,20 +79,31 @@ bool test_mutex() mutex->unlock(mutex); } - pthread_barrier_init(&barrier, NULL, THREADS); - + pthread_barrier_init(&mutex_barrier, NULL, THREADS); for (i = 0; i < THREADS; i++) { - pthread_create(&threads[i], NULL, run, NULL); + pthread_create(&threads[i], NULL, mutex_run, NULL); } for (i = 0; i < THREADS; i++) { pthread_join(threads[i], NULL); } - pthread_barrier_destroy(&barrier); + pthread_barrier_destroy(&mutex_barrier); mutex->destroy(mutex); - - return !failed; } +END_TEST +Suite *threading_suite_create() +{ + Suite *s; + TCase *tc; + + s = suite_create("threading"); + + tc = tcase_create("recursive mutex"); + tcase_add_test(tc, test_mutex); + suite_add_tcase(s, tc); + + return s; +}