1: #
2: # May you do good and not evil.
3: # May you find forgiveness for yourself and forgive others.
4: # May you share freely, never taking more than you give.
5: #
6: #***********************************************************************
7: #
8: # $Id: async2.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
9:
10:
11: set testdir [file dirname $argv0]
12: source $testdir/tester.tcl
13:
14: if {
15: [info commands sqlite3async_initialize]=="" ||
16: [info command sqlite3_memdebug_fail]==""
17: } {
18: # The async logic is not built into this system
19: puts "Skipping async2 tests: not compiled with required features"
20: finish_test
21: return
22: }
23:
24: # Enable asynchronous IO.
25:
26: set setup_script {
27: CREATE TABLE counter(c);
28: INSERT INTO counter(c) VALUES (1);
29: }
30:
31: set sql_script {
32: BEGIN;
33: UPDATE counter SET c = 2;
34: CREATE TABLE t1(a PRIMARY KEY, b, c);
35: CREATE TABLE t2(a PRIMARY KEY, b, c);
36: COMMIT;
37:
38: BEGIN;
39: UPDATE counter SET c = 3;
40: INSERT INTO t1 VALUES('abcdefghij', 'four', 'score');
41: INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven');
42: COMMIT;
43:
44: UPDATE counter SET c = 'FIN';
45: }
46:
47: db close
48:
49: foreach err [list ioerr malloc-transient malloc-persistent] {
50: set ::go 10
51: for {set n 1} {$::go} {incr n} {
52: set ::sqlite_io_error_pending 0
53: sqlite3_memdebug_fail -1
54: forcedelete test.db test.db-journal
55: sqlite3 db test.db
56: execsql $::setup_script
57: db close
58:
59: sqlite3async_initialize "" 1
60: sqlite3 db test.db
61: sqlite3_db_config_lookaside db 0 0 0
62:
63: switch -- $err {
64: ioerr { set ::sqlite_io_error_pending $n }
65: malloc-persistent { sqlite3_memdebug_fail $n -repeat 1 }
66: malloc-transient { sqlite3_memdebug_fail $n -repeat 0 }
67: }
68:
69: catchsql $::sql_script
70: db close
71:
72: sqlite3async_control halt idle
73: sqlite3async_start
74: sqlite3async_wait
75: sqlite3async_control halt never
76: sqlite3async_shutdown
77:
78: set ::sqlite_io_error_pending 0
79: sqlite3_memdebug_fail -1
80:
81: sqlite3 db test.db
82: set c [db one {SELECT c FROM counter LIMIT 1}]
83: switch -- $c {
84: 1 {
85: do_test async-$err-1.1.$n {
86: execsql {
87: SELECT name FROM sqlite_master;
88: }
89: } {counter}
90: }
91: 2 {
92: do_test async-$err-1.2.$n.1 {
93: execsql {
94: SELECT * FROM t1;
95: }
96: } {}
97: do_test async-$err-1.2.$n.2 {
98: execsql {
99: SELECT * FROM t2;
100: }
101: } {}
102: }
103: 3 {
104: do_test async-$err-1.3.$n.1 {
105: execsql {
106: SELECT * FROM t1;
107: }
108: } {abcdefghij four score}
109: do_test async-$err-1.3.$n.2 {
110: execsql {
111: SELECT * FROM t2;
112: }
113: } {klmnopqrst and seven}
114: }
115: FIN {
116: incr ::go -1
117: }
118: }
119:
120: db close
121: }
122: }
123:
124: catch {db close}
125:
126: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>