tor-browser

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

test_async_thread_naming.cpp (8165B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "nsVariant.h"
      8 #include "storage_test_harness.h"
      9 #include "nsThreadUtils.h"
     10 #include "nsIURI.h"
     11 #include "nsIFileURL.h"
     12 #include "nsIVariant.h"
     13 #include "nsNetUtil.h"
     14 
     15 ////////////////////////////////////////////////////////////////////////////////
     16 //// Tests
     17 
     18 TEST(storage_async_thread_naming, MemoryDatabase)
     19 {
     20  HookSqliteMutex hook;
     21 
     22  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
     23 
     24  nsCOMPtr<nsIThread> target(get_conn_async_thread(db));
     25  do_check_true(target);
     26  PRThread* prThread;
     27  target->GetPRThread(&prThread);
     28  do_check_true(prThread);
     29  nsAutoCString name(PR_GetThreadName(prThread));
     30  printf("%s", name.get());
     31  do_check_true(StringBeginsWith(name, "sqldb:memory"_ns));
     32 
     33  blocking_async_close(db);
     34 }
     35 
     36 TEST(storage_async_thread_naming, FileDatabase)
     37 {
     38  HookSqliteMutex hook;
     39 
     40  nsAutoString filename(u"test_thread_name.sqlite"_ns);
     41  nsCOMPtr<nsIFile> dbFile;
     42  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
     43                                          getter_AddRefs(dbFile)));
     44  do_check_success(dbFile->Append(filename));
     45  nsCOMPtr<mozIStorageService> ss = getService();
     46  nsCOMPtr<mozIStorageConnection> conn;
     47  do_check_success(ss->OpenDatabase(dbFile, 0, getter_AddRefs(conn)));
     48 
     49  nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
     50  do_check_true(target);
     51  PRThread* prThread;
     52  target->GetPRThread(&prThread);
     53  do_check_true(prThread);
     54  nsAutoCString name(PR_GetThreadName(prThread));
     55  nsAutoCString expected("sqldb:"_ns);
     56  expected.Append(NS_ConvertUTF16toUTF8(filename));
     57  do_check_true(StringBeginsWith(name, expected));
     58 
     59  {
     60    nsCOMPtr<mozIStorageConnection> clone;
     61    do_check_success(conn->Clone(true, getter_AddRefs(clone)));
     62    nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
     63    do_check_true(target);
     64    PRThread* prThread;
     65    target->GetPRThread(&prThread);
     66    do_check_true(prThread);
     67    nsAutoCString name(PR_GetThreadName(prThread));
     68    nsAutoCString expected("sqldb:"_ns);
     69    expected.Append(NS_ConvertUTF16toUTF8(filename));
     70    do_check_true(StringBeginsWith(name, expected));
     71    blocking_async_close(clone);
     72  }
     73 
     74  blocking_async_close(conn);
     75 }
     76 
     77 TEST(storage_async_thread_naming, FileUnsharedDatabase)
     78 {
     79  HookSqliteMutex hook;
     80 
     81  nsAutoString filename(u"test_thread_name.sqlite"_ns);
     82  nsCOMPtr<nsIFile> dbFile;
     83  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
     84                                          getter_AddRefs(dbFile)));
     85  do_check_success(dbFile->Append(filename));
     86  nsCOMPtr<mozIStorageService> ss = getService();
     87  nsCOMPtr<mozIStorageConnection> conn;
     88  do_check_success(ss->OpenUnsharedDatabase(dbFile, 0, getter_AddRefs(conn)));
     89 
     90  nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
     91  do_check_true(target);
     92  PRThread* prThread;
     93  target->GetPRThread(&prThread);
     94  do_check_true(prThread);
     95  nsAutoCString name(PR_GetThreadName(prThread));
     96  nsAutoCString expected("sqldb:"_ns);
     97  expected.Append(NS_ConvertUTF16toUTF8(filename));
     98  do_check_true(StringBeginsWith(name, expected));
     99 
    100  blocking_async_close(conn);
    101 }
    102 
    103 TEST(storage_async_thread_naming, FileURLDatabase)
    104 {
    105  HookSqliteMutex hook;
    106 
    107  nsAutoString filename(u"test_thread_name.sqlite"_ns);
    108  nsCOMPtr<nsIFile> dbFile;
    109  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
    110                                          getter_AddRefs(dbFile)));
    111  do_check_success(dbFile->Append(filename));
    112  nsCOMPtr<nsIURI> uri;
    113  do_check_success(NS_NewFileURI(getter_AddRefs(uri), dbFile));
    114  nsCOMPtr<nsIFileURL> fileUrl = do_QueryInterface(uri);
    115  nsCOMPtr<mozIStorageService> ss = getService();
    116  nsCOMPtr<mozIStorageConnection> conn;
    117  do_check_success(ss->OpenDatabaseWithFileURL(fileUrl, EmptyCString(), 0,
    118                                               getter_AddRefs(conn)));
    119 
    120  nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
    121  do_check_true(target);
    122  PRThread* prThread;
    123  target->GetPRThread(&prThread);
    124  do_check_true(prThread);
    125  nsAutoCString name(PR_GetThreadName(prThread));
    126  nsAutoCString expected("sqldb:"_ns);
    127  expected.Append(NS_ConvertUTF16toUTF8(filename));
    128  do_check_true(StringBeginsWith(name, expected));
    129 
    130  blocking_async_close(conn);
    131 }
    132 
    133 TEST(storage_async_thread_naming, OverrideFileURLDatabase)
    134 {
    135  HookSqliteMutex hook;
    136 
    137  nsAutoString filename(u"test_thread_name.sqlite"_ns);
    138  nsCOMPtr<nsIFile> dbFile;
    139  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
    140                                          getter_AddRefs(dbFile)));
    141  do_check_success(dbFile->Append(filename));
    142  nsCOMPtr<nsIURI> uri;
    143  do_check_success(NS_NewFileURI(getter_AddRefs(uri), dbFile));
    144  nsCOMPtr<nsIFileURL> fileUrl = do_QueryInterface(uri);
    145  nsCOMPtr<mozIStorageService> ss = getService();
    146  nsCOMPtr<mozIStorageConnection> conn;
    147  nsAutoCString override("override"_ns);
    148  do_check_success(
    149      ss->OpenDatabaseWithFileURL(fileUrl, override, 0, getter_AddRefs(conn)));
    150 
    151  nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
    152  do_check_true(target);
    153  PRThread* prThread;
    154  target->GetPRThread(&prThread);
    155  do_check_true(prThread);
    156  nsAutoCString name(PR_GetThreadName(prThread));
    157  nsAutoCString expected("sqldb:"_ns);
    158  expected.Append(override);
    159  do_check_true(StringBeginsWith(name, expected));
    160 
    161  blocking_async_close(conn);
    162 }
    163 
    164 TEST(storage_async_thread_naming, AsyncOpenDatabase)
    165 {
    166  HookSqliteMutex hook;
    167 
    168  nsAutoString filename(u"test_thread_name.sqlite"_ns);
    169  nsCOMPtr<nsIFile> dbFile;
    170  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
    171                                          getter_AddRefs(dbFile)));
    172  do_check_success(dbFile->Append(filename));
    173  nsCOMPtr<mozIStorageService> ss = getService();
    174 
    175  RefPtr<AsyncCompletionSpinner> completionSpinner =
    176      new AsyncCompletionSpinner();
    177  RefPtr<nsVariant> variant = new nsVariant();
    178  variant->SetAsInterface(NS_GET_IID(nsIFile), dbFile);
    179  do_check_success(ss->OpenAsyncDatabase(variant, 0, 0, completionSpinner));
    180  completionSpinner->SpinUntilCompleted();
    181  nsCOMPtr<mozIStorageConnection> conn(
    182      do_QueryInterface(completionSpinner->mCompletionValue));
    183  nsCOMPtr<nsIThread> target(get_conn_async_thread(conn));
    184  do_check_true(target);
    185  PRThread* prThread;
    186  target->GetPRThread(&prThread);
    187  do_check_true(prThread);
    188  nsAutoCString name(PR_GetThreadName(prThread));
    189  nsAutoCString expected("sqldb:"_ns);
    190  expected.Append(NS_ConvertUTF16toUTF8(filename));
    191  do_check_true(StringBeginsWith(name, expected));
    192 
    193  blocking_async_close(conn);
    194 }
    195 
    196 TEST(storage_async_thread_naming, AsyncClone)
    197 {
    198  HookSqliteMutex hook;
    199 
    200  nsAutoString filename(u"test_thread_name.sqlite"_ns);
    201  nsCOMPtr<nsIFile> dbFile;
    202  do_check_success(NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
    203                                          getter_AddRefs(dbFile)));
    204  do_check_success(dbFile->Append(filename));
    205  nsCOMPtr<mozIStorageService> ss = getService();
    206 
    207  nsCOMPtr<mozIStorageConnection> conn;
    208  do_check_success(ss->OpenDatabase(dbFile, 0, getter_AddRefs(conn)));
    209 
    210  RefPtr<AsyncCompletionSpinner> completionSpinner =
    211      new AsyncCompletionSpinner();
    212  RefPtr<nsVariant> variant = new nsVariant();
    213  variant->SetAsInterface(NS_GET_IID(nsIFile), dbFile);
    214  do_check_success(conn->AsyncClone(true, completionSpinner));
    215  completionSpinner->SpinUntilCompleted();
    216  nsCOMPtr<mozIStorageConnection> clone(
    217      do_QueryInterface(completionSpinner->mCompletionValue));
    218  nsCOMPtr<nsIThread> target(get_conn_async_thread(clone));
    219  do_check_true(target);
    220  PRThread* prThread;
    221  target->GetPRThread(&prThread);
    222  do_check_true(prThread);
    223  nsAutoCString name(PR_GetThreadName(prThread));
    224  nsAutoCString expected("sqldb:"_ns);
    225  expected.Append(NS_ConvertUTF16toUTF8(filename));
    226  do_check_true(StringBeginsWith(name, expected));
    227 
    228  blocking_async_close(conn);
    229  blocking_async_close(clone);
    230 }