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