aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test
diff options
context:
space:
mode:
authordan miller2007-10-20 02:49:29 +0000
committerdan miller2007-10-20 02:49:29 +0000
commite36d23a85ebff914d74bb541558c2b6082b78edb (patch)
tree54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test
parent* Fixed an issue whereby avatar chat distances were being calculated against ... (diff)
downloadopensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.zip
opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz
opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2
opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test')
-rw-r--r--libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test169
1 files changed, 169 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test b/libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test
new file mode 100644
index 0000000..d071844
--- /dev/null
+++ b/libraries/sqlite/unix/sqlite-3.5.1/test/lock2.test
@@ -0,0 +1,169 @@
1# 2001 September 15
2#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
6# May you do good and not evil.
7# May you find forgiveness for yourself and forgive others.
8# May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library. The
12# focus of this script is database locks between competing processes.
13#
14# $Id: lock2.test,v 1.8 2007/08/12 20:07:59 drh Exp $
15
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20# Launch another testfixture process to be controlled by this one. A
21# channel name is returned that may be passed as the first argument to proc
22# 'testfixture' to execute a command. The child testfixture process is shut
23# down by closing the channel.
24proc launch_testfixture {} {
25 set prg [info nameofexec]
26 if {$prg eq ""} {
27 set prg [file join . testfixture]
28 }
29 set chan [open "|$prg tf_main.tcl" r+]
30 fconfigure $chan -buffering line
31 return $chan
32}
33
34# Execute a command in a child testfixture process, connected by two-way
35# channel $chan. Return the result of the command, or an error message.
36proc testfixture {chan cmd} {
37 puts $chan $cmd
38 puts $chan OVER
39 set r ""
40 while { 1 } {
41 set line [gets $chan]
42 if { $line == "OVER" } {
43 return $r
44 }
45 append r $line
46 }
47}
48
49# Write the main loop for the child testfixture processes into file
50# tf_main.tcl. The parent (this script) interacts with the child processes
51# via a two way pipe. The parent writes a script to the stdin of the child
52# process, followed by the word "OVER" on a line of it's own. The child
53# process evaluates the script and writes the results to stdout, followed
54# by an "OVER" of its own.
55set f [open tf_main.tcl w]
56puts $f {
57 set l [open log w]
58 set script ""
59 while {![eof stdin]} {
60 flush stdout
61 set line [gets stdin]
62 puts $l "READ $line"
63 if { $line == "OVER" } {
64 catch {eval $script} result
65 puts $result
66 puts $l "WRITE $result"
67 puts OVER
68 puts $l "WRITE OVER"
69 flush stdout
70 set script ""
71 } else {
72 append script $line
73 append script " ; "
74 }
75 }
76 close $l
77}
78close $f
79
80# Simple locking test case:
81#
82# lock2-1.1: Connect a second process to the database.
83# lock2-1.2: Establish a RESERVED lock with this process.
84# lock2-1.3: Get a SHARED lock with the second process.
85# lock2-1.4: Try for a RESERVED lock with process 2. This fails.
86# lock2-1.5: Try to upgrade the first process to EXCLUSIVE, this fails so
87# it gets PENDING.
88# lock2-1.6: Release the SHARED lock held by the second process.
89# lock2-1.7: Attempt to reaquire a SHARED lock with the second process.
90# this fails due to the PENDING lock.
91# lock2-1.8: Ensure the first process can now upgrade to EXCLUSIVE.
92#
93do_test lock2-1.1 {
94 set ::tf1 [launch_testfixture]
95 testfixture $::tf1 "set sqlite_pending_byte $::sqlite_pending_byte"
96 testfixture $::tf1 {
97 sqlite3 db test.db -key xyzzy
98 db eval {select * from sqlite_master}
99 }
100} {}
101do_test lock2-1.1.1 {
102 execsql {pragma lock_status}
103} {main unlocked temp closed}
104sqlite3_soft_heap_limit 0
105do_test lock2-1.2 {
106 execsql {
107 BEGIN;
108 CREATE TABLE abc(a, b, c);
109 }
110} {}
111do_test lock2-1.3 {
112 testfixture $::tf1 {
113 db eval {
114 BEGIN;
115 SELECT * FROM sqlite_master;
116 }
117 }
118} {}
119do_test lock2-1.4 {
120 testfixture $::tf1 {
121 db eval {
122 CREATE TABLE def(d, e, f)
123 }
124 }
125} {database is locked}
126do_test lock2-1.5 {
127 catchsql {
128 COMMIT;
129 }
130} {1 {database is locked}}
131do_test lock2-1.6 {
132 testfixture $::tf1 {
133 db eval {
134 SELECT * FROM sqlite_master;
135 COMMIT;
136 }
137 }
138} {}
139do_test lock2-1.7 {
140 testfixture $::tf1 {
141 db eval {
142 BEGIN;
143 SELECT * FROM sqlite_master;
144 }
145 }
146} {database is locked}
147do_test lock2-1.8 {
148 catchsql {
149 COMMIT;
150 }
151} {0 {}}
152do_test lock2-1.9 {
153 execsql {
154 SELECT * FROM sqlite_master;
155 }
156} "table abc abc [expr $AUTOVACUUM?3:2] {CREATE TABLE abc(a, b, c)}"
157do_test lock2-1.10 {
158 testfixture $::tf1 {
159 db eval {
160 SELECT * FROM sqlite_master;
161 }
162 }
163} "table abc abc [expr $AUTOVACUUM?3:2] {CREATE TABLE abc(a, b, c)}"
164
165catch {testfixture $::tf1 {db close}}
166catch {close $::tf1}
167sqlite3_soft_heap_limit $soft_limit
168
169finish_test