diff options
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/vtab3.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/vtab3.test | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/vtab3.test b/libraries/sqlite/unix/sqlite-3.5.1/test/vtab3.test new file mode 100644 index 0000000..2d7c679 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/vtab3.test | |||
@@ -0,0 +1,142 @@ | |||
1 | # 2006 June 10 | ||
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. The | ||
12 | # focus of this file is the authorisation callback and virtual tables. | ||
13 | # | ||
14 | # $Id: vtab3.test,v 1.2 2006/06/20 11:01:09 danielk1977 Exp $ | ||
15 | |||
16 | set testdir [file dirname $argv0] | ||
17 | source $testdir/tester.tcl | ||
18 | |||
19 | ifcapable !vtab||!auth { | ||
20 | finish_test | ||
21 | return | ||
22 | } | ||
23 | |||
24 | set ::auth_fail 0 | ||
25 | set ::auth_log [list] | ||
26 | set ::auth_filter [list SQLITE_READ SQLITE_UPDATE SQLITE_SELECT SQLITE_PRAGMA] | ||
27 | |||
28 | proc auth {code arg1 arg2 arg3 arg4} { | ||
29 | if {[lsearch $::auth_filter $code]>-1} { | ||
30 | return SQLITE_OK | ||
31 | } | ||
32 | lappend ::auth_log $code $arg1 $arg2 $arg3 $arg4 | ||
33 | incr ::auth_fail -1 | ||
34 | if {$::auth_fail == 0} { | ||
35 | return SQLITE_DENY | ||
36 | } | ||
37 | return SQLITE_OK | ||
38 | } | ||
39 | |||
40 | do_test vtab3-1.1 { | ||
41 | execsql { | ||
42 | CREATE TABLE elephant( | ||
43 | name VARCHAR(32), | ||
44 | color VARCHAR(16), | ||
45 | age INTEGER, | ||
46 | UNIQUE(name, color) | ||
47 | ); | ||
48 | } | ||
49 | } {} | ||
50 | |||
51 | |||
52 | do_test vtab3-1.2 { | ||
53 | register_echo_module [sqlite3_connection_pointer db] | ||
54 | db authorizer ::auth | ||
55 | execsql { | ||
56 | CREATE VIRTUAL TABLE pachyderm USING echo(elephant); | ||
57 | } | ||
58 | set ::auth_log | ||
59 | } [list \ | ||
60 | SQLITE_INSERT sqlite_master {} main {} \ | ||
61 | SQLITE_CREATE_VTABLE pachyderm echo main {} \ | ||
62 | ] | ||
63 | |||
64 | do_test vtab3-1.3 { | ||
65 | set ::auth_log [list] | ||
66 | execsql { | ||
67 | DROP TABLE pachyderm; | ||
68 | } | ||
69 | set ::auth_log | ||
70 | } [list \ | ||
71 | SQLITE_DELETE sqlite_master {} main {} \ | ||
72 | SQLITE_DROP_VTABLE pachyderm echo main {} \ | ||
73 | SQLITE_DELETE pachyderm {} main {} \ | ||
74 | SQLITE_DELETE sqlite_master {} main {} \ | ||
75 | ] | ||
76 | |||
77 | do_test vtab3-1.4 { | ||
78 | set ::auth_fail 1 | ||
79 | catchsql { | ||
80 | CREATE VIRTUAL TABLE pachyderm USING echo(elephant); | ||
81 | } | ||
82 | } {1 {not authorized}} | ||
83 | do_test vtab3-1.5 { | ||
84 | execsql { | ||
85 | SELECT name FROM sqlite_master WHERE type = 'table'; | ||
86 | } | ||
87 | } {elephant} | ||
88 | |||
89 | do_test vtab3-1.5 { | ||
90 | set ::auth_fail 2 | ||
91 | catchsql { | ||
92 | CREATE VIRTUAL TABLE pachyderm USING echo(elephant); | ||
93 | } | ||
94 | } {1 {not authorized}} | ||
95 | do_test vtab3-1.6 { | ||
96 | execsql { | ||
97 | SELECT name FROM sqlite_master WHERE type = 'table'; | ||
98 | } | ||
99 | } {elephant} | ||
100 | |||
101 | do_test vtab3-1.5 { | ||
102 | set ::auth_fail 3 | ||
103 | catchsql { | ||
104 | CREATE VIRTUAL TABLE pachyderm USING echo(elephant); | ||
105 | } | ||
106 | } {0 {}} | ||
107 | do_test vtab3-1.6 { | ||
108 | execsql { | ||
109 | SELECT name FROM sqlite_master WHERE type = 'table'; | ||
110 | } | ||
111 | } {elephant pachyderm} | ||
112 | |||
113 | foreach i [list 1 2 3 4] { | ||
114 | set ::auth_fail $i | ||
115 | do_test vtab3-1.7.$i.1 { | ||
116 | set rc [catch { | ||
117 | execsql {DROP TABLE pachyderm;} | ||
118 | } msg] | ||
119 | if {$msg eq "authorization denied"} {set msg "not authorized"} | ||
120 | list $rc $msg | ||
121 | } {1 {not authorized}} | ||
122 | do_test vtab3-1.7.$i.2 { | ||
123 | execsql { | ||
124 | SELECT name FROM sqlite_master WHERE type = 'table'; | ||
125 | } | ||
126 | } {elephant pachyderm} | ||
127 | } | ||
128 | do_test vtab3-1.8.1 { | ||
129 | set ::auth_fail 0 | ||
130 | catchsql { | ||
131 | DROP TABLE pachyderm; | ||
132 | } | ||
133 | } {0 {}} | ||
134 | do_test vtab3-1.8.2 { | ||
135 | execsql { | ||
136 | SELECT name FROM sqlite_master WHERE type = 'table'; | ||
137 | } | ||
138 | } {elephant} | ||
139 | |||
140 | finish_test | ||
141 | |||
142 | |||