OLD | NEW |
| (Empty) |
1 # 2009 April 25 | |
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 # $Id: async4.test,v 1.4 2009/06/05 17:09:12 drh Exp $ | |
13 | |
14 set testdir [file dirname $argv0] | |
15 source $testdir/tester.tcl | |
16 | |
17 # Do not use a codec for tests in this file, as the database file is | |
18 # manipulated directly using tcl scripts (using the [hexio_write] command). | |
19 # | |
20 do_not_use_codec | |
21 | |
22 # These tests only work for Tcl version 8.5 and later on Windows (for now) | |
23 # | |
24 if {$tcl_platform(platform)=="windows"} { | |
25 scan $::tcl_version %f vx | |
26 if {$vx<8.5} { | |
27 finish_test | |
28 return | |
29 } | |
30 } | |
31 | |
32 if {[info commands sqlite3async_initialize] eq ""} { | |
33 # The async logic is not built into this system | |
34 finish_test | |
35 return | |
36 } | |
37 db close | |
38 | |
39 # Test layout: | |
40 # | |
41 # async4.1.*: Test the lockfiles parameter. | |
42 # async4.2.*: Test the delay parameter. | |
43 | |
44 do_test async4.1.1 { | |
45 sqlite3async_initialize {} 0 | |
46 sqlite3async_control lockfiles | |
47 } {1} | |
48 do_test async4.1.2 { | |
49 sqlite3async_control lockfiles false | |
50 } {0} | |
51 do_test async4.1.3 { | |
52 sqlite3async_control lockfiles | |
53 } {0} | |
54 do_test async4.1.4 { | |
55 sqlite3async_control lockfiles true | |
56 } {1} | |
57 | |
58 do_test async4.1.5 { | |
59 sqlite3 db test.db -vfs sqlite3async | |
60 execsql { CREATE TABLE t1(a, b, c) } | |
61 } {} | |
62 do_test async4.1.6 { | |
63 list [file exists test.db] [file size test.db] | |
64 } {1 0} | |
65 do_test async4.1.7 { | |
66 sqlite3 db2 test.db | |
67 catchsql { CREATE TABLE t2(a, b, c) } db2 | |
68 } {1 {database is locked}} | |
69 do_test async4.1.8 { | |
70 sqlite3async_control halt idle | |
71 sqlite3async_start | |
72 sqlite3async_wait | |
73 } {} | |
74 do_test async4.1.9 { | |
75 catchsql { CREATE TABLE t2(a, b, c) } db2 | |
76 } {0 {}} | |
77 do_test async4.1.10 { | |
78 list [catch {sqlite3async_control lockfiles false} msg] $msg | |
79 } {1 SQLITE_MISUSE} | |
80 do_test async4.1.11 { | |
81 db close | |
82 list [catch {sqlite3async_control lockfiles false} msg] $msg | |
83 } {1 SQLITE_MISUSE} | |
84 do_test async4.1.12 { | |
85 sqlite3async_start | |
86 sqlite3async_wait | |
87 sqlite3async_control lockfiles false | |
88 } {0} | |
89 do_test async4.1.13 { | |
90 sqlite3 db test.db -vfs sqlite3async | |
91 execsql { CREATE TABLE t3(a, b, c) } db | |
92 } {} | |
93 do_test async4.1.14 { | |
94 execsql { | |
95 CREATE INDEX i1 ON t2(a); | |
96 CREATE INDEX i2 ON t1(a); | |
97 } db2 | |
98 } {} | |
99 do_test async4.1.15 { | |
100 sqlite3async_start | |
101 sqlite3async_wait | |
102 hexio_write test.db 28 00000000 | |
103 execsql { pragma integrity_check } db2 | |
104 } {{*** in database main *** | |
105 Page 5 is never used}} | |
106 do_test async4.1.16 { | |
107 db close | |
108 db2 close | |
109 sqlite3async_start | |
110 sqlite3async_wait | |
111 } {} | |
112 do_test async4.1.17 { | |
113 sqlite3async_control lockfiles true | |
114 } {1} | |
115 | |
116 do_test async4.2.1 { | |
117 sqlite3async_control delay | |
118 } {0} | |
119 do_test async4.2.2 { | |
120 sqlite3async_control delay 23 | |
121 } {23} | |
122 do_test async4.2.3 { | |
123 sqlite3async_control delay | |
124 } {23} | |
125 do_test async4.2.4 { | |
126 sqlite3async_control delay 0 | |
127 } {0} | |
128 do_test async4.2.5 { | |
129 sqlite3 db test.db -vfs sqlite3async | |
130 | |
131 execsql { CREATE TABLE t4(a, b) } | |
132 set T1 [lindex [time { | |
133 sqlite3async_start | |
134 sqlite3async_wait | |
135 }] 0] | |
136 | |
137 sqlite3async_control delay 100 | |
138 execsql { CREATE TABLE t5(a, b) } | |
139 set T2 [lindex [time { | |
140 sqlite3async_start | |
141 sqlite3async_wait | |
142 }] 0] | |
143 | |
144 expr {($T1+1000000) < $T2} | |
145 } {1} | |
146 | |
147 do_test async4.2.6 { | |
148 sqlite3async_control delay 0 | |
149 execsql { CREATE TABLE t6(a, b) } | |
150 set T1 [lindex [time { | |
151 sqlite3async_start | |
152 sqlite3async_wait | |
153 }] 0] | |
154 | |
155 expr {($T1+1000000) < $T2} | |
156 } {1} | |
157 | |
158 do_test async4.2.7 { | |
159 list [catch { sqlite3async_control delay -1 } msg] $msg | |
160 } {1 SQLITE_MISUSE} | |
161 | |
162 do_test async4.2.8 { | |
163 db close | |
164 sqlite3async_start | |
165 sqlite3async_wait | |
166 } {} | |
167 | |
168 finish_test | |
OLD | NEW |