Fixes default log output to console for macOS
[sqlcipher.git] / ext / rbu / rbumisc.test
blob16293141be9cdedb92660afd84d25d68aed8b3b4
1 # 2014 August 30
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
13 source [file join [file dirname [info script]] rbu_common.tcl]
14 if_no_rbu_support { finish_test ; return }
15 set ::testprefix rbumisc
17 proc populate_rbu_db {} {
18   forcedelete rbu.db
19   sqlite3 rbu rbu.db
20   rbu eval {
21     CREATE TABLE data_x1(a, b, c, rbu_control);
22     INSERT INTO data_x1 VALUES(1, 1, 1, 0);
23     INSERT INTO data_x1 VALUES(2, 2, 2, 0);
25     CREATE TABLE dat(a, b, c, rbu_control);
26     CREATE TABLE "data x1"(a, b, c, rbu_control);
27     CREATE TABLE datax1(a, b, c, rbu_control);
28     CREATE TABLE data_(a, b, c, rbu_control);
30     INSERT INTO "data x1" VALUES(3, 3, 3, 0);
31     INSERT INTO datax1 VALUES(3, 3, 3, 0);
32     INSERT INTO data_ VALUES(3, 3, 3, 0);
33     INSERT INTO dat VALUES(3, 3, 3, 0);
34   }
35   rbu close
38 #-------------------------------------------------------------------------
39 # Ensure that RBU is not confused by oddly named tables in an RBU 
40 # database.
42 do_execsql_test 1.0 {
43   CREATE TABLE x1(a, b, c INTEGER PRIMARY KEY);
45 do_test 1.1 {
46   populate_rbu_db
47 } {}
49 do_test 1.2 {
50   step_rbu test.db rbu.db
51   db eval { SELECT * FROM x1 }
52 } {1 1 1 2 2 2}
54 do_test 1.3 {
55   db eval { DELETE FROM x1 }
56   sqlite3 rbu rbu.db
57   rbu eval { DELETE FROM rbu_state }
58   rbu close
59   step_rbu test.db rbu.db
60   db eval { SELECT * FROM x1 }
61 } {1 1 1 2 2 2}
63 do_test 1.4 {
64   db eval { DELETE FROM x1 }
65   populate_rbu_db
67   sqlite3rbu rbu test.db rbu.db
68   rbu step
69   rbu step
70   rbu close
72   forcecopy test.db-oal test.db-wal
73   sqlite3rbu rbu test.db rbu.db
74   rbu step
75   list [catch { rbu close } msg] $msg
76 } {1 {SQLITE_ERROR - cannot update wal mode database}}
78 #-------------------------------------------------------------------------
79 # Test the effect of a wal file appearing after the target database has
80 # been opened, but before it has been locked.
82 catch { db close }
83 testvfs tvfs -default 1
85 for {set N 1} {$N < 10} {incr N} {
86   reset_db
87   populate_rbu_db
88   do_execsql_test 2.$N.0 {
89     CREATE TABLE x1(a, b, c INTEGER PRIMARY KEY);
90   }
91   
92   set nAccessCnt 0
93   do_test 2.$N.1 {
94     sqlite3rbu rbu test.db rbu.db
95     rbu step
96     rbu step
97     rbu close
98   } {SQLITE_OK}
99   
100   tvfs script xAccess
101   tvfs filter xAccess
102   set nAccessCnt 0
103   proc xAccess {method file args} {
104     global nAccessCnt
105     if {[file tail $file]=="test.db-wal"} {
106       incr nAccessCnt -1
107       if {$nAccessCnt==0} {
108         set fd [open test.db-wal w]
109         puts -nonewline $fd [string repeat 0 2000]
110         close $fd
111       }
112     }
113     return SQLITE_OK
114   }
116   foreach r {
117      {1 {SQLITE_ERROR - cannot update wal mode database}}
118      {0 SQLITE_OK}
119      {1 {SQLITE_CANTOPEN - unable to open database file}}
120   } {
121     set RES($r) 1
122   }
123   do_test 2.$N.2 {
124     set ::nAccessCnt $N
125     set res [list [catch {
126       sqlite3rbu rbu test.db rbu.db
127       rbu step
128       rbu close
129     } msg ] $msg]
130     set RES($res)
131   } {1}
132   catch {rbu close}
134 catch {db close}
135 catch {tvfs delete}
137 #-------------------------------------------------------------------------
138 testvfs tvfs -default 1
139 reset_db
140 populate_rbu_db
141 do_execsql_test 3.0 {
142   CREATE TABLE x1(a, b, c INTEGER PRIMARY KEY);
144   
145 tvfs script xFileControl
146 tvfs filter xFileControl
148 proc xFileControl {method file verb args} {
149   if {$verb=="ZIPVFS" && [info exists ::zipvfs_filecontrol]} {
150     return $::zipvfs_filecontrol 
151   }
152   return "SQLITE_NOTFOUND"
155 breakpoint
156 foreach {tn ret err} {
157   1 SQLITE_OK           0
158   2 SQLITE_ERROR        1
159   3 SQLITE_NOTFOUND     0
160   4 SQLITE_OMIT         1
161 } {
162   set ::zipvfs_filecontrol $ret
163   do_test 3.$tn.1 {
164     catch {
165       sqlite3rbu rbu test.db rbu.db
166       rbu step
167       rbu close
168     }
169   } $err
171 catch {db close}
172 catch {tvfs delete}
174 #-------------------------------------------------------------------------
176 finish_test