persistentstorage/sqlite3api/TEST/TclScript/filefmt.test
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sqlite3api/TEST/TclScript/filefmt.test	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,115 @@
+# 2007 April 6
+#
+# 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 verify database file format.
+#
+# $Id: filefmt.test,v 1.2 2007/04/06 21:42:22 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+db close
+file delete -force test.db test.db-journal
+
+# Database begins with valid 16-byte header string.
+#
+do_test filefmt-1.1 {
+  sqlite3 db test.db
+  db eval {CREATE TABLE t1(x)}
+  db close
+  hexio_read test.db 0 16
+} {53514C69746520666F726D6174203300}
+
+# If the 16-byte header is changed, the file will not open
+#
+do_test filefmt-1.2 {
+  hexio_write test.db 0 54
+  set x [catch {sqlite3 db test.db} err]
+  lappend x $err
+} {0 {}}
+do_test filefmt-1.3 {
+  catchsql {
+    SELECT count(*) FROM sqlite_master
+  }
+} {1 {file is encrypted or is not a database}}
+do_test filefmt-1.4 {
+  db close
+  hexio_write test.db 0 53
+  sqlite3 db test.db
+  catchsql {
+    SELECT count(*) FROM sqlite_master
+  }
+} {0 1}
+
+# The page-size is stored at offset 16
+#
+ifcapable pager_pragmas {
+  foreach pagesize {512 1024 2048 4096 8192 16384 32768} {
+     if {[info exists SQLITE_MAX_PAGE_SIZE]
+          && $pagesize>$SQLITE_MAX_PAGE_SIZE} continue
+     do_test filefmt-1.5.$pagesize.1 {
+       db close
+       file delete -force test.db
+       sqlite3 db test.db
+       db eval "PRAGMA auto_vacuum=OFF"
+       db eval "PRAGMA page_size=$pagesize"
+       db eval {CREATE TABLE t1(x)}
+       file size test.db
+     } [expr $pagesize*2]
+     do_test filefmt-1.5.$pagesize.2 {
+       hexio_get_int [hexio_read test.db 16 2]
+     } $pagesize
+  }
+}
+
+# The page-size must be a power of 2
+#
+do_test filefmt-1.6 {
+  db close
+  hexio_write test.db 16 [hexio_render_int16 1025]
+  sqlite3 db test.db
+  catchsql {
+     SELECT count(*) FROM sqlite_master
+  }
+} {1 {file is encrypted or is not a database}}
+
+
+# The page-size must be at least 512 bytes
+#
+do_test filefmt-1.7 {
+  db close
+  hexio_write test.db 16 [hexio_render_int16 256]
+  sqlite3 db test.db
+  catchsql {
+     SELECT count(*) FROM sqlite_master
+  }
+} {1 {file is encrypted or is not a database}}
+
+# Usable space per page (page-size minus unused space per page)
+# must be at least 500 bytes
+#
+ifcapable pager_pragmas {
+  do_test filefmt-1.8 {
+    db close
+    file delete -force test.db
+    sqlite3 db test.db
+    db eval {PRAGMA page_size=512; CREATE TABLE t1(x)}
+    db close
+    hexio_write test.db 20 10
+    sqlite3 db test.db
+    catchsql {
+       SELECT count(*) FROM sqlite_master
+    }
+  } {1 {file is encrypted or is not a database}}
+}
+
+
+finish_test