Enhance the command-line completion extension to return the names of
[sqlite.git] / ext / rbu / rbu6.test
blobf05721574ada2b274165aa18e0ac9655d9dff456
1 # 2014 October 21
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 #***********************************************************************
12 # This file contains tests for the RBU module. Specifically, it tests the
13 # outcome of some other client writing to the database while an RBU update
14 # is being applied.
16 if {![info exists testdir]} {
17   set testdir [file join [file dirname [info script]] .. .. test]
19 source $testdir/tester.tcl
20 set ::testprefix rbu6
22 proc setup_test {} {
23   reset_db
24   execsql {
25     CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE);
26     CREATE TABLE t2(a INTEGER PRIMARY KEY, b UNIQUE);
27     CREATE TABLE t3(a INTEGER PRIMARY KEY, b UNIQUE);
28   }
29   db close
31   forcedelete rbu.db
32   sqlite3 rbu rbu.db
33   rbu eval {
34     CREATE TABLE data_t1(a, b, rbu_control);
35     CREATE TABLE data_t2(a, b, rbu_control);
36     CREATE TABLE data_t3(a, b, rbu_control);
37     INSERT INTO data_t1 VALUES(1, 't1', 0);
38     INSERT INTO data_t2 VALUES(2, 't2', 0);
39     INSERT INTO data_t3 VALUES(3, 't3', 0);
40   }
41   rbu close
44 # Test the outcome of some other client writing the db while the *-oal 
45 # file is being generated. Once this has happened, the update cannot be
46 # progressed.
48 for {set nStep 1} {$nStep < 8} {incr nStep} {
49   do_test 1.$nStep.1 {
50     setup_test
51     sqlite3rbu rbu test.db rbu.db
52     for {set i 0} {$i<$nStep} {incr i} {rbu step}
54     rbu close
55     sqlite3 db test.db
56     execsql { INSERT INTO t1 VALUES(5, 'hello') }
57     sqlite3rbu rbu test.db rbu.db
58     rbu step
59   } {SQLITE_BUSY}
60   do_test 1.$nStep.2 {
61     rbu step
62   } {SQLITE_BUSY}
63   do_test 1.$nStep.3 {
64     list [file exists test.db-oal] [file exists test.db-wal]
65   } {1 0}
66   do_test 1.$nStep.4 {
67     list [catch { rbu close } msg] $msg
68   } {1 {SQLITE_BUSY - database modified during rbu update}}
71 # Test the outcome of some other client writing the db after the *-oal
72 # file has been copied to the *-wal path. Once this has happened, any
73 # other client writing to the db causes RBU to consider its job finished.
75 for {set nStep 8} {$nStep < 20} {incr nStep} {
76   do_test 1.$nStep.1 {
77     setup_test
78     sqlite3rbu rbu test.db rbu.db
79     for {set i 0} {$i<$nStep} {incr i} {rbu step}
80     rbu close
81     sqlite3 db test.db
82     execsql { INSERT INTO t1 VALUES(5, 'hello') }
83     sqlite3rbu rbu test.db rbu.db
84     rbu step
85   } {SQLITE_DONE}
86   do_test 1.$nStep.2 {
87     rbu step
88   } {SQLITE_DONE}
89   do_test 1.$nStep.3 {
90     file exists test.db-oal
91   } {0}
92   do_test 1.$nStep.4 {
93     list [catch { rbu close } msg] $msg
94   } {0 SQLITE_DONE}
96   do_execsql_test 1.$nStep.5 {
97     SELECT * FROM t1;
98   } {1 t1 5 hello}
102 finish_test