github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/pagerfault3.test (about)

     1  # 2011 January 28
     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  #
    12  
    13  set testdir [file dirname $argv0]
    14  source $testdir/tester.tcl
    15  source $testdir/lock_common.tcl
    16  source $testdir/malloc_common.tcl
    17  
    18  if {[permutation] == "inmemory_journal"} {
    19    finish_test
    20    return
    21  }
    22  
    23  # Create a database with page-size 2048 bytes that uses 2 pages. Populate
    24  # it so that if the page-size is changed to 1024 bytes and the db vacuumed, 
    25  # the new db size is 3 pages.
    26  #
    27  do_test pagerfault3-pre1 {
    28    execsql {
    29      PRAGMA auto_vacuum = 0;
    30      PRAGMA page_size = 2048;
    31      CREATE TABLE t1(x);
    32      INSERT INTO t1 VALUES(randomblob(1200));
    33      PRAGMA page_count;
    34    }
    35  } {2}
    36  do_test pagerfault3-pre2 {
    37    faultsim_save_and_close
    38    faultsim_restore_and_reopen
    39    execsql { 
    40      PRAGMA page_size = 1024;
    41      VACUUM;
    42      PRAGMA page_count;
    43    }
    44  } {3}
    45  
    46  # Now do the page-size change and VACUUM with IO error injection. When
    47  # an IO error is injected into the final xSync() of the commit, the pager
    48  # will have to extend the db file from 3072 to 4096 byts when rolling
    49  # back the hot-journal file. This is a special case in pager_truncate().
    50  #
    51  do_faultsim_test pagerfault3-1 -faults ioerr-transient -prep {
    52    faultsim_restore_and_reopen
    53  } -body {
    54    execsql { 
    55      PRAGMA page_size = 1024;
    56      VACUUM;
    57    }
    58  } -test {
    59    faultsim_test_result {0 {}} 
    60    faultsim_integrity_check
    61  }
    62  
    63  finish_test