Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add extra tests for the multiplexor VFS. No changes to code. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | nx-devkit |
Files: | files | file ages | folders |
SHA1: |
c7de6f683d0fec62bc138b4a53b5cccc |
User & Date: | dan 2011-12-13 16:40:33.044 |
Context
2011-12-13
| ||
18:22 | Change the SQLITE_EXTRA_INIT routine to take a single argument which is a pointer to a string. Call SQLITE_EXTRA_INIT with a NULL argument. Fixes to multiplexor to treat the VFS properly in corner cases. Fix the initialization of multiplex3.test. (check-in: 8e65b91325 user: drh tags: nx-devkit) | |
16:40 | Add extra tests for the multiplexor VFS. No changes to code. (check-in: c7de6f683d user: dan tags: nx-devkit) | |
15:25 | Update the multiplex.test script to conform to that found in the "experimental" branch off of trunk. (check-in: 2eb79efbff user: drh tags: nx-devkit) | |
Changes
Added test/multiplex2.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | # 2010 October 29 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/malloc_common.tcl source $testdir/lock_common.tcl db close do_multiclient_test tn { foreach f [glob -nocomplain test.*] { forcedelete $f } code1 { catch { sqlite3_multiplex_initialize "" 0 } } code2 { catch { sqlite3_multiplex_initialize "" 0 } } code1 { db close } code2 { db2 close } code1 { sqlite3 db test.db -vfs multiplex } code2 { sqlite3 db2 test.db -vfs multiplex } code1 { sqlite3_multiplex_control db main chunk_size [expr 1024*1024] } code2 { sqlite3_multiplex_control db2 main chunk_size [expr 1024*1024] } sql1 { CREATE TABLE t1(a, b); INSERT INTO t1 VALUES(randomblob(10), randomblob(4000)); -- 1 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 2 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 4 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 8 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 16 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 32 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 64 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 128 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 256 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 512 SELECT count(*) FROM t1; } do_test multiplex-1.$tn.1 { sql1 { SELECT count(*) FROM t1 } } 512 do_test multiplex-1.$tn.2 { sql2 { SELECT count(*) FROM t1 } } 512 sql2 { DELETE FROM t1 ; VACUUM } do_test multiplex-1.$tn.3 { sql1 { SELECT count(*) FROM t1 } } 0 sql1 { INSERT INTO t1 VALUES(randomblob(10), randomblob(4000)); -- 1 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 2 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 4 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 8 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 16 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 32 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 64 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 128 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 256 INSERT INTO t1 SELECT randomblob(10), randomblob(4000) FROM t1; -- 512 SELECT count(*) FROM t1; } do_test multiplex-1.$tn.4 { sql2 { SELECT count(*) FROM t1 } } 512 } catch { sqlite3_multiplex_shutdown } finish_test |
Changes to test/multiplex3.test.
︙ | ︙ | |||
51 52 53 54 55 56 57 | foreach f [glob -nocomplain sv_test.*] { forcedelete $f } foreach f [glob -nocomplain test.*] { forcecopy $f "sv_$f" } } proc multiplex_restore_db {} { foreach f [glob -nocomplain test.*] {forcedelete $f} foreach f [glob -nocomplain sv_test.*] {forcecopy $f [string range $f 3 end]} } | | < < | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > < | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | foreach f [glob -nocomplain sv_test.*] { forcedelete $f } foreach f [glob -nocomplain test.*] { forcecopy $f "sv_$f" } } proc multiplex_restore_db {} { foreach f [glob -nocomplain test.*] {forcedelete $f} foreach f [glob -nocomplain sv_test.*] {forcecopy $f [string range $f 3 end]} } proc setup_and_save_db {} { multiplex_delete_db sqlite3 db file:test.db?8_3_names=1 sqlite3_multiplex_control db main chunk_size [expr 256*1024] execsql { CREATE TABLE t1(a PRIMARY KEY, b); INSERT INTO t1 VALUES(randomblob(15), randomblob(2000)); INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 2 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 4 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 8 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 16 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 32 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 64 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 128 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 256 INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 512 } set ::cksum1 [execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a}] db close multiplex_save_db } do_test 1.0 { setup_and_save_db } {} do_faultsim_test 1 -prep { multiplex_restore_db sqlite3 db file:test.db?8_3_names=1 sqlite3_multiplex_control db main chunk_size [expr 256*1024] } -body { execsql { UPDATE t1 SET a=randomblob(12), b=randomblob(1500) WHERE (rowid%32)=0 } } -test { faultsim_test_result {0 {}} if {$testrc!=0} { set cksum2 [execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a}] if {$cksum2 != $::cksum1} { error "data mismatch" } } } #------------------------------------------------------------------------- # The following tests verify that hot-journal rollback works. As follows: # # 1. Create a large database. # 2. Set the pager cache to be very small. # 3. Open a transaction. # 4. Run the following 100 times: # a. Update a row. # b. Copy all files on disk to a new db location, including the journal. # c. Verify that the new db can be opened and that the content matches # the database created in step 1 (proving the journal was rolled # back). do_test 2.0 { setup_and_save_db multiplex_restore_db sqlite3 db file:test.db?8_3_names=1 execsql { PRAGMA cache_size = 10 } execsql { BEGIN } } {} for {set iTest 1} {$iTest<=100} {incr iTest} { do_test 2.$iTest { execsql { UPDATE t1 SET a=randomblob(12), b=randomblob(1400) WHERE rowid=5*$iTest } foreach f [glob -nocomplain test.*] {forcecopy $f "xx_$f"} sqlite3 db2 file:xx_test.db?8_3_names=1 execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a} db2 } $::cksum1 db2 close } catch { db close } sqlite3_multiplex_shutdown finish_test |