modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/fts5/test/fts5fault3.test (about)

     1  # 2014 June 17
     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  # This file is focused on OOM errors.
    13  #
    14  
    15  source [file join [file dirname [info script]] fts5_common.tcl]
    16  source $testdir/malloc_common.tcl
    17  set testprefix fts5fault3
    18  
    19  # If SQLITE_ENABLE_FTS3 is defined, omit this file.
    20  ifcapable !fts5 {
    21    finish_test
    22    return
    23  }
    24  
    25  #-------------------------------------------------------------------------
    26  # An OOM while resuming a partially completed segment merge.
    27  #
    28  db func rnddoc fts5_rnddoc 
    29  do_test 1.0 {
    30    expr srand(0)
    31    execsql {
    32      CREATE VIRTUAL TABLE xx USING fts5(x);
    33      INSERT INTO xx(xx, rank) VALUES('pgsz', 32);
    34      INSERT INTO xx(xx, rank) VALUES('automerge', 16);
    35    }
    36    for {set i 0} {$i < 10} {incr i} {
    37      execsql {
    38        BEGIN;
    39          INSERT INTO xx(x) VALUES(rnddoc(20));
    40          INSERT INTO xx(x) VALUES(rnddoc(20));
    41          INSERT INTO xx(x) VALUES(rnddoc(20));
    42        COMMIT
    43      }
    44    }
    45  
    46    execsql {
    47      INSERT INTO xx(xx, rank) VALUES('automerge', 2);
    48      INSERT INTO xx(xx, rank) VALUES('merge', 50);
    49    }
    50  } {}
    51  faultsim_save_and_close
    52  
    53  do_faultsim_test 1 -faults oom-* -prep {
    54    faultsim_restore_and_reopen
    55  } -body {
    56    execsql { INSERT INTO xx(xx, rank) VALUES('merge', 1) }
    57  } -test {
    58    faultsim_test_result [list 0 {}]
    59  }
    60  
    61  #-------------------------------------------------------------------------
    62  # An OOM while flushing an unusually large term to disk.
    63  #
    64  reset_db
    65  do_execsql_test 2.0 {
    66    CREATE VIRTUAL TABLE xx USING fts5(x);
    67    INSERT INTO xx(xx, rank) VALUES('pgsz', 32);
    68  }
    69  faultsim_save_and_close
    70  
    71  set    doc "a long term abcdefghijklmnopqrstuvwxyz "
    72  append doc "and then abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz "
    73  append doc [string repeat "abcdefghijklmnopqrstuvwxyz" 10]
    74  
    75  do_faultsim_test 2 -faults oom-* -prep {
    76    faultsim_restore_and_reopen
    77  } -body {
    78    execsql { INSERT INTO xx(x) VALUES ($::doc) }
    79  } -test {
    80    faultsim_test_result [list 0 {}]
    81  }
    82  
    83  #-------------------------------------------------------------------------
    84  # An OOM while flushing an unusually large term to disk.
    85  #
    86  reset_db
    87  do_execsql_test 3.0 {
    88    CREATE VIRTUAL TABLE xx USING fts5(x);
    89  }
    90  faultsim_save_and_close
    91  
    92  set doc [fts5_rnddoc 1000]
    93  do_faultsim_test 3.1 -faults oom-* -prep {
    94    faultsim_restore_and_reopen
    95  } -body {
    96    execsql { INSERT INTO xx(x) VALUES ($::doc) }
    97  } -test {
    98    faultsim_test_result [list 0 {}]
    99  }
   100  
   101  set doc [string repeat "abc " 100]
   102  do_faultsim_test 3.2 -faults oom-* -prep {
   103    faultsim_restore_and_reopen
   104  } -body {
   105    execsql { INSERT INTO xx(x) VALUES ($::doc) }
   106  } -test {
   107    faultsim_test_result [list 0 {}]
   108  }
   109  
   110  
   111  
   112  finish_test