| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| /* |
| * test_mutex.c |
| * |
| * Tests basic mutex object functionality. No multi-threading. |
| * |
| */ |
| |
| #include "testutil.h" |
| #include "testutil_nss.h" |
| |
| static void *plContext = NULL; |
| |
| static void |
| createMutexes( |
| PKIX_PL_Mutex **mutex, |
| PKIX_PL_Mutex **mutex2, |
| PKIX_PL_Mutex **mutex3) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Create(mutex, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Create(mutex2, plContext)); |
| |
| *mutex3 = *mutex; |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_IncRef((PKIX_PL_Object *)*mutex3, plContext)); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testLock(PKIX_PL_Mutex *mutex) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Lock(mutex, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Unlock(mutex, plContext)); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testDestroy( |
| PKIX_PL_Mutex *mutex, |
| PKIX_PL_Mutex *mutex2, |
| PKIX_PL_Mutex *mutex3) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_DECREF_BC(mutex); |
| PKIX_TEST_DECREF_BC(mutex2); |
| PKIX_TEST_DECREF_BC(mutex3); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| int |
| test_mutex(int argc, char *argv[]) |
| { |
| |
| PKIX_PL_Mutex *mutex, *mutex2, *mutex3; |
| PKIX_UInt32 actualMinorVersion; |
| PKIX_UInt32 j = 0; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| startTests("Mutexes"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR( |
| PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); |
| |
| subTest("PKIX_PL_Mutex_Create"); |
| createMutexes(&mutex, &mutex2, &mutex3); |
| |
| PKIX_TEST_EQ_HASH_TOSTR_DUP(mutex, |
| mutex3, |
| mutex2, |
| NULL, |
| Mutex, |
| PKIX_FALSE); |
| |
| subTest("PKIX_PL_Mutex_Lock/Unlock"); |
| testLock(mutex); |
| |
| subTest("PKIX_PL_Mutex_Destroy"); |
| testDestroy(mutex, mutex2, mutex3); |
| |
| cleanup: |
| |
| PKIX_Shutdown(plContext); |
| |
| PKIX_TEST_RETURN(); |
| |
| endTests("Mutexes"); |
| |
| return (0); |
| } |