diff options
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/filefmt.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/filefmt.test | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/filefmt.test b/libraries/sqlite/unix/sqlite-3.5.1/test/filefmt.test new file mode 100644 index 0000000..dc4fe5b --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/filefmt.test | |||
@@ -0,0 +1,115 @@ | |||
1 | # 2007 April 6 | ||
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 | # This file implements regression tests for SQLite library. | ||
12 | # | ||
13 | # This file implements tests to verify database file format. | ||
14 | # | ||
15 | # $Id: filefmt.test,v 1.2 2007/04/06 21:42:22 drh Exp $ | ||
16 | |||
17 | set testdir [file dirname $argv0] | ||
18 | source $testdir/tester.tcl | ||
19 | db close | ||
20 | file delete -force test.db test.db-journal | ||
21 | |||
22 | # Database begins with valid 16-byte header string. | ||
23 | # | ||
24 | do_test filefmt-1.1 { | ||
25 | sqlite3 db test.db | ||
26 | db eval {CREATE TABLE t1(x)} | ||
27 | db close | ||
28 | hexio_read test.db 0 16 | ||
29 | } {53514C69746520666F726D6174203300} | ||
30 | |||
31 | # If the 16-byte header is changed, the file will not open | ||
32 | # | ||
33 | do_test filefmt-1.2 { | ||
34 | hexio_write test.db 0 54 | ||
35 | set x [catch {sqlite3 db test.db} err] | ||
36 | lappend x $err | ||
37 | } {0 {}} | ||
38 | do_test filefmt-1.3 { | ||
39 | catchsql { | ||
40 | SELECT count(*) FROM sqlite_master | ||
41 | } | ||
42 | } {1 {file is encrypted or is not a database}} | ||
43 | do_test filefmt-1.4 { | ||
44 | db close | ||
45 | hexio_write test.db 0 53 | ||
46 | sqlite3 db test.db | ||
47 | catchsql { | ||
48 | SELECT count(*) FROM sqlite_master | ||
49 | } | ||
50 | } {0 1} | ||
51 | |||
52 | # The page-size is stored at offset 16 | ||
53 | # | ||
54 | ifcapable pager_pragmas { | ||
55 | foreach pagesize {512 1024 2048 4096 8192 16384 32768} { | ||
56 | if {[info exists SQLITE_MAX_PAGE_SIZE] | ||
57 | && $pagesize>$SQLITE_MAX_PAGE_SIZE} continue | ||
58 | do_test filefmt-1.5.$pagesize.1 { | ||
59 | db close | ||
60 | file delete -force test.db | ||
61 | sqlite3 db test.db | ||
62 | db eval "PRAGMA auto_vacuum=OFF" | ||
63 | db eval "PRAGMA page_size=$pagesize" | ||
64 | db eval {CREATE TABLE t1(x)} | ||
65 | file size test.db | ||
66 | } [expr $pagesize*2] | ||
67 | do_test filefmt-1.5.$pagesize.2 { | ||
68 | hexio_get_int [hexio_read test.db 16 2] | ||
69 | } $pagesize | ||
70 | } | ||
71 | } | ||
72 | |||
73 | # The page-size must be a power of 2 | ||
74 | # | ||
75 | do_test filefmt-1.6 { | ||
76 | db close | ||
77 | hexio_write test.db 16 [hexio_render_int16 1025] | ||
78 | sqlite3 db test.db | ||
79 | catchsql { | ||
80 | SELECT count(*) FROM sqlite_master | ||
81 | } | ||
82 | } {1 {file is encrypted or is not a database}} | ||
83 | |||
84 | |||
85 | # The page-size must be at least 512 bytes | ||
86 | # | ||
87 | do_test filefmt-1.7 { | ||
88 | db close | ||
89 | hexio_write test.db 16 [hexio_render_int16 256] | ||
90 | sqlite3 db test.db | ||
91 | catchsql { | ||
92 | SELECT count(*) FROM sqlite_master | ||
93 | } | ||
94 | } {1 {file is encrypted or is not a database}} | ||
95 | |||
96 | # Usable space per page (page-size minus unused space per page) | ||
97 | # must be at least 500 bytes | ||
98 | # | ||
99 | ifcapable pager_pragmas { | ||
100 | do_test filefmt-1.8 { | ||
101 | db close | ||
102 | file delete -force test.db | ||
103 | sqlite3 db test.db | ||
104 | db eval {PRAGMA page_size=512; CREATE TABLE t1(x)} | ||
105 | db close | ||
106 | hexio_write test.db 20 10 | ||
107 | sqlite3 db test.db | ||
108 | catchsql { | ||
109 | SELECT count(*) FROM sqlite_master | ||
110 | } | ||
111 | } {1 {file is encrypted or is not a database}} | ||
112 | } | ||
113 | |||
114 | |||
115 | finish_test | ||