Annotation of embedaddon/sqlite3/test/auth3.test, revision 1.1.1.1
1.1 misho 1: # 2008 October 27
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: #
12: # Test that the truncate optimization is disabled if the SQLITE_DELETE
13: # authorization callback returns SQLITE_IGNORE.
14: #
15: # $Id: auth3.test,v 1.2 2009/05/04 01:58:31 drh 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: # Disable the statement cache for these tests.
29: #
30: db cache size 0
31:
32: db authorizer ::auth
33: proc auth {code arg1 arg2 arg3 arg4} {
34: if {$code=="SQLITE_DELETE"} {
35: return $::authcode
36: }
37: return SQLITE_OK
38: }
39:
40: #--------------------------------------------------------------------------
41: # The following tests - auth3-1.* - test that return values of SQLITE_DENY,
42: # SQLITE_IGNORE, SQLITE_OK and <invalid> are correctly handled when returned
43: # by an SQLITE_DELETE authorization callback triggered by a
44: # "DELETE FROM <table-name>" statement.
45: #
46: do_test auth3-1.1 {
47: execsql {
48: CREATE TABLE t1(a,b,c);
49: INSERT INTO t1 VALUES(1, 2, 3);
50: INSERT INTO t1 VALUES(4, 5, 6);
51: }
52: } {}
53: do_test auth3.1.2 {
54: set ::authcode SQLITE_DENY
55: catchsql { DELETE FROM t1 }
56: } {1 {not authorized}}
57: do_test auth3.1.3 {
58: set ::authcode SQLITE_INVALID
59: catchsql { DELETE FROM t1 }
60: } {1 {authorizer malfunction}}
61: do_test auth3.1.4 {
62: execsql { SELECT * FROM t1 }
63: } {1 2 3 4 5 6}
64: do_test auth3-1.5 {
65: set ::authcode SQLITE_IGNORE
66: execsql {
67: DELETE FROM t1;
68: SELECT * FROM t1;
69: }
70: } {}
71: do_test auth3-1.6 {
72: set ::authcode SQLITE_OK
73: execsql {
74: INSERT INTO t1 VALUES(1, 2, 3);
75: INSERT INTO t1 VALUES(4, 5, 6);
76: DELETE FROM t1;
77: SELECT * FROM t1;
78: }
79: } {}
80:
81: #--------------------------------------------------------------------------
82: # These tests - auth3-2.* - test that returning SQLITE_IGNORE really does
83: # disable the truncate optimization.
84: #
85: do_test auth3-2.1 {
86: set ::authcode SQLITE_OK
87: execsql {
88: INSERT INTO t1 VALUES(1, 2, 3);
89: INSERT INTO t1 VALUES(4, 5, 6);
90: }
91: set sqlite_search_count 0
92: execsql {
93: DELETE FROM t1;
94: }
95: set sqlite_search_count
96: } {0}
97:
98: do_test auth3-2.2 {
99: set ::authcode SQLITE_IGNORE
100: execsql {
101: INSERT INTO t1 VALUES(1, 2, 3);
102: INSERT INTO t1 VALUES(4, 5, 6);
103: }
104: set sqlite_search_count 0
105: execsql {
106: DELETE FROM t1;
107: }
108: set sqlite_search_count
109: } {1}
110:
111: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>