From 7910e76ddb7720116d633a7bd931c4d2184d9d01 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 9 Jan 2006 23:50:11 +0000 Subject: [PATCH] Add the first simple tests of server mode. Get the Makefile generated from the configure script working again. (CVS 2898) FossilOrigin-Name: 66f84068f3c7c0963ce88f84fc0ba6775f64cd19 --- Makefile.in | 3 + manifest | 13 ++-- manifest.uuid | 2 +- test/server1.test | 172 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 183 insertions(+), 7 deletions(-) create mode 100644 test/server1.test diff --git a/Makefile.in b/Makefile.in index e2a07b8bfb..2d4a485629 100644 --- a/Makefile.in +++ b/Makefile.in @@ -185,12 +185,15 @@ TESTSRC = \ $(TOP)/src/pager.c \ $(TOP)/src/pragma.c \ $(TOP)/src/printf.c \ + $(TOP)/src/server.c \ $(TOP)/src/test1.c \ $(TOP)/src/test2.c \ $(TOP)/src/test3.c \ $(TOP)/src/test4.c \ $(TOP)/src/test5.c \ $(TOP)/src/test6.c \ + $(TOP)/src/test7.c \ + $(TOP)/src/test_async.c \ $(TOP)/src/utf.c \ $(TOP)/src/util.c \ $(TOP)/src/vdbe.c \ diff --git a/manifest b/manifest index 0ced8ac74d..2a5dc2b4d8 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ -C Added\sdatabase\sserver\sexample\scode\s(untested).\s\sFixed\sserveral\sbugs\sincluding\nthe\sautovacuum\scompile\sproblem\sdescribed\sby\sticket\s#1593.\s(CVS\s2897) -D 2006-01-09T23:40:25 -F Makefile.in c79fbdaa264c6afcd435f2fb492551de5a8cf80d +C Add\sthe\sfirst\ssimple\stests\sof\sserver\smode.\s\sGet\sthe\sMakefile\sgenerated\sfrom\nthe\sconfigure\sscript\sworking\sagain.\s(CVS\s2898) +D 2006-01-09T23:50:11 +F Makefile.in ab3ffd8d469cef4477257169b82810030a6bb967 F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F VERSION b818cce180263e590a00ad4509a713892c3eecea @@ -224,6 +224,7 @@ F test/select4.test c239f516aa31f42f2ef7c6d7cd01105f08f934ca F test/select5.test 07a90ab3c7e3f0a241a9cdea1d997b2c8a89ff0b F test/select6.test f459a19bdac0501c4d3eb1a4df4b7a76f1bb8ad4 F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6 +F test/server1.test c1611e0d6a032e740c09a07c9066ff9c83755126 F test/shared.test 413289e177e73c844cfc9896b6d78e0f2e62d963 F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5 F test/subquery.test e6de53332c0301b3cfa34edc3f3cd5fa1e859efd @@ -339,7 +340,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P eeebc640aaeeb0ab7f730d854069f159aa41968b -R be8fced19e9aacb1a6894a77c76ca49c +P ec332d8822d1ac9673581a26ab2a2fce5f2554a3 +R e5d15dbb3e926b9920df07fb0ac31ca5 U drh -Z f9c4ad5567aaf51e37a39a8cf2edcc05 +Z 9152e6540471def63c6c7493e6fbf1c1 diff --git a/manifest.uuid b/manifest.uuid index 9473f51699..8a24a66b65 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ec332d8822d1ac9673581a26ab2a2fce5f2554a3 \ No newline at end of file +66f84068f3c7c0963ce88f84fc0ba6775f64cd19 \ No newline at end of file diff --git a/test/server1.test b/test/server1.test new file mode 100644 index 0000000000..fda54599fa --- /dev/null +++ b/test/server1.test @@ -0,0 +1,172 @@ +# 2006 January 09 +# +# 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. +# +# This file is derived from thread1.test +# +# $Id: server1.test,v 1.1 2006/01/09 23:50:11 drh Exp $ + + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Skip this whole file if the server testing code is not enabled +# +if {[llength [info command client_step]]==0 || [sqlite3 -has-codec]} { + finish_test + return +} + +# Create some data to work with +# +do_test server1-1.1 { + execsql { + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,'abcdefgh'); + INSERT INTO t1 SELECT a+1, b||b FROM t1; + INSERT INTO t1 SELECT a+2, b||b FROM t1; + INSERT INTO t1 SELECT a+4, b||b FROM t1; + SELECT count(*), max(length(b)) FROM t1; + } +} {8 64} + +# Interleave two threads on read access. Then make sure a third +# thread can write the database. In other words: +# +# read-lock A +# read-lock B +# unlock A +# unlock B +# write-lock C +# +do_test server1-1.2 { + client_create A test.db + client_create B test.db + client_create C test.db + client_compile A {SELECT a FROM t1} + client_step A + client_result A +} SQLITE_ROW +do_test server1-1.3 { + client_argc A +} 1 +do_test server1-1.4 { + client_argv A 0 +} 1 +do_test server1-1.5 { + client_compile B {SELECT b FROM t1} + client_step B + client_result B +} SQLITE_ROW +do_test server1-1.6 { + client_argc B +} 1 +do_test server1-1.7 { + client_argv B 0 +} abcdefgh +do_test server1-1.8 { + client_finalize A + client_result A +} SQLITE_OK +do_test server1-1.9 { + client_finalize B + client_result B +} SQLITE_OK +do_test server1-1.10 { + client_compile C {CREATE TABLE t2(x,y)} + client_step C + client_result C +} SQLITE_DONE +do_test server1-1.11 { + client_finalize C + client_result C +} SQLITE_OK +do_test server1-1.12 { + catchsql {SELECT name FROM sqlite_master} + execsql {SELECT name FROM sqlite_master} +} {t1 t2} + + +# +# The following tests - server1-2.* - test the following scenario: +# +# 1: Read-lock thread A +# 2: Read-lock thread B +# 3: Attempt to write in thread C -> SQLITE_BUSY +# 4: Check db write failed from main thread. +# 5: Unlock from thread A. +# 6: Attempt to write in thread C -> SQLITE_BUSY +# 7: Check db write failed from main thread. +# 8: Unlock from thread B. +# 9: Attempt to write in thread C -> SQLITE_DONE +# 10: Finalize the write from thread C +# 11: Check db write succeeded from main thread. +# +do_test server1-2.1 { + client_halt * + client_create A test.db + client_compile A {SELECT a FROM t1} + client_step A + client_result A +} SQLITE_ROW +do_test server1-2.2 { + client_create B test.db + client_compile B {SELECT b FROM t1} + client_step B + client_result B +} SQLITE_ROW +do_test server1-2.3 { + client_create C test.db + client_compile C {INSERT INTO t2 VALUES(98,99)} + client_step C + client_result C + client_finalize C + client_result C +} SQLITE_BUSY + +do_test server1-2.4 { + execsql {SELECT * FROM t2} +} {} + +do_test server1-2.5 { + client_finalize A + client_result A +} SQLITE_OK +do_test server1-2.6 { + client_compile C {INSERT INTO t2 VALUES(98,99)} + client_step C + client_result C + client_finalize C + client_result C +} SQLITE_BUSY +do_test server1-2.7 { + execsql {SELECT * FROM t2} +} {} +do_test server1-2.8 { + client_finalize B + client_result B +} SQLITE_OK +do_test server1-2.9 { + client_compile C {INSERT INTO t2 VALUES(98,99)} + client_step C + client_result C +} SQLITE_DONE +do_test server1-2.10 { + client_finalize C + client_result C +} SQLITE_OK +do_test server1-2.11 { + execsql {SELECT * FROM t2} +} {98 99} + +client_halt * +finish_test -- 2.47.2