tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_mutex.c (2211B)


      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_mutex.c
      6 *
      7 * Tests basic mutex 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 createMutexes(
     18    PKIX_PL_Mutex **mutex,
     19    PKIX_PL_Mutex **mutex2,
     20    PKIX_PL_Mutex **mutex3)
     21 {
     22    PKIX_TEST_STD_VARS();
     23 
     24    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Create(mutex, plContext));
     25    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Create(mutex2, plContext));
     26 
     27    *mutex3 = *mutex;
     28    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_IncRef((PKIX_PL_Object *)*mutex3, plContext));
     29 
     30 cleanup:
     31    PKIX_TEST_RETURN();
     32 }
     33 
     34 static void
     35 testLock(PKIX_PL_Mutex *mutex)
     36 {
     37    PKIX_TEST_STD_VARS();
     38 
     39    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Lock(mutex, plContext));
     40    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Mutex_Unlock(mutex, plContext));
     41 
     42 cleanup:
     43    PKIX_TEST_RETURN();
     44 }
     45 
     46 static void
     47 testDestroy(
     48    PKIX_PL_Mutex *mutex,
     49    PKIX_PL_Mutex *mutex2,
     50    PKIX_PL_Mutex *mutex3)
     51 {
     52    PKIX_TEST_STD_VARS();
     53 
     54    PKIX_TEST_DECREF_BC(mutex);
     55    PKIX_TEST_DECREF_BC(mutex2);
     56    PKIX_TEST_DECREF_BC(mutex3);
     57 
     58 cleanup:
     59    PKIX_TEST_RETURN();
     60 }
     61 
     62 int
     63 test_mutex(int argc, char *argv[])
     64 {
     65 
     66    PKIX_PL_Mutex *mutex, *mutex2, *mutex3;
     67    PKIX_UInt32 actualMinorVersion;
     68    PKIX_UInt32 j = 0;
     69 
     70    PKIX_TEST_STD_VARS();
     71 
     72    startTests("Mutexes");
     73 
     74    PKIX_TEST_EXPECT_NO_ERROR(
     75        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
     76 
     77    subTest("PKIX_PL_Mutex_Create");
     78    createMutexes(&mutex, &mutex2, &mutex3);
     79 
     80    PKIX_TEST_EQ_HASH_TOSTR_DUP(mutex,
     81                                mutex3,
     82                                mutex2,
     83                                NULL,
     84                                Mutex,
     85                                PKIX_FALSE);
     86 
     87    subTest("PKIX_PL_Mutex_Lock/Unlock");
     88    testLock(mutex);
     89 
     90    subTest("PKIX_PL_Mutex_Destroy");
     91    testDestroy(mutex, mutex2, mutex3);
     92 
     93 cleanup:
     94 
     95    PKIX_Shutdown(plContext);
     96 
     97    PKIX_TEST_RETURN();
     98 
     99    endTests("Mutexes");
    100 
    101    return (0);
    102 }