Annotation of embedaddon/sqlite3/test/unixexcl.test, revision 1.1.1.1

1.1       misho       1: # 2011 March 30
                      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: #
                     12: # This file contains tests for the "unix-excl" VFS module (part of 
                     13: # os_unix.c).
                     14: #
                     15: 
                     16: set testdir [file dirname $argv0]
                     17: source $testdir/tester.tcl
                     18: source $testdir/lock_common.tcl
                     19: source $testdir/malloc_common.tcl
                     20: 
                     21: if {$::tcl_platform(platform)!="unix" || [info commands test_syscall]==""} {
                     22:   finish_test
                     23:   return
                     24: } 
                     25: set testprefix unixexcl
                     26: 
                     27: 
                     28: 
                     29: # Test that when using VFS "unix-excl", the first time the database is read
                     30: # a process-wide exclusive lock is taken on it. This means other connections
                     31: # within the process may still access the db normally, but connections from
                     32: # outside the process cannot.
                     33: #
                     34: do_multiclient_test tn {
                     35:   do_test unixexcl-1.$tn.1 {
                     36:     sql1 {
                     37:       CREATE TABLE t1(a, b);
                     38:       INSERT INTO t1 VALUES('hello', 'world');
                     39:     }
                     40:   } {}
                     41:   do_test unixexcl-1.$tn.2 { sql2 { SELECT * FROM t1 } } {hello world}
                     42:   do_test unixexcl-1.$tn.3 {
                     43:     code1 {
                     44:       db close
                     45:       sqlite3 db test.db -vfs unix-excl
                     46:       db eval { SELECT * FROM t1 }
                     47:     }
                     48:   } {hello world}
                     49:   if {$tn==1} {
                     50:     do_test unixexcl-1.$tn.4.multiproc { 
                     51:       csql2 { SELECT * FROM t1 } 
                     52:     } {1 {database is locked}}
                     53:   } else {
                     54:     do_test unixexcl-1.$tn.4.singleproc { 
                     55:       csql2 { SELECT * FROM t1 } 
                     56:     } {0 {hello world}}
                     57:   }
                     58: }
                     59: 
                     60: # Test that when using VFS "unix-excl", if a file is opened in read-only mode
                     61: # the behaviour is the same as if VFS "unix" were used.
                     62: #
                     63: do_multiclient_test tn {
                     64:   do_test unixexcl-2.$tn.1 {
                     65:     sql1 {
                     66:       CREATE TABLE t1(a, b);
                     67:       INSERT INTO t1 VALUES('hello', 'world');
                     68:     }
                     69:   } {}
                     70:   do_test unixexcl-2.$tn.2 { sql2 { SELECT * FROM t1 } } {hello world}
                     71:   do_test unixexcl-2.$tn.3 {
                     72:     code1 {
                     73:       db close
                     74:       sqlite3 db test.db -readonly yes -vfs unix-excl
                     75:       db eval { SELECT * FROM t1 }
                     76:     }
                     77:   } {hello world}
                     78:   do_test unixexcl-2.$tn.4 { 
                     79:     csql2 { SELECT * FROM t1 } 
                     80:   } {0 {hello world}}
                     81: }
                     82: 
                     83: do_multiclient_test tn {
                     84:   do_test unixexcl-3.$tn.1 {
                     85:     code1 { db close; sqlite3 db file:test.db?psow=0 -vfs unix-excl -uri 1 }
                     86:     code2 { db2 close; sqlite3 db2 file:test.db?psow=0 -vfs unix-excl -uri 1 }
                     87:     sql1 {
                     88:       PRAGMA auto_vacuum = 0;
                     89:       PRAGMA journal_mode = WAL;
                     90:       CREATE TABLE t1(a, b);
                     91:       INSERT INTO t1 VALUES(1, 2);
                     92:     }
                     93:   } {wal}
                     94: 
                     95:   if {$tn==1} {
                     96:     do_test unixexcl-3.$tn.1.multiproc {
                     97:       csql2 { SELECT * FROM t1; }
                     98:     } {1 {database is locked}}
                     99:   } else {
                    100:     do_test unixexcl-3.$tn.1.singleproc {
                    101:       sql2 { SELECT * FROM t1; }
                    102:     } {1 2}
                    103: 
                    104:     do_test unixexcl-3.$tn.2 {
                    105:       sql2 { 
                    106:         BEGIN;
                    107:           SELECT * FROM t1;
                    108:       }
                    109:     } {1 2}
                    110:     do_test unixexcl-3.$tn.3 {
                    111:       sql1 { PRAGMA wal_checkpoint; INSERT INTO t1 VALUES(3, 4); }
                    112:     } {0 3 3}
                    113:     do_test unixexcl-3.$tn.4 {
                    114:       sql2 { SELECT * FROM t1; }
                    115:     } {1 2}
                    116:     do_test unixexcl-3.$tn.5 {
                    117:       sql1 { SELECT * FROM t1; }
                    118:     } {1 2 3 4}
                    119:     do_test unixexcl-3.$tn.6 {
                    120:       sql2 { COMMIT; SELECT * FROM t1; }
                    121:     } {1 2 3 4}
                    122:     do_test unixexcl-3.$tn.7 {
                    123:       sql1 { PRAGMA wal_checkpoint; }
                    124:     } {0 4 4}
                    125:   }
                    126: }
                    127: 
                    128: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>