File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / unixexcl.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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>