Annotation of embedaddon/sqlite3/test/mutex1.test, revision 1.1.1.1

1.1       misho       1: # 2008 June 17
                      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: # $Id: mutex1.test,v 1.20 2009/04/23 14:58:40 danielk1977 Exp $
                     13: 
                     14: set testdir [file dirname $argv0]
                     15: source $testdir/tester.tcl
                     16: 
                     17: ifcapable !mutex {
                     18:   finish_test
                     19:   return
                     20: }
                     21: if {[info exists tester_do_binarylog]} {
                     22:   finish_test
                     23:   return
                     24: }
                     25: 
                     26: sqlite3_reset_auto_extension
                     27: clear_mutex_counters
                     28: 
                     29: proc mutex_counters {varname} {
                     30:   upvar $varname var
                     31:   set var(total) 0
                     32:   foreach {name value} [read_mutex_counters] {
                     33:     set var($name) $value
                     34:     incr var(total) $value
                     35:   }
                     36: }
                     37: 
                     38: #-------------------------------------------------------------------------
                     39: # Tests mutex1-1.* test that sqlite3_config() returns SQLITE_MISUSE if
                     40: # is called at the wrong time. And that the first time sqlite3_initialize 
                     41: # is called it obtains the 'static_master' mutex 3 times and a recursive
                     42: # mutex (sqlite3Config.pInitMutex) twice. Subsequent calls are no-ops 
                     43: # that do not require any mutexes.
                     44: #
                     45: do_test mutex1-1.0 {
                     46:   install_mutex_counters 1
                     47: } {SQLITE_MISUSE}
                     48: 
                     49: do_test mutex1-1.1 {
                     50:   db close
                     51:   install_mutex_counters 1
                     52: } {SQLITE_MISUSE}
                     53: 
                     54: do_test mutex1-1.2 {
                     55:   sqlite3_shutdown
                     56:   install_mutex_counters 1
                     57: } {SQLITE_OK}
                     58: 
                     59: do_test mutex1-1.3 {
                     60:   install_mutex_counters 0
                     61: } {SQLITE_OK}
                     62: 
                     63: do_test mutex1-1.4 {
                     64:   install_mutex_counters 1
                     65: } {SQLITE_OK}
                     66: 
                     67: do_test mutex1-1.5 {
                     68:   mutex_counters counters
                     69:   set counters(total)
                     70: } {0}
                     71: 
                     72: do_test mutex1-1.6 {
                     73:   sqlite3_initialize
                     74: } {SQLITE_OK}
                     75: 
                     76: do_test mutex1-1.7 {
                     77:   mutex_counters counters
                     78:   # list $counters(total) $counters(static_master)
                     79:   expr {$counters(total)>0}
                     80: } {1}
                     81: 
                     82: do_test mutex1-1.8 {
                     83:   clear_mutex_counters
                     84:   sqlite3_initialize
                     85: } {SQLITE_OK}
                     86: 
                     87: do_test mutex1-1.9 {
                     88:   mutex_counters counters
                     89:   list $counters(total) $counters(static_master)
                     90: } {0 0}
                     91: 
                     92: #-------------------------------------------------------------------------
                     93: # Tests mutex1-2.* test the three thread-safety related modes that
                     94: # can be selected using sqlite3_config:
                     95: #
                     96: #   * Serialized mode,
                     97: #   * Multi-threaded mode,
                     98: #   * Single-threaded mode.
                     99: #
                    100: ifcapable threadsafe&&shared_cache {
                    101:   set enable_shared_cache [sqlite3_enable_shared_cache 1]
                    102:   foreach {mode mutexes} {
                    103:     singlethread {}
                    104:     multithread  {
                    105:       fast static_lru static_master static_mem static_open static_prng 
                    106:       static_pmem
                    107:     }
                    108:     serialized  {
                    109:       fast recursive static_lru static_master static_mem static_open 
                    110:       static_prng static_pmem
                    111:     }
                    112:   } {
                    113: 
                    114:     do_test mutex1.2.$mode.1 {
                    115:       catch {db close}
                    116:       sqlite3_shutdown
                    117:       sqlite3_config $mode
                    118:     } SQLITE_OK
                    119: 
                    120:     do_test mutex1.2.$mode.2 {
                    121:       sqlite3_initialize
                    122:       clear_mutex_counters
                    123:       sqlite3 db test.db -nomutex 0 -fullmutex 0
                    124:       catchsql { CREATE TABLE abc(a, b, c) }
                    125:       db eval {
                    126:         INSERT INTO abc VALUES(1, 2, 3);
                    127:       }
                    128:     } {}
                    129:     ifcapable !memorymanage {
                    130:       regsub { static_lru} $mutexes {} mutexes
                    131:     }
                    132:     do_test mutex1.2.$mode.3 {
                    133:       mutex_counters counters
                    134:   
                    135:       set res [list]
                    136:       foreach {key value} [array get counters] {
                    137:         if {$key ne "total" && $value > 0} {
                    138:           lappend res $key
                    139:         }
                    140:       }
                    141:       lsort $res
                    142:     } [lsort $mutexes]
                    143:   }
                    144:   sqlite3_enable_shared_cache $enable_shared_cache
                    145: 
                    146:   # Open and use a connection in "nomutex" mode. Test that no recursive
                    147:   # mutexes are obtained.
                    148:   do_test mutex1.3.1 {
                    149:     catch {db close}
                    150:     clear_mutex_counters
                    151:     sqlite3 db test.db -nomutex 1
                    152:     execsql { SELECT * FROM abc }
                    153:   } {1 2 3 1 2 3 1 2 3}
                    154:   do_test mutex1.3.2 {
                    155:     mutex_counters counters
                    156:     set counters(recursive)
                    157:   } {0}
                    158: }
                    159: 
                    160: # Test the sqlite3_db_mutex() function.
                    161: #
                    162: do_test mutex1.4.1 {
                    163:   catch {db close}
                    164:   sqlite3 db test.db
                    165:   enter_db_mutex db
                    166:   db eval {SELECT 1, 2, 3}
                    167: } {1 2 3}
                    168: do_test mutex1.4.2 {
                    169:   leave_db_mutex db
                    170:   db eval {SELECT 1, 2, 3}
                    171: } {1 2 3}
                    172: do_test mutex1.4.3 {
                    173:   catch {db close}
                    174:   sqlite3 db test.db -nomutex 1
                    175:   enter_db_mutex db
                    176:   db eval {SELECT 1, 2, 3}
                    177: } {1 2 3}
                    178: do_test mutex1.4.4 {
                    179:   leave_db_mutex db
                    180:   db eval {SELECT 1, 2, 3}
                    181: } {1 2 3}
                    182: 
                    183: do_test mutex1-X {
                    184:   catch {db close}
                    185:   sqlite3_shutdown
                    186:   clear_mutex_counters
                    187:   install_mutex_counters 0
                    188:   sqlite3_initialize
                    189: } {SQLITE_OK}
                    190: 
                    191: autoinstall_test_functions
                    192: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>