Index: third_party/sqlite/sqlite-src-3080704/test/mutex2.test |
diff --git a/third_party/sqlite/sqlite-src-3080704/test/mutex2.test b/third_party/sqlite/sqlite-src-3080704/test/mutex2.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9dfb03e0dea1b9dd6c2a294c46735b134d656000 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3080704/test/mutex2.test |
@@ -0,0 +1,105 @@ |
+# 2008 July 7 |
+# |
+# The author disclaims copyright to this source code. In place of |
+# a legal notice, here is a blessing: |
+# |
+# May you do good and not evil. |
+# May you find forgiveness for yourself and forgive others. |
+# May you share freely, never taking more than you give. |
+# |
+#*********************************************************************** |
+# |
+# Test scripts for deliberate failures of mutex routines. |
+# |
+# $Id: mutex2.test,v 1.9 2008/10/07 15:25:49 drh Exp $ |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+ifcapable !mutex { |
+ finish_test |
+ return |
+} |
+ |
+# deinitialize |
+# |
+catch {db close} |
+sqlite3_reset_auto_extension |
+sqlite3_shutdown |
+install_mutex_counters 1 |
+ |
+# Fix the mutex subsystem so that it will not initialize. In other words, |
+# make it so that sqlite3_initialize() always fails. |
+# |
+do_test mutex2-1.1 { |
+ set ::disable_mutex_init 10 |
+ sqlite3_initialize |
+} {SQLITE_IOERR} |
+do_test mutex2-1.1 { |
+ set ::disable_mutex_init 7 |
+ sqlite3_initialize |
+} {SQLITE_NOMEM} |
+ |
+proc utf16 {str} { |
+ set r [encoding convertto unicode $str] |
+ append r "\x00\x00" |
+ return $r |
+} |
+ |
+# Now that sqlite3_initialize() is failing, try to run various APIs that |
+# require that SQLite be initialized. Verify that they fail. |
+# |
+do_test mutex2-2.1 { |
+ set ::disable_mutex_init 7 |
+ set rc [catch {sqlite db test.db} msg] |
+ lappend rc $msg |
+} {1 {}} |
+ifcapable utf16 { |
+ do_test mutex2-2.2 { |
+ set db2 [sqlite3_open16 [utf16 test.db] {}] |
+ } {0} |
+ do_test mutex2-2.3 { |
+ sqlite3_complete16 [utf16 {SELECT * FROM t1;}] |
+ } {7} |
+} |
+do_test mutex2-2.4 { |
+ sqlite3_mprintf_int {This is a test %d,%d,%d} 1 2 3 |
+} {} |
+ifcapable load_ext { |
+ do_test mutex2-2.5 { |
+ sqlite3_auto_extension_sqr |
+ } {7} |
+} |
+do_test mutex2-2.6 { |
+ sqlite3_reset_auto_extension |
+} {} |
+do_test mutex2-2.7 { |
+ sqlite3_malloc 10000 |
+} {0} |
+do_test mutex2-2.8 { |
+ sqlite3_realloc 0 10000 |
+} {0} |
+ifcapable threadsafe { |
+ do_test mutex2-2.9 { |
+ alloc_dealloc_mutex |
+ } {0} |
+} |
+do_test mutex2-2.10 { |
+ vfs_initfail_test |
+} {} |
+ |
+# Restore the system to a functional state |
+# |
+install_mutex_counters 0 |
+set disable_mutex_init 0 |
+autoinstall_test_functions |
+ |
+# Mutex allocation works now. |
+# |
+ |
+do_test mutex2-3.1 { |
+ set ptr [alloc_dealloc_mutex] |
+ expr {$ptr!=0} |
+} {1} |
+ |
+ |
+finish_test |