Annotation of embedaddon/sqlite3/test/ioerr4.test, revision 1.1.1.1

1.1       misho       1: # 2007 December 19
                      2: #
                      3: # The author disclaims copyright to this source code.  In place of
                      4: # a legal notice, here is a blessing:
                      5: #
                      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.
                      9: #
                     10: #***********************************************************************
                     11: # This file implements regression tests for SQLite library.  The
                     12: # focus of this file is testing for correct handling of I/O errors
                     13: # during incremental vacuum with a shared cache.
                     14: #
                     15: # $Id: ioerr4.test,v 1.2 2008/05/08 01:11:42 drh Exp $
                     16: 
                     17: set testdir [file dirname $argv0]
                     18: source $testdir/tester.tcl
                     19: 
                     20: # This test requires both shared cache and incremental vacuum.
                     21: #
                     22: ifcapable {!shared_cache || !autovacuum} {
                     23:   finish_test
                     24:   return
                     25: }
                     26: 
                     27: # Enable shared cache mode and incremental vacuum.
                     28: #
                     29: do_test ioerr4-1.1 {
                     30:   db close
                     31:   set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
                     32: } {0}
                     33: do_test ioerr4-1.2 {
                     34:   forcedelete test.db test.db-journal
                     35:   sqlite3 db test.db
                     36:   sqlite3 db2 test.db
                     37:   db eval {
                     38:     PRAGMA auto_vacuum=INCREMENTAL;
                     39:     CREATE TABLE a(i INTEGER, b BLOB);
                     40:   }
                     41:   db2 eval {
                     42:     SELECT name FROM sqlite_master
                     43:   }
                     44: } {a}
                     45: do_test ioerr4-1.3 {
                     46:   db eval {
                     47:     PRAGMA auto_vacuum;
                     48:   }
                     49: } {2}
                     50: 
                     51: # Insert and delete many records in order to put lots of pages
                     52: # on the freelist.
                     53: #
                     54: do_test ioerr4-1.4 {
                     55:   db eval {
                     56:     INSERT INTO a VALUES(1, zeroblob(2000));
                     57:     INSERT INTO a VALUES(2, zeroblob(2000));
                     58:     INSERT INTO a SELECT i+2, zeroblob(2000) FROM a;
                     59:     INSERT INTO a SELECT i+4, zeroblob(2000) FROM a;
                     60:     INSERT INTO a SELECT i+8, zeroblob(2000) FROM a;
                     61:     INSERT INTO a SELECT i+16, zeroblob(2000) FROM a;
                     62:     SELECT count(*) FROM a;
                     63:   }
                     64: } {32}
                     65: do_test ioerr4-1.5 {
                     66:   db eval {
                     67:     PRAGMA freelist_count
                     68:   }
                     69: } {0}
                     70: do_test ioerr4-1.6 {
                     71:   db eval {
                     72:     DELETE FROM a;
                     73:     PRAGMA freelist_count;
                     74:   }
                     75: } {64}
                     76: 
                     77: # Set up for an I/O error on incremental vacuum
                     78: # with two connections on shared cache.
                     79: #
                     80: db close
                     81: db2 close
                     82: forcecopy test.db test.db-bu
                     83: do_ioerr_test ioerr4-2 -tclprep {
                     84:   catch {db2 close}
                     85:   db close
                     86:   forcedelete test.db test.db-journal
                     87:   forcecopy test.db-bu test.db
                     88:   sqlite3_enable_shared_cache 1
                     89:   set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
                     90:   db eval {PRAGMA auto_vacuum=INCREMENTAL}
                     91:   sqlite3 db2 test.db
                     92: } -tclbody {
                     93:   db eval {PRAGMA incremental_vacuum(5)}
                     94: }
                     95: 
                     96: db2 close
                     97: forcedelete test.db-bu
                     98: sqlite3_enable_shared_cache $::enable_shared_cache
                     99: 
                    100: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>