- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / sqlite / src / test / async2.test
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.12 2009/04/25 08:39:15 danielk1977 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     file delete -force 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