crash7.test 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # 2008 March 20
  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. # $Id: crash7.test,v 1.1 2008/04/03 14:36:26 danielk1977 Exp $
  13. set testdir [file dirname $argv0]
  14. source $testdir/tester.tcl
  15. set testprefix crash7
  16. ifcapable !crashtest {
  17. finish_test
  18. return
  19. }
  20. proc signature {} {
  21. return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
  22. }
  23. foreach f [list test.db test.db-journal] {
  24. for {set ii 1} {$ii < 64} {incr ii} {
  25. db close
  26. delete_file test.db
  27. sqlite3 db test.db
  28. set from_size [expr 1024 << ($ii&3)]
  29. set to_size [expr 1024 << (($ii>>2)&3)]
  30. execsql "
  31. PRAGMA page_size = $from_size;
  32. BEGIN;
  33. CREATE TABLE abc(a PRIMARY KEY, b, c);
  34. INSERT INTO abc VALUES(randomblob(100), randomblob(200), randomblob(1000));
  35. INSERT INTO abc
  36. SELECT randomblob(1000), randomblob(200), randomblob(100)
  37. FROM abc;
  38. INSERT INTO abc
  39. SELECT randomblob(100), randomblob(200), randomblob(1000)
  40. FROM abc;
  41. INSERT INTO abc
  42. SELECT randomblob(100), randomblob(200), randomblob(1000)
  43. FROM abc;
  44. INSERT INTO abc
  45. SELECT randomblob(100), randomblob(200), randomblob(1000)
  46. FROM abc;
  47. INSERT INTO abc
  48. SELECT randomblob(100), randomblob(200), randomblob(1000)
  49. FROM abc WHERE [expr $ii&16];
  50. INSERT INTO abc
  51. SELECT randomblob(25), randomblob(45), randomblob(9456)
  52. FROM abc WHERE [expr $ii&32];
  53. INSERT INTO abc
  54. SELECT randomblob(100), randomblob(200), randomblob(1000)
  55. FROM abc WHERE [expr $ii&8];
  56. INSERT INTO abc
  57. SELECT randomblob(25), randomblob(45), randomblob(9456)
  58. FROM abc WHERE [expr $ii&4];
  59. COMMIT;
  60. "
  61. set sig [signature]
  62. db close
  63. do_test crash7-1.$ii.crash {
  64. crashsql -file $f "
  65. PRAGMA page_size = $to_size;
  66. VACUUM;
  67. "
  68. } {1 {child process exited abnormally}}
  69. sqlite3 db test.db
  70. integrity_check crash7-1.$ii.integrity
  71. }
  72. }
  73. db close
  74. forcedelete test.db
  75. sqlite3 db test.db
  76. do_execsql_test 2.0 {
  77. CREATE TABLE t1(a, b, UNIQUE(a, b));
  78. INSERT INTO t1 VALUES(randomblob(100), randomblob(100));
  79. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  80. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  81. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  82. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  83. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  84. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  85. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  86. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  87. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  88. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  89. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  90. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  91. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  92. INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
  93. DELETE FROM t1 WHERE rowid%2;
  94. }
  95. db_save_and_close
  96. for {set i 0} {$i < 20} {incr i} {
  97. db_restore_and_reopen
  98. do_test 2.[expr $i+1].1 {
  99. crashsql -file test.db -seed $i {VACUUM}
  100. } {1 {child process exited abnormally}}
  101. do_execsql_test 2.[expr $i+1].2 { PRAGMA integrity_check } {ok}
  102. }
  103. finish_test