Annotation of embedaddon/sqlite3/ext/rtree/rtree3.test, revision 1.1
1.1 ! misho 1: # 2008 Feb 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: #
! 12: # The focus of this file is testing that the r-tree correctly handles
! 13: # out-of-memory conditions.
! 14: #
! 15:
! 16: if {![info exists testdir]} {
! 17: set testdir [file join [file dirname [info script]] .. .. test]
! 18: }
! 19: source $testdir/tester.tcl
! 20: source $testdir/malloc_common.tcl
! 21: ifcapable !rtree {
! 22: finish_test
! 23: return
! 24: }
! 25:
! 26: # Test summary:
! 27: #
! 28: # rtree3-1: Test OOM in simple CREATE TABLE, INSERT, DELETE and SELECT
! 29: # commands on an almost empty table.
! 30: #
! 31: # rtree3-2: Test OOM in a DROP TABLE command.
! 32: #
! 33: # rtree3-3a: Test OOM during a transaction to insert 100 pseudo-random rows.
! 34: #
! 35: # rtree3-3b: Test OOM during a transaction deleting all entries in the
! 36: # database constructed in [rtree3-3a] in pseudo-random order.
! 37: #
! 38: # rtree3-4a: OOM during "SELECT count(*) FROM ..." on a big table.
! 39: #
! 40: # rtree3-4b: OOM while deleting rows from a big table.
! 41: #
! 42: # rtree3-5: Test OOM while inserting rows into a big table.
! 43: #
! 44: # rtree3-6: Test OOM while deleting all rows of a table, one at a time.
! 45: #
! 46: # rtree3-7: OOM during an ALTER TABLE RENAME TABLE command.
! 47: #
! 48: # rtree3-8: Test OOM while registering the r-tree module with sqlite.
! 49: #
! 50:
! 51: do_faultsim_test rtree3-1 -faults oom* -prep {
! 52: faultsim_delete_and_reopen
! 53: } -body {
! 54: execsql {
! 55: BEGIN TRANSACTION;
! 56: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 57: INSERT INTO rt VALUES(NULL, 3, 5, 7, 9);
! 58: INSERT INTO rt VALUES(NULL, 13, 15, 17, 19);
! 59: DELETE FROM rt WHERE ii = 1;
! 60: SELECT * FROM rt;
! 61: SELECT ii FROM rt WHERE ii = 2;
! 62: COMMIT;
! 63: }
! 64: }
! 65:
! 66: do_test rtree3-2.prep {
! 67: faultsim_delete_and_reopen
! 68: execsql {
! 69: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 70: INSERT INTO rt VALUES(NULL, 3, 5, 7, 9);
! 71: }
! 72: faultsim_save_and_close
! 73: } {}
! 74: do_faultsim_test rtree3-2 -faults oom* -prep {
! 75: faultsim_restore_and_reopen
! 76: } -body {
! 77: execsql { DROP TABLE rt }
! 78: }
! 79:
! 80: do_malloc_test rtree3-3.prep {
! 81: faultsim_delete_and_reopen
! 82: execsql {
! 83: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 84: INSERT INTO rt VALUES(NULL, 3, 5, 7, 9);
! 85: }
! 86: faultsim_save_and_close
! 87: } {}
! 88:
! 89: do_faultsim_test rtree3-3a -faults oom* -prep {
! 90: faultsim_restore_and_reopen
! 91: } -body {
! 92: db eval BEGIN
! 93: for {set ii 0} {$ii < 100} {incr ii} {
! 94: set f [expr rand()]
! 95: db eval {INSERT INTO rt VALUES(NULL, $f*10.0, $f*10.0, $f*15.0, $f*15.0)}
! 96: }
! 97: db eval COMMIT
! 98: }
! 99: faultsim_save_and_close
! 100:
! 101: do_faultsim_test rtree3-3b -faults oom* -prep {
! 102: faultsim_restore_and_reopen
! 103: } -body {
! 104: db eval BEGIN
! 105: for {set ii 0} {$ii < 100} {incr ii} {
! 106: set f [expr rand()]
! 107: db eval { DELETE FROM rt WHERE x1<($f*10.0) AND x1>($f*10.5) }
! 108: }
! 109: db eval COMMIT
! 110: }
! 111:
! 112: do_test rtree3-4.prep {
! 113: faultsim_delete_and_reopen
! 114: execsql {
! 115: BEGIN;
! 116: PRAGMA page_size = 512;
! 117: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 118: }
! 119: for {set i 0} {$i < 1500} {incr i} {
! 120: execsql { INSERT INTO rt VALUES($i, $i, $i+1, $i, $i+1) }
! 121: }
! 122: execsql { COMMIT }
! 123: faultsim_save_and_close
! 124: } {}
! 125:
! 126: do_faultsim_test rtree3-4a -faults oom-* -prep {
! 127: faultsim_restore_and_reopen
! 128: } -body {
! 129: db eval { SELECT count(*) FROM rt }
! 130: } -test {
! 131: faultsim_test_result {0 1500}
! 132: }
! 133:
! 134: do_faultsim_test rtree3-4b -faults oom-transient -prep {
! 135: faultsim_restore_and_reopen
! 136: } -body {
! 137: db eval { DELETE FROM rt WHERE ii BETWEEN 1 AND 100 }
! 138: } -test {
! 139: faultsim_test_result {0 {}}
! 140: }
! 141:
! 142: do_test rtree3-5.prep {
! 143: faultsim_delete_and_reopen
! 144: execsql {
! 145: BEGIN;
! 146: PRAGMA page_size = 512;
! 147: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 148: }
! 149: for {set i 0} {$i < 100} {incr i} {
! 150: execsql { INSERT INTO rt VALUES($i, $i, $i+1, $i, $i+1) }
! 151: }
! 152: execsql { COMMIT }
! 153: faultsim_save_and_close
! 154: } {}
! 155: do_faultsim_test rtree3-5 -faults oom-* -prep {
! 156: faultsim_restore_and_reopen
! 157: } -body {
! 158: for {set i 100} {$i < 110} {incr i} {
! 159: execsql { INSERT INTO rt VALUES($i, $i, $i+1, $i, $i+1) }
! 160: }
! 161: } -test {
! 162: faultsim_test_result {0 {}}
! 163: }
! 164:
! 165: do_test rtree3-6.prep {
! 166: faultsim_delete_and_reopen
! 167: execsql {
! 168: BEGIN;
! 169: PRAGMA page_size = 512;
! 170: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2);
! 171: }
! 172: for {set i 0} {$i < 50} {incr i} {
! 173: execsql { INSERT INTO rt VALUES($i, $i, $i+1, $i, $i+1) }
! 174: }
! 175: execsql { COMMIT }
! 176: faultsim_save_and_close
! 177: } {}
! 178: do_faultsim_test rtree3-6 -faults oom-* -prep {
! 179: faultsim_restore_and_reopen
! 180: } -body {
! 181: execsql BEGIN
! 182: for {set i 0} {$i < 50} {incr i} {
! 183: execsql { DELETE FROM rt WHERE ii=$i }
! 184: }
! 185: execsql COMMIT
! 186: } -test {
! 187: faultsim_test_result {0 {}}
! 188: }
! 189:
! 190: do_test rtree3-7.prep {
! 191: faultsim_delete_and_reopen
! 192: execsql { CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2) }
! 193: faultsim_save_and_close
! 194: } {}
! 195: do_faultsim_test rtree3-7 -faults oom-* -prep {
! 196: faultsim_restore_and_reopen
! 197: } -body {
! 198: execsql { ALTER TABLE rt RENAME TO rt2 }
! 199: } -test {
! 200: faultsim_test_result {0 {}}
! 201: }
! 202:
! 203: do_faultsim_test rtree3-8 -faults oom-* -prep {
! 204: catch { db close }
! 205: } -body {
! 206: sqlite3 db test.db
! 207: }
! 208:
! 209: do_faultsim_test rtree3-9 -faults oom-* -prep {
! 210: sqlite3 db :memory:
! 211: } -body {
! 212: set rc [register_cube_geom db]
! 213: if {$rc != "SQLITE_OK"} { error $rc }
! 214: } -test {
! 215: faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
! 216: }
! 217:
! 218: do_test rtree3-10.prep {
! 219: faultsim_delete_and_reopen
! 220: execsql {
! 221: CREATE VIRTUAL TABLE rt USING rtree(ii, x1, x2, y1, y2, z1, z2);
! 222: INSERT INTO rt VALUES(1, 10, 10, 10, 11, 11, 11);
! 223: INSERT INTO rt VALUES(2, 5, 6, 6, 7, 7, 8);
! 224: }
! 225: faultsim_save_and_close
! 226: } {}
! 227: do_faultsim_test rtree3-10 -faults oom-* -prep {
! 228: faultsim_restore_and_reopen
! 229: register_cube_geom db
! 230: execsql { SELECT * FROM rt }
! 231: } -body {
! 232: execsql { SELECT ii FROM rt WHERE ii MATCH cube(4.5, 5.5, 6.5, 1, 1, 1) }
! 233: } -test {
! 234: faultsim_test_result {0 2}
! 235: }
! 236:
! 237: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>