summaryrefslogtreecommitdiffstats
path: root/test/corruptA.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/corruptA.test')
-rw-r--r--test/corruptA.test83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/corruptA.test b/test/corruptA.test
new file mode 100644
index 0000000..12d9186
--- /dev/null
+++ b/test/corruptA.test
@@ -0,0 +1,83 @@
+# 2008 July 11
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library.
+#
+# This file implements tests to make sure SQLite does not crash or
+# segfault if it sees a corrupt database file. It specifically focuses
+# on corrupt database headers.
+#
+# $Id: corruptA.test,v 1.1 2008/07/11 16:39:23 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# Do not use a codec for tests in this file, as the database file is
+# manipulated directly using tcl scripts (using the [hexio_write] command).
+#
+do_not_use_codec
+
+# These tests deal with corrupt database files
+#
+database_may_be_corrupt
+
+
+# Create a database to work with.
+#
+do_test corruptA-1.1 {
+ execsql {
+ CREATE TABLE t1(x);
+ INSERT INTO t1(x) VALUES(1);
+ }
+ expr {[file size test.db]>=1024}
+} {1}
+integrity_check corruptA-1.2
+
+# Corrupt the file header in various ways and make sure the corruption
+# is detected when opening the database file.
+#
+db close
+forcecopy test.db test.db-template
+
+set unreadable_version 02
+ifcapable wal { set unreadable_version 03 }
+do_test corruptA-2.1 {
+ forcecopy test.db-template test.db
+ hexio_write test.db 19 $unreadable_version ;# the read format number
+ sqlite3 db test.db
+ catchsql {SELECT * FROM t1}
+} {1 {file is not a database}}
+
+do_test corruptA-2.2 {
+ db close
+ forcecopy test.db-template test.db
+ hexio_write test.db 21 41 ;# max embedded payload fraction
+ sqlite3 db test.db
+ catchsql {SELECT * FROM t1}
+} {1 {file is not a database}}
+
+do_test corruptA-2.3 {
+ db close
+ forcecopy test.db-template test.db
+ hexio_write test.db 22 1f ;# min embedded payload fraction
+ sqlite3 db test.db
+ catchsql {SELECT * FROM t1}
+} {1 {file is not a database}}
+
+do_test corruptA-2.4 {
+ db close
+ forcecopy test.db-template test.db
+ hexio_write test.db 23 21 ;# min leaf payload fraction
+ sqlite3 db test.db
+ catchsql {SELECT * FROM t1}
+} {1 {file is not a database}}
+
+
+finish_test