Annotation of embedaddon/sqlite3/test/multiplex3.test, revision 1.1
1.1 ! misho 1:
! 2: # 2011 December 13
! 3: #
! 4: # The author disclaims copyright to this source code. In place of
! 5: # a legal notice, here is a blessing:
! 6: #
! 7: # May you do good and not evil.
! 8: # May you find forgiveness for yourself and forgive others.
! 9: # May you share freely, never taking more than you give.
! 10: #
! 11: #***********************************************************************
! 12: #
! 13: # This file contains tests for error (IO, OOM etc.) handling when using
! 14: # the multiplexor extension with 8.3 filenames.
! 15: #
! 16:
! 17: set testdir [file dirname $argv0]
! 18: source $testdir/tester.tcl
! 19: source $testdir/malloc_common.tcl
! 20: set ::testprefix multiplex3
! 21:
! 22: ifcapable !8_3_names {
! 23: puts -nonewline "SQLite compiled without SQLITE_ENABLE_8_3_NAMES. "
! 24: puts "Skipping tests multiplex3-*."
! 25: finish_test
! 26: return
! 27: }
! 28:
! 29: db close
! 30: sqlite3_shutdown
! 31: sqlite3_config_uri 1
! 32: autoinstall_test_functions
! 33:
! 34: sqlite3_multiplex_initialize "" 1
! 35:
! 36: proc destroy_vfs_stack {} {
! 37: generic_unregister stack
! 38: sqlite3_multiplex_shutdown
! 39: }
! 40:
! 41: proc multiplex_delete_db {} {
! 42: forcedelete test.db
! 43: for {set i 1} {$i <= 1000} {incr i} {
! 44: forcedelete test.[format %03d $i]
! 45: }
! 46: }
! 47:
! 48: # Procs to save and restore the current muliplexed database.
! 49: #
! 50: proc multiplex_save_db {} {
! 51: foreach f [glob -nocomplain sv_test.*] { forcedelete $f }
! 52: foreach f [glob -nocomplain test.*] { forcecopy $f "sv_$f" }
! 53: }
! 54: proc multiplex_restore_db {} {
! 55: foreach f [glob -nocomplain test.*] {forcedelete $f}
! 56: foreach f [glob -nocomplain sv_test.*] {forcecopy $f [string range $f 3 end]} }
! 57:
! 58: proc setup_and_save_db {} {
! 59: multiplex_delete_db
! 60: sqlite3 db file:test.db?8_3_names=1
! 61: sqlite3_multiplex_control db main chunk_size [expr 256*1024]
! 62: execsql {
! 63: CREATE TABLE t1(a PRIMARY KEY, b);
! 64: INSERT INTO t1 VALUES(randomblob(15), randomblob(2000));
! 65: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 2
! 66: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 4
! 67: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 8
! 68: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 16
! 69: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 32
! 70: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 64
! 71: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 128
! 72: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 256
! 73: INSERT INTO t1 SELECT randomblob(15), randomblob(2000) FROM t1; -- 512
! 74: }
! 75: set ::cksum1 [execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a}]
! 76: db close
! 77: multiplex_save_db
! 78: }
! 79:
! 80: do_test 1.0 { setup_and_save_db } {}
! 81: do_faultsim_test 1 -prep {
! 82: multiplex_restore_db
! 83: sqlite3 db file:test.db?8_3_names=1
! 84: sqlite3_multiplex_control db main chunk_size [expr 256*1024]
! 85: } -body {
! 86: execsql {
! 87: UPDATE t1 SET a=randomblob(12), b=randomblob(1500) WHERE (rowid%32)=0
! 88: }
! 89: } -test {
! 90: faultsim_test_result {0 {}}
! 91: if {$testrc!=0} {
! 92: set cksum2 [execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a}]
! 93: if {$cksum2 != $::cksum1} { error "data mismatch" }
! 94: }
! 95: }
! 96:
! 97: #-------------------------------------------------------------------------
! 98: # The following tests verify that hot-journal rollback works. As follows:
! 99: #
! 100: # 1. Create a large database.
! 101: # 2. Set the pager cache to be very small.
! 102: # 3. Open a transaction.
! 103: # 4. Run the following 100 times:
! 104: # a. Update a row.
! 105: # b. Copy all files on disk to a new db location, including the journal.
! 106: # c. Verify that the new db can be opened and that the content matches
! 107: # the database created in step 1 (proving the journal was rolled
! 108: # back).
! 109:
! 110: do_test 2.0 {
! 111: setup_and_save_db
! 112: multiplex_restore_db
! 113: sqlite3 db file:test.db?8_3_names=1
! 114: execsql { PRAGMA cache_size = 10 }
! 115: execsql { BEGIN }
! 116: } {}
! 117:
! 118: for {set iTest 1} {$iTest<=100} {incr iTest} {
! 119: do_test 2.$iTest {
! 120: execsql {
! 121: UPDATE t1 SET a=randomblob(12), b=randomblob(1400) WHERE rowid=5*$iTest
! 122: }
! 123: foreach f [glob -nocomplain test.*] {forcecopy $f "xx_$f"}
! 124: sqlite3 db2 file:xx_test.db?8_3_names=1
! 125: execsql {SELECT md5sum(a, b) FROM t1 ORDER BY a} db2
! 126: } $::cksum1
! 127:
! 128: db2 close
! 129: }
! 130:
! 131: catch { db close }
! 132: sqlite3_multiplex_shutdown
! 133: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>