OLD | NEW |
| (Empty) |
1 # 2008 July 7 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # | |
12 # Test scripts for deliberate failures of mutex routines. | |
13 # | |
14 # $Id: mutex2.test,v 1.9 2008/10/07 15:25:49 drh Exp $ | |
15 | |
16 set testdir [file dirname $argv0] | |
17 source $testdir/tester.tcl | |
18 ifcapable !mutex { | |
19 finish_test | |
20 return | |
21 } | |
22 | |
23 # deinitialize | |
24 # | |
25 catch {db close} | |
26 sqlite3_reset_auto_extension | |
27 sqlite3_shutdown | |
28 install_mutex_counters 1 | |
29 | |
30 # Fix the mutex subsystem so that it will not initialize. In other words, | |
31 # make it so that sqlite3_initialize() always fails. | |
32 # | |
33 do_test mutex2-1.1 { | |
34 set ::disable_mutex_init 10 | |
35 sqlite3_initialize | |
36 } {SQLITE_IOERR} | |
37 do_test mutex2-1.1 { | |
38 set ::disable_mutex_init 7 | |
39 sqlite3_initialize | |
40 } {SQLITE_NOMEM} | |
41 | |
42 proc utf16 {str} { | |
43 set r [encoding convertto unicode $str] | |
44 append r "\x00\x00" | |
45 return $r | |
46 } | |
47 | |
48 # Now that sqlite3_initialize() is failing, try to run various APIs that | |
49 # require that SQLite be initialized. Verify that they fail. | |
50 # | |
51 do_test mutex2-2.1 { | |
52 set ::disable_mutex_init 7 | |
53 set rc [catch {sqlite db test.db} msg] | |
54 lappend rc $msg | |
55 } {1 {}} | |
56 ifcapable utf16 { | |
57 do_test mutex2-2.2 { | |
58 set db2 [sqlite3_open16 [utf16 test.db] {}] | |
59 } {0} | |
60 do_test mutex2-2.3 { | |
61 sqlite3_complete16 [utf16 {SELECT * FROM t1;}] | |
62 } {7} | |
63 } | |
64 do_test mutex2-2.4 { | |
65 sqlite3_mprintf_int {This is a test %d,%d,%d} 1 2 3 | |
66 } {} | |
67 ifcapable load_ext { | |
68 do_test mutex2-2.5 { | |
69 sqlite3_auto_extension_sqr | |
70 } {7} | |
71 } | |
72 do_test mutex2-2.6 { | |
73 sqlite3_reset_auto_extension | |
74 } {} | |
75 do_test mutex2-2.7 { | |
76 sqlite3_malloc 10000 | |
77 } {0} | |
78 do_test mutex2-2.8 { | |
79 sqlite3_realloc 0 10000 | |
80 } {0} | |
81 ifcapable threadsafe { | |
82 do_test mutex2-2.9 { | |
83 alloc_dealloc_mutex | |
84 } {0} | |
85 } | |
86 do_test mutex2-2.10 { | |
87 vfs_initfail_test | |
88 } {} | |
89 | |
90 # Restore the system to a functional state | |
91 # | |
92 install_mutex_counters 0 | |
93 set disable_mutex_init 0 | |
94 autoinstall_test_functions | |
95 | |
96 # Mutex allocation works now. | |
97 # | |
98 | |
99 do_test mutex2-3.1 { | |
100 set ptr [alloc_dealloc_mutex] | |
101 expr {$ptr!=0} | |
102 } {1} | |
103 | |
104 | |
105 finish_test | |
OLD | NEW |