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.1.1.1 2012/02/21 17:04:16 misho 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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>