| Index: third_party/sqlite/src/test/mutex1.test
|
| diff --git a/third_party/sqlite/src/test/mutex1.test b/third_party/sqlite/src/test/mutex1.test
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4bdf769ad302c7c777de58d7b03a5f7c21061c2d
|
| --- /dev/null
|
| +++ b/third_party/sqlite/src/test/mutex1.test
|
| @@ -0,0 +1,192 @@
|
| +# 2008 June 17
|
| +#
|
| +# The author disclaims copyright to this source code. In place of
|
| +# a legal notice, here is a blessing:
|
| +#
|
| +# May you do good and not evil.
|
| +# May you find forgiveness for yourself and forgive others.
|
| +# May you share freely, never taking more than you give.
|
| +#
|
| +#***********************************************************************
|
| +#
|
| +# $Id: mutex1.test,v 1.20 2009/04/23 14:58:40 danielk1977 Exp $
|
| +
|
| +set testdir [file dirname $argv0]
|
| +source $testdir/tester.tcl
|
| +
|
| +ifcapable !mutex {
|
| + finish_test
|
| + return
|
| +}
|
| +if {[info exists tester_do_binarylog]} {
|
| + finish_test
|
| + return
|
| +}
|
| +
|
| +sqlite3_reset_auto_extension
|
| +clear_mutex_counters
|
| +
|
| +proc mutex_counters {varname} {
|
| + upvar $varname var
|
| + set var(total) 0
|
| + foreach {name value} [read_mutex_counters] {
|
| + set var($name) $value
|
| + incr var(total) $value
|
| + }
|
| +}
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Tests mutex1-1.* test that sqlite3_config() returns SQLITE_MISUSE if
|
| +# is called at the wrong time. And that the first time sqlite3_initialize
|
| +# is called it obtains the 'static_master' mutex 3 times and a recursive
|
| +# mutex (sqlite3Config.pInitMutex) twice. Subsequent calls are no-ops
|
| +# that do not require any mutexes.
|
| +#
|
| +do_test mutex1-1.0 {
|
| + install_mutex_counters 1
|
| +} {SQLITE_MISUSE}
|
| +
|
| +do_test mutex1-1.1 {
|
| + db close
|
| + install_mutex_counters 1
|
| +} {SQLITE_MISUSE}
|
| +
|
| +do_test mutex1-1.2 {
|
| + sqlite3_shutdown
|
| + install_mutex_counters 1
|
| +} {SQLITE_OK}
|
| +
|
| +do_test mutex1-1.3 {
|
| + install_mutex_counters 0
|
| +} {SQLITE_OK}
|
| +
|
| +do_test mutex1-1.4 {
|
| + install_mutex_counters 1
|
| +} {SQLITE_OK}
|
| +
|
| +do_test mutex1-1.5 {
|
| + mutex_counters counters
|
| + set counters(total)
|
| +} {0}
|
| +
|
| +do_test mutex1-1.6 {
|
| + sqlite3_initialize
|
| +} {SQLITE_OK}
|
| +
|
| +do_test mutex1-1.7 {
|
| + mutex_counters counters
|
| + # list $counters(total) $counters(static_master)
|
| + expr {$counters(total)>0}
|
| +} {1}
|
| +
|
| +do_test mutex1-1.8 {
|
| + clear_mutex_counters
|
| + sqlite3_initialize
|
| +} {SQLITE_OK}
|
| +
|
| +do_test mutex1-1.9 {
|
| + mutex_counters counters
|
| + list $counters(total) $counters(static_master)
|
| +} {0 0}
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Tests mutex1-2.* test the three thread-safety related modes that
|
| +# can be selected using sqlite3_config:
|
| +#
|
| +# * Serialized mode,
|
| +# * Multi-threaded mode,
|
| +# * Single-threaded mode.
|
| +#
|
| +ifcapable threadsafe&&shared_cache {
|
| + set enable_shared_cache [sqlite3_enable_shared_cache 1]
|
| + foreach {mode mutexes} {
|
| + singlethread {}
|
| + multithread {
|
| + fast static_lru static_master static_mem static_open static_prng
|
| + static_pmem
|
| + }
|
| + serialized {
|
| + fast recursive static_lru static_master static_mem static_open
|
| + static_prng static_pmem
|
| + }
|
| + } {
|
| +
|
| + do_test mutex1.2.$mode.1 {
|
| + catch {db close}
|
| + sqlite3_shutdown
|
| + sqlite3_config $mode
|
| + } SQLITE_OK
|
| +
|
| + do_test mutex1.2.$mode.2 {
|
| + sqlite3_initialize
|
| + clear_mutex_counters
|
| + sqlite3 db test.db -nomutex 0 -fullmutex 0
|
| + catchsql { CREATE TABLE abc(a, b, c) }
|
| + db eval {
|
| + INSERT INTO abc VALUES(1, 2, 3);
|
| + }
|
| + } {}
|
| + ifcapable !memorymanage {
|
| + regsub { static_lru} $mutexes {} mutexes
|
| + }
|
| + do_test mutex1.2.$mode.3 {
|
| + mutex_counters counters
|
| +
|
| + set res [list]
|
| + foreach {key value} [array get counters] {
|
| + if {$key ne "total" && $value > 0} {
|
| + lappend res $key
|
| + }
|
| + }
|
| + lsort $res
|
| + } [lsort $mutexes]
|
| + }
|
| + sqlite3_enable_shared_cache $enable_shared_cache
|
| +
|
| + # Open and use a connection in "nomutex" mode. Test that no recursive
|
| + # mutexes are obtained.
|
| + do_test mutex1.3.1 {
|
| + catch {db close}
|
| + clear_mutex_counters
|
| + sqlite3 db test.db -nomutex 1
|
| + execsql { SELECT * FROM abc }
|
| + } {1 2 3 1 2 3 1 2 3}
|
| + do_test mutex1.3.2 {
|
| + mutex_counters counters
|
| + set counters(recursive)
|
| + } {0}
|
| +}
|
| +
|
| +# Test the sqlite3_db_mutex() function.
|
| +#
|
| +do_test mutex1.4.1 {
|
| + catch {db close}
|
| + sqlite3 db test.db
|
| + enter_db_mutex db
|
| + db eval {SELECT 1, 2, 3}
|
| +} {1 2 3}
|
| +do_test mutex1.4.2 {
|
| + leave_db_mutex db
|
| + db eval {SELECT 1, 2, 3}
|
| +} {1 2 3}
|
| +do_test mutex1.4.3 {
|
| + catch {db close}
|
| + sqlite3 db test.db -nomutex 1
|
| + enter_db_mutex db
|
| + db eval {SELECT 1, 2, 3}
|
| +} {1 2 3}
|
| +do_test mutex1.4.4 {
|
| + leave_db_mutex db
|
| + db eval {SELECT 1, 2, 3}
|
| +} {1 2 3}
|
| +
|
| +do_test mutex1-X {
|
| + catch {db close}
|
| + sqlite3_shutdown
|
| + clear_mutex_counters
|
| + install_mutex_counters 0
|
| + sqlite3_initialize
|
| +} {SQLITE_OK}
|
| +
|
| +autoinstall_test_functions
|
| +finish_test
|
|
|