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