gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/corruptA.test (about)

     1  # 2008 July 11
     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.
    12  #
    13  # This file implements tests to make sure SQLite does not crash or
    14  # segfault if it sees a corrupt database file.  It specifically focuses
    15  # on corrupt database headers.
    16  #
    17  # $Id: corruptA.test,v 1.1 2008/07/11 16:39:23 drh Exp $
    18  
    19  set testdir [file dirname $argv0]
    20  source $testdir/tester.tcl
    21  
    22  # Do not use a codec for tests in this file, as the database file is
    23  # manipulated directly using tcl scripts (using the [hexio_write] command).
    24  #
    25  do_not_use_codec
    26  
    27  # These tests deal with corrupt database files
    28  #
    29  database_may_be_corrupt
    30  
    31  
    32  # Create a database to work with.
    33  #
    34  do_test corruptA-1.1 {
    35    execsql {
    36      CREATE TABLE t1(x);
    37      INSERT INTO t1(x) VALUES(1);
    38    }
    39    expr {[file size test.db]>=1024}
    40  } {1}
    41  integrity_check corruptA-1.2
    42  
    43  # Corrupt the file header in various ways and make sure the corruption
    44  # is detected when opening the database file.
    45  #
    46  db close
    47  forcecopy test.db test.db-template
    48  
    49  set unreadable_version 02
    50  ifcapable wal { set unreadable_version 03 }
    51  do_test corruptA-2.1 {
    52    forcecopy test.db-template test.db
    53    hexio_write test.db 19 $unreadable_version   ;# the read format number
    54    sqlite3 db test.db
    55    catchsql {SELECT * FROM t1}  
    56  } {1 {file is not a database}}
    57   
    58  do_test corruptA-2.2 {
    59    db close
    60    forcecopy test.db-template test.db
    61    hexio_write test.db 21 41   ;# max embedded payload fraction
    62    sqlite3 db test.db
    63    catchsql {SELECT * FROM t1}  
    64  } {1 {file is not a database}}
    65   
    66  do_test corruptA-2.3 {
    67    db close
    68    forcecopy test.db-template test.db
    69    hexio_write test.db 22 1f   ;# min embedded payload fraction
    70    sqlite3 db test.db
    71    catchsql {SELECT * FROM t1}  
    72  } {1 {file is not a database}}
    73   
    74  do_test corruptA-2.4 {
    75    db close
    76    forcecopy test.db-template test.db
    77    hexio_write test.db 23 21   ;# min leaf payload fraction
    78    sqlite3 db test.db
    79    catchsql {SELECT * FROM t1}  
    80  } {1 {file is not a database}}
    81   
    82  
    83  finish_test