]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the first simple tests of server mode. Get the Makefile generated from
authordrh <drh@noemail.net>
Mon, 9 Jan 2006 23:50:11 +0000 (23:50 +0000)
committerdrh <drh@noemail.net>
Mon, 9 Jan 2006 23:50:11 +0000 (23:50 +0000)
the configure script working again. (CVS 2898)

FossilOrigin-Name: 66f84068f3c7c0963ce88f84fc0ba6775f64cd19

Makefile.in
manifest
manifest.uuid
test/server1.test [new file with mode: 0644]

index e2a07b8bfb9621b614e18d9f06218df03a134c8d..2d4a485629ed92ff0bc06a91b7800b4f799df32b 100644 (file)
@@ -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 \
index 0ced8ac74d3a8a2df9106e9f6d9954fca9ce8b9f..2a5dc2b4d8cad477c492df621612256c2a82422e 100644 (file)
--- 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
index 9473f51699c8d73e94c75baefd41c9be8089e999..8a24a66b6568748156b0e00c765aa9f7f8d0d57e 100644 (file)
@@ -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 (file)
index 0000000..fda5459
--- /dev/null
@@ -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