# 2011 March 30
#
# 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 contains tests for the "unix-excl" VFS module (part of 
# os_unix.c).
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl
source $testdir/lock_common.tcl
source $testdir/malloc_common.tcl

if {$::tcl_platform(platform)!="unix" || [info commands test_syscall]==""} {
  finish_test
  return
} 
set testprefix unixexcl



# Test that when using VFS "unix-excl", the first time the database is read
# a process-wide exclusive lock is taken on it. This means other connections
# within the process may still access the db normally, but connections from
# outside the process cannot.
#
do_multiclient_test tn {
  do_test unixexcl-1.$tn.1 {
    sql1 {
      CREATE TABLE t1(a, b);
      INSERT INTO t1 VALUES('hello', 'world');
    }
  } {}
  do_test unixexcl-1.$tn.2 { sql2 { SELECT * FROM t1 } } {hello world}
  do_test unixexcl-1.$tn.3 {
    code1 {
      db close
      sqlite3 db test.db -vfs unix-excl
      db eval { SELECT * FROM t1 }
    }
  } {hello world}
  if {$tn==1} {
    do_test unixexcl-1.$tn.4.multiproc { 
      csql2 { SELECT * FROM t1 } 
    } {1 {database is locked}}
  } else {
    do_test unixexcl-1.$tn.4.singleproc { 
      csql2 { SELECT * FROM t1 } 
    } {0 {hello world}}
  }
}

# Test that when using VFS "unix-excl", if a file is opened in read-only mode
# the behaviour is the same as if VFS "unix" were used.
#
do_multiclient_test tn {
  do_test unixexcl-2.$tn.1 {
    sql1 {
      CREATE TABLE t1(a, b);
      INSERT INTO t1 VALUES('hello', 'world');
    }
  } {}
  do_test unixexcl-2.$tn.2 { sql2 { SELECT * FROM t1 } } {hello world}
  do_test unixexcl-2.$tn.3 {
    code1 {
      db close
      sqlite3 db test.db -readonly yes -vfs unix-excl
      db eval { SELECT * FROM t1 }
    }
  } {hello world}
  do_test unixexcl-2.$tn.4 { 
    csql2 { SELECT * FROM t1 } 
  } {0 {hello world}}
}

finish_test
