Annotation of embedaddon/sqlite3/test/auth3.test, revision 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>