From: dan Date: Fri, 18 Aug 2017 18:55:22 +0000 (+0000) Subject: Add tests to this branch. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=852841cc147e02cf4f83dbe092cd69262ab6cfa9;p=thirdparty%2Fsqlite.git Add tests to this branch. FossilOrigin-Name: abb6e076c851c0b10f62c02d0d7e54f24d86c75f01036dddbc0a8a7dfc627a0d --- diff --git a/manifest b/manifest index 4b9f259342..b1acfb1482 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\ssearch\sfor\slocks\sto\sclear\swhen\sconnecting\sto\sa\sdb\sin\smulti-process\smode\nunless\sit\slooks\slike\sthe\sprevious\suser\sof\sthe\sclient-id\scrashed. -D 2017-08-18T16:04:40.867 +C Add\stests\sto\sthis\sbranch. +D 2017-08-18T18:55:22.047 F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 02b469e9dcd5b7ee63fc1fb05babc174260ee4cfa4e0ef2e48c3c6801567a016 @@ -1094,7 +1094,7 @@ F test/parser1.test 391b9bf9a229547a129c61ac345ed1a6f5eb1854 F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff -F test/permutations.test b3326d58fe5c183ebcb359fe880db6c98ed1d3f4d3b350ec718f74287e063bee +F test/permutations.test 4554a5c671d480ba482260b5f3e92640c31902aac51d556cc5eb5bf129eb47a9 F test/pragma.test f274259d6393b6681eb433beb8dd39a26ec06a4431052a4880b43b84912a3f58 F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f F test/pragma3.test 14c12bc5352b1e100e0b6b44f371053a81ccf8ed @@ -1173,10 +1173,11 @@ F test/selectG.test e8600e379589e85e9fefd2fe4d44a4cdd63f6982 F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118 F test/server2.test e7890fb1eb9a11a0f94cd0892279e0f3cd1ba8c3006fa343637ee9ff3c4689f6 F test/server3.test c3ae4ca7a6e7df870bfcd2450a9815507eaa80b9cdc44ee6c7975d48311505d4 -F test/server4.test 97040670597948a695b1973537d770417589f1998bcbb3959302aaee3c211250 -F test/server5.test 2e554001145170094a19731a8ce2981d040cf44c947542b35d130e6e31256fca -F test/server_common.tcl 551923cf8d51fefcdb4444bfd72b88ca5c5228fe1525da5b6528ae4edb7a2f2e +F test/server_common.tcl c491d0f509b94a5cca845d45ca3bb47e464ad3a4bc89641982269112d0f1f3f4 F test/servercrash.test 1cbd2f98cadee2d8d42ed85ad76fbcf48958fedd537c82221838cd9bc6899dae +F test/serverfreelist.test 2e554001145170094a19731a8ce2981d040cf44c947542b35d130e6e31256fca w test/server5.test +F test/serverlimit.test 4bc013c0b991956486ddbff6ea3bee78a0d14a3d8091f5ec00e2bd34a7fa9aa7 +F test/serverreadonly.test 97040670597948a695b1973537d770417589f1998bcbb3959302aaee3c211250 w test/server4.test F test/session.test 78fa2365e93d3663a6e933f86e7afc395adf18be F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746 F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879 @@ -1657,7 +1658,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P a8115f95e80cc90c095fdd0a151da51f4d3ee427defdc34780e977585a68776d -R 3a806093fb1d82eb28aea633865a3bda +P 66fb9e1cb479f1e764f1606f041bd97fd3bd428093832c000ee36b643377e9e2 +R 6a3c43c16b1d75fce7516d061ebaa6d6 U dan -Z 66a9c79489e9385c1bc99754d5e08a1b +Z f1a62abc260e8d42c995536e20991d87 diff --git a/manifest.uuid b/manifest.uuid index 0a6b25db9f..74095647dd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -66fb9e1cb479f1e764f1606f041bd97fd3bd428093832c000ee36b643377e9e2 \ No newline at end of file +abb6e076c851c0b10f62c02d0d7e54f24d86c75f01036dddbc0a8a7dfc627a0d \ No newline at end of file diff --git a/test/permutations.test b/test/permutations.test index 736c4ddedb..b7b6e3c896 100644 --- a/test/permutations.test +++ b/test/permutations.test @@ -278,8 +278,8 @@ test_suite "server" -prefix "" -description { All server-edition tests. } -files [ test_set \ - select1.test server2.test server3.test server4.test server5.test \ - servercrash.test + select1.test server2.test server3.test serverfreelist.test \ + serverreadonly.test servercrash.test serverlimit.test ] test_suite "fts5-light" -prefix "" -description { diff --git a/test/server_common.tcl b/test/server_common.tcl index d21c60085d..937bb5ef90 100644 --- a/test/server_common.tcl +++ b/test/server_common.tcl @@ -32,8 +32,15 @@ proc server_reset_db {} { server_sqlite3 db test.db } + set ::server_vfs unix-excl proc server_set_vfs {vfs} { - set ::server_vfs $vfs + if {$vfs=="single"} { + set ::server_vfs unix-excl + } elseif {$vfs=="multi"} { + set ::server_vfs unix + } else { + set ::server_vfs $vfs + } } diff --git a/test/server5.test b/test/serverfreelist.test similarity index 100% rename from test/server5.test rename to test/serverfreelist.test diff --git a/test/serverlimit.test b/test/serverlimit.test new file mode 100644 index 0000000000..2c8a262942 --- /dev/null +++ b/test/serverlimit.test @@ -0,0 +1,177 @@ +# 2017 April 25 +# +# 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. The +# focus of this script is testing the server mode of SQLite. +# + + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix serverlimit + +source $testdir/server_common.tcl +source $testdir/lock_common.tcl +return_if_no_server + +#------------------------------------------------------------------------- +# Test plan: +# +# 1.* The concurrent connections limit in multi-process mode. With all +# connections in the local process. +# +# 2.* The concurrent connections limit in multi-process mode. Using +# multiple processes. +# +# 3.* The concurrent transactions limit in single-process mode. +# + +server_set_vfs multi +server_reset_db + +set MLIMIT 16 ;# maximum number of allowed connections + +do_test 1.0 { + server_sqlite3 db test.db + db eval { + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('hello'), ('world'); + } + db close + for {set i 0} {$i < $MLIMIT} {incr i} { + server_sqlite3 db.$i test.db + db.$i eval { SELECT * FROM t1 } + } + set {} {} +} {} + +# Connection [db] cannot connect - all client slots are occupied. +# +do_test 1.1 { + server_sqlite3 db test.db + list [catch { db eval { SELECT * FROM t1 } } msg] $msg +} {1 {database is locked}} + +# But, if one connection disconnects, [db] can then connect and +# query the db. +# +do_test 1.2 { + db.0 close + list [catch { db eval { SELECT * FROM t1 } } msg] $msg +} {0 {hello world}} + +do_test 1.3 { + for {set i 0} {$i < $MLIMIT} {incr i} { + catch { db.$i close } + } + set {} {} +} {} + +#------------------------------------------------------------------------- +# Connections in different processes. +do_multiclient_test tn { + code1 { db close } + code2 { db2 close } + code3 { db3 close } + + set N1 [expr $MLIMIT / 2] + set N2 [expr $MLIMIT - $N1] + + do_test 2.$tn.0 { + file mkdir test.db-journal + code1 { + sqlite3 db test.db + db eval { + CREATE TABLE t11(a, b); + INSERT INTO t11 VALUES(1, 2), (3, 4); + } + db close + + for {set i 0} {$i < $N1} {incr i} { + sqlite3 db.$i test.db + db.$i eval { SELECT * FROM t11 } + } + } + + code2 [string map [list %N2% $N2] { + for {set i 0} {$i < %N2%} {incr i} { + sqlite3 db2.$i test.db + db2.$i eval { SELECT * FROM t11 } + } + }] + + code2 { db2.0 eval {SELECT * FROM t11} } + } {1 2 3 4} + + do_test 2.$tn.1 { + code3 { sqlite3 db3 test.db } + csql3 { SELECT * FROM t11 } + } {1 {database is locked}} + + do_test 2.$tn.2 { + code2 { db2.0 close } + csql3 { SELECT * FROM t11 } + } {0 {1 2 3 4}} + + do_test 2.$tn.3 { + code1 { sqlite3 db test.db } + csql1 { SELECT * FROM t11 } + } {1 {database is locked}} + + do_test 2.$tn.4 { + code2 { db2.1 close } + csql1 { SELECT * FROM t11 } + } {0 {1 2 3 4}} + + do_test 2.$tn.X { + code1 { for {set i 0} {$i < 50} {incr i} { catch {db.$i close} } } + code2 { for {set i 0} {$i < 50} {incr i} { catch {db2.$i close} } } + } {} +} + +server_set_vfs single +server_reset_db + +set TLIMIT 16 + +do_test 3.0 { + execsql "CREATE TABLE t1 (o PRIMARY KEY) WITHOUT ROWID" + for {set i 0} {$i < $TLIMIT} {incr i} { + execsql "CREATE TABLE x$i (o PRIMARY KEY) WITHOUT ROWID" + } + set "" "" +} {} +do_test 3.1 { + for {set i 0} {$i < $TLIMIT} {incr i} { + sqlite3 db.$i test.db + db.$i eval " + BEGIN; + INSERT INTO x$i VALUES ('one'); + " + } +} {} +do_catchsql_test 3.2 { + INSERT INTO t1 VALUES('two'); +} {1 {database is locked}} +do_test 3.3 { + db.0 eval COMMIT + execsql { INSERT INTO t1 VALUES('two'); } +} {} +do_catchsql_test 3.4 { SELECT * FROM x1 } {1 {database is locked}} +do_catchsql_test 3.5 { SELECT * FROM x0 } {0 one} +do_test 3.6 { + for {set i 1} {$i < $TLIMIT} {incr i} { + db.$i eval COMMIT + } +} {} + + +finish_test + diff --git a/test/server4.test b/test/serverreadonly.test similarity index 100% rename from test/server4.test rename to test/serverreadonly.test