sqlite/test/manydb.test
aswift aebf413d9a Added support for proxy file locking style
Added pragma support for controlling proxy file locking
Added file control access to last errno and proxy locking
Added support for TMPDIR environment variable
Extended unit tests to cover new proxy locking pragmas and file control features (CVS 5934)

FossilOrigin-Name: b9bc36d3d5e35821ef69c0881a84c0afed253c9e
2008-11-21 00:10:35 +00:00

103 lines
2.3 KiB
Plaintext

# 2005 October 3
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library.
#
# This file implements tests the ability of the library to open
# many different databases at the same time without leaking memory.
#
# $Id: manydb.test,v 1.4 2008/11/21 00:10:35 aswift Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set N 300
# if we're using proxy locks, we use 5 filedescriptors for a db
# that is open and in the middle of writing changes, normally
# sqlite uses 3 (proxy locking adds the conch and the local lock)
set using_proxy 0
foreach {name value} [array get env SQLITE_FORCE_PROXY_LOCKING] {
set using_proxy value
}
set num_fd_per_openwrite_db 3
if {$using_proxy>0} {
set num_fd_per_openwrite_db 5
}
# First test how many file descriptors are available for use. To open a
# database for writing SQLite requires 3 file descriptors (the database, the
# journal and the directory).
set filehandles {}
catch {
for {set i 0} {$i<($N * 3)} {incr i} {
lappend filehandles [open testfile.1 w]
}
}
foreach fd $filehandles {
close $fd
}
catch {
file delete -force testfile.1
}
set N [expr $i / $num_fd_per_openwrite_db]
# Create a bunch of random database names
#
unset -nocomplain dbname
unset -nocomplain used
for {set i 0} {$i<$N} {incr i} {
while 1 {
set name test-[format %08x [expr {int(rand()*0x7fffffff)}]].db
if {[info exists used($name)]} continue
set dbname($i) $name
set used($name) $i
break
}
}
# Create a bunch of databases
#
for {set i 0} {$i<$N} {incr i} {
do_test manydb-1.$i {
sqlite3 db$i $dbname($i)
execsql {
CREATE TABLE t1(a,b);
BEGIN;
INSERT INTO t1 VALUES(1,2);
} db$i
} {}
}
# Finish the transactions
#
for {set i 0} {$i<$N} {incr i} {
do_test manydb-2.$i {
execsql {
COMMIT;
SELECT * FROM t1;
} db$i
} {1 2}
}
# Close the databases and erase the files.
#
for {set i 0} {$i<$N} {incr i} {
do_test manydb-3.$i {
db$i close
file delete -force $dbname($i)
} {}
}
finish_test