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>