Annotation of embedaddon/sqlite3/test/auth2.test, revision 1.1.1.1
1.1 misho 1: # 2006 Aug 24
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 script is testing the sqlite3_set_authorizer() API
13: # and related functionality.
14: #
15: # $Id: auth2.test,v 1.3 2008/07/02 13:13:53 danielk1977 Exp $
16: #
17:
18: set testdir [file dirname $argv0]
19: source $testdir/tester.tcl
20:
21: # disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
22: # defined during compilation.
23: if {[catch {db auth {}} msg]} {
24: finish_test
25: return
26: }
27:
28: do_test auth2-1.1 {
29: execsql {
30: CREATE TABLE t1(a,b,c);
31: INSERT INTO t1 VALUES(1,2,3);
32: }
33: set ::flist {}
34: proc auth {code arg1 arg2 arg3 arg4} {
35: if {$code=="SQLITE_FUNCTION"} {
36: lappend ::flist $arg2
37: if {$arg2=="max"} {
38: return SQLITE_DENY
39: } elseif {$arg2=="min"} {
40: return SQLITE_IGNORE
41: } else {
42: return SQLITE_OK
43: }
44: }
45: return SQLITE_OK
46: }
47: db authorizer ::auth
48: catchsql {SELECT max(a,b,c) FROM t1}
49: } {1 {not authorized to use function: max}}
50: do_test auth2-1.2 {
51: set ::flist
52: } max
53: do_test auth2-1.3 {
54: set ::flist {}
55: catchsql {SELECT min(a,b,c) FROM t1}
56: } {0 {{}}}
57: do_test auth2-1.4 {
58: set ::flist
59: } min
60: do_test auth2-1.5 {
61: set ::flist {}
62: catchsql {SELECT coalesce(min(a,b,c),999) FROM t1}
63: } {0 999}
64: do_test auth2-1.6 {
65: set ::flist
66: } {coalesce min}
67: do_test auth2-1.7 {
68: set ::flist {}
69: catchsql {SELECT coalesce(a,b,c) FROM t1}
70: } {0 1}
71: do_test auth2-1.8 {
72: set ::flist
73: } coalesce
74:
75: # Make sure the authorizer is not called when parsing the schema
76: # and when computing the result set of a view.
77: #
78: db close
79: sqlite3 db test.db
80: sqlite3 db2 test.db
81: proc auth {args} {
82: global authargs
83: append authargs $args\n
84: return SQLITE_OK
85: }
86: db auth auth
87: do_test auth2-2.1 {
88: set ::authargs {}
89: db eval {
90: CREATE TABLE t2(x,y,z);
91: }
92: set ::authargs
93: } {SQLITE_INSERT sqlite_master {} main {}
94: SQLITE_CREATE_TABLE t2 {} main {}
95: SQLITE_UPDATE sqlite_master type main {}
96: SQLITE_UPDATE sqlite_master name main {}
97: SQLITE_UPDATE sqlite_master tbl_name main {}
98: SQLITE_UPDATE sqlite_master rootpage main {}
99: SQLITE_UPDATE sqlite_master sql main {}
100: SQLITE_READ sqlite_master ROWID main {}
101: SQLITE_READ sqlite_master name main {}
102: SQLITE_READ sqlite_master rootpage main {}
103: SQLITE_READ sqlite_master sql main {}
104: SQLITE_READ sqlite_master tbl_name main {}
105: SQLITE_READ sqlite_master ROWID main {}
106: }
107: do_test auth2-2.2 {
108: set ::authargs {}
109: db eval {
110: CREATE VIEW v2 AS SELECT x+y AS a, y+z AS b from t2;
111: }
112: set ::authargs
113: } {SQLITE_INSERT sqlite_master {} main {}
114: SQLITE_CREATE_VIEW v2 {} main {}
115: SQLITE_UPDATE sqlite_master type main {}
116: SQLITE_UPDATE sqlite_master name main {}
117: SQLITE_UPDATE sqlite_master tbl_name main {}
118: SQLITE_UPDATE sqlite_master rootpage main {}
119: SQLITE_UPDATE sqlite_master sql main {}
120: SQLITE_READ sqlite_master ROWID main {}
121: SQLITE_READ sqlite_master name main {}
122: SQLITE_READ sqlite_master rootpage main {}
123: SQLITE_READ sqlite_master sql main {}
124: SQLITE_READ sqlite_master tbl_name main {}
125: SQLITE_READ sqlite_master ROWID main {}
126: }
127: do_test auth2-2.3 {
128: set ::authargs {}
129: db eval {
130: SELECT a, b FROM v2;
131: }
132: set ::authargs
133: } {SQLITE_SELECT {} {} {} {}
134: SQLITE_READ v2 a main {}
135: SQLITE_READ v2 b main {}
136: SQLITE_READ t2 x main v2
137: SQLITE_READ t2 y main v2
138: SQLITE_READ t2 y main v2
139: SQLITE_READ t2 z main v2
140: SQLITE_SELECT {} {} {} v2
141: }
142: do_test auth2-2.4 {
143: db2 eval {
144: CREATE TABLE t3(p,q,r);
145: }
146: set ::authargs {}
147: db eval {
148: SELECT b, a FROM v2;
149: }
150: set ::authargs
151: } {SQLITE_SELECT {} {} {} {}
152: SQLITE_READ v2 b main {}
153: SQLITE_READ v2 a main {}
154: SQLITE_READ t2 x main v2
155: SQLITE_READ t2 y main v2
156: SQLITE_READ t2 y main v2
157: SQLITE_READ t2 z main v2
158: SQLITE_SELECT {} {} {} v2
159: SQLITE_SELECT {} {} {} {}
160: SQLITE_READ v2 b main {}
161: SQLITE_READ v2 a main {}
162: SQLITE_READ t2 x main v2
163: SQLITE_READ t2 y main v2
164: SQLITE_READ t2 y main v2
165: SQLITE_READ t2 z main v2
166: SQLITE_SELECT {} {} {} v2
167: }
168: db2 close
169:
170: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>