diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-03-27 09:16:59 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-06-11 11:03:11 +0200 |
commit | de42bf35f9c9f6312a28f8befd8b2a1eaa6d9bfc (patch) | |
tree | 13fb9884df70a20084582097137733b1c2479c31 /src | |
parent | bed4bc1327a43f8e4c494e7fdf71680ffcaa26f1 (diff) | |
download | strongswan-de42bf35f9c9f6312a28f8befd8b2a1eaa6d9bfc.tar.bz2 strongswan-de42bf35f9c9f6312a28f8befd8b2a1eaa6d9bfc.tar.xz |
Converted test for recursive mutex_t
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/plugins/unit_tester/Makefile.am | 1 | ||||
-rw-r--r-- | src/libcharon/plugins/unit_tester/tests.h | 1 | ||||
-rw-r--r-- | src/libstrongswan/tests/Makefile.am | 3 | ||||
-rw-r--r-- | src/libstrongswan/tests/test_runner.c | 1 | ||||
-rw-r--r-- | src/libstrongswan/tests/test_runner.h | 1 | ||||
-rw-r--r-- | src/libstrongswan/tests/test_threading.c (renamed from src/libcharon/plugins/unit_tester/tests/test_mutex.c) | 63 |
6 files changed, 40 insertions, 30 deletions
diff --git a/src/libcharon/plugins/unit_tester/Makefile.am b/src/libcharon/plugins/unit_tester/Makefile.am index db11d934c..84628b507 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 4fd358e6b..bcb82c3bd 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 bb1ce91a7..fbceddab5 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 03287e53c..7dc40ff2e 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 7593c6aa6..8ec40a721 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 index 77085cb2f..1ffbcb6b0 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 <library.h> -#include <threading/mutex.h> - -#include <unistd.h> +#include <check.h> #include <sched.h> #include <pthread.h> +#include <threading/mutex.h> -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; +} |