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 }