test_monitorlock.c (2690B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 /* 5 * test_monitorlock.c 6 * 7 * Tests basic MonitorLock object functionality. No multi-threading. 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static void 17 createMonitorLockes( 18 PKIX_PL_MonitorLock **monitorLock, 19 PKIX_PL_MonitorLock **monitorLock2, 20 PKIX_PL_MonitorLock **monitorLock3) 21 { 22 PKIX_TEST_STD_VARS(); 23 24 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Create(monitorLock, plContext)); 25 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Create(monitorLock2, plContext)); 26 27 *monitorLock3 = *monitorLock; 28 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_IncRef((PKIX_PL_Object *)*monitorLock3, plContext)); 29 30 cleanup: 31 PKIX_TEST_RETURN(); 32 } 33 34 static void 35 testLock(PKIX_PL_MonitorLock *monitorLock) 36 { 37 PKIX_TEST_STD_VARS(); 38 39 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Enter(monitorLock, plContext)); 40 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Enter(monitorLock, plContext)); 41 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Exit(monitorLock, plContext)); 42 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_MonitorLock_Exit(monitorLock, plContext)); 43 44 cleanup: 45 PKIX_TEST_RETURN(); 46 } 47 48 static void 49 testDestroy( 50 PKIX_PL_MonitorLock *monitorLock, 51 PKIX_PL_MonitorLock *monitorLock2, 52 PKIX_PL_MonitorLock *monitorLock3) 53 { 54 PKIX_TEST_STD_VARS(); 55 56 PKIX_TEST_DECREF_BC(monitorLock); 57 PKIX_TEST_DECREF_BC(monitorLock2); 58 PKIX_TEST_DECREF_BC(monitorLock3); 59 60 cleanup: 61 PKIX_TEST_RETURN(); 62 } 63 64 int 65 test_monitorlock(int argc, char *argv[]) 66 { 67 68 PKIX_PL_MonitorLock *monitorLock, *monitorLock2, *monitorLock3; 69 PKIX_UInt32 actualMinorVersion; 70 PKIX_UInt32 j = 0; 71 72 PKIX_TEST_STD_VARS(); 73 74 startTests("MonitorLocks"); 75 76 PKIX_TEST_EXPECT_NO_ERROR( 77 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 78 79 subTest("PKIX_PL_MonitorLock_Create"); 80 createMonitorLockes(&monitorLock, &monitorLock2, &monitorLock3); 81 82 PKIX_TEST_EQ_HASH_TOSTR_DUP(monitorLock, 83 monitorLock3, 84 monitorLock2, 85 NULL, 86 MonitorLock, 87 PKIX_FALSE); 88 89 subTest("PKIX_PL_MonitorLock_Lock/Unlock"); 90 testLock(monitorLock); 91 92 subTest("PKIX_PL_MonitorLock_Destroy"); 93 testDestroy(monitorLock, monitorLock2, monitorLock3); 94 95 cleanup: 96 97 PKIX_Shutdown(plContext); 98 99 PKIX_TEST_RETURN(); 100 101 endTests("MonitorLockes"); 102 103 return (0); 104 }