| /* 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_monitorlock.c |
| * |
| * Tests basic MonitorLock object functionality. No multi-threading. |
| * |
| */ |
| |
| #include "testutil.h" |
| #include "testutil_nss.h" |
| |
| static void *plContext = NULL; |
| |
| static void |
| createMonitorLockes( |
| PKIX_PL_MonitorLock **monitorLock, |
| PKIX_PL_MonitorLock **monitorLock2, |
| PKIX_PL_MonitorLock **monitorLock3) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Create(monitorLock, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Create(monitorLock2, plContext)); |
| |
| *monitorLock3 = *monitorLock; |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_IncRef((PKIX_PL_Object *)*monitorLock3, plContext)); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testLock(PKIX_PL_MonitorLock *monitorLock) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Enter(monitorLock, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Enter(monitorLock, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Exit(monitorLock, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Exit(monitorLock, plContext)); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testDestroy( |
| PKIX_PL_MonitorLock *monitorLock, |
| PKIX_PL_MonitorLock *monitorLock2, |
| PKIX_PL_MonitorLock *monitorLock3) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_DECREF_BC(monitorLock); |
| PKIX_TEST_DECREF_BC(monitorLock2); |
| PKIX_TEST_DECREF_BC(monitorLock3); |
| |
| cleanup: |
| PKIX_TEST_RETURN(); |
| } |
| |
| int |
| test_monitorlock(int argc, char *argv[]) |
| { |
| |
| PKIX_PL_MonitorLock *monitorLock, *monitorLock2, *monitorLock3; |
| PKIX_UInt32 actualMinorVersion; |
| PKIX_UInt32 j = 0; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| startTests("MonitorLocks"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR( |
| PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); |
| |
| subTest("PKIX_PL_MonitorLock_Create"); |
| createMonitorLockes(&monitorLock, &monitorLock2, &monitorLock3); |
| |
| PKIX_TEST_EQ_HASH_TOSTR_DUP(monitorLock, |
| monitorLock3, |
| monitorLock2, |
| NULL, |
| MonitorLock, |
| PKIX_FALSE); |
| |
| subTest("PKIX_PL_MonitorLock_Lock/Unlock"); |
| testLock(monitorLock); |
| |
| subTest("PKIX_PL_MonitorLock_Destroy"); |
| testDestroy(monitorLock, monitorLock2, monitorLock3); |
| |
| cleanup: |
| |
| PKIX_Shutdown(plContext); |
| |
| PKIX_TEST_RETURN(); |
| |
| endTests("MonitorLockes"); |
| |
| return (0); |
| } |