File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / oserror.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 February 19
    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 file is testing that error messages are logged via the
   13: # sqlite3_log() mechanism when certain errors are encountered in the
   14: # default unix or windows VFS modules.
   15: #
   16: 
   17: set testdir [file dirname $argv0]
   18: source $testdir/tester.tcl
   19: if {$::tcl_platform(platform)!="unix"} { finish_test ; return }
   20: set ::testprefix oserror
   21: 
   22: db close
   23: sqlite3_shutdown
   24: test_sqlite3_log xLog
   25: proc xLog {error_code msg} {
   26:   if {[string match os_* $msg]} {
   27:     lappend ::log $msg 
   28:   }
   29: }
   30: 
   31: proc do_re_test {tn script expression} {
   32:   uplevel do_test $tn [list [subst -nocommands {
   33:     set res [eval { $script }]
   34:     if {[regexp {$expression} [set res]]} {
   35:       set {} {$expression}
   36:     } else {
   37:       set res
   38:     }
   39:   }]] [list $expression]
   40:   
   41: }
   42: 
   43: #--------------------------------------------------------------------------
   44: # Tests oserror-1.* test failures in the open() system call.
   45: #
   46: 
   47: # Test a failure in open() due to too many files. 
   48: #
   49: # The xOpen() method of the unix VFS calls getcwd() as well as open().
   50: # Although this does not appear to be documented in the man page, on OSX
   51: # a call to getcwd() may fail if there are no free file descriptors. So
   52: # an error may be reported for either open() or getcwd() here.
   53: #
   54: puts "Possible valgrind error about invalid file descriptor follows:"
   55: do_test 1.1.1 {
   56:   set ::log [list]
   57:   list [catch {
   58:     for {set i 0} {$i < 2000} {incr i} { sqlite3 dbh_$i test.db -readonly 1 }
   59:   } msg] $msg
   60: } {1 {unable to open database file}}
   61: do_test 1.1.2 {
   62:   catch { for {set i 0} {$i < 2000} {incr i} { dbh_$i close } }
   63: } {1}
   64: do_re_test 1.1.3 { 
   65:   lindex $::log 0 
   66: } {^os_unix.c:\d+: \(\d+\) (open|getcwd)\(.*test.db\) - }
   67: 
   68: 
   69: # Test a failure in open() due to the path being a directory.
   70: #
   71: do_test 1.2.1 {
   72:   file mkdir dir.db
   73:   set ::log [list]
   74:   list [catch { sqlite3 dbh dir.db } msg] $msg
   75: } {1 {unable to open database file}}
   76: 
   77: do_re_test 1.2.2 { lindex $::log 0 } {^os_unix.c:\d+: \(\d+\) open\(.*dir.db\) - }
   78: 
   79: # Test a failure in open() due to the path not existing.
   80: #
   81: do_test 1.3.1 {
   82:   set ::log [list]
   83:   list [catch { sqlite3 dbh /x/y/z/test.db } msg] $msg
   84: } {1 {unable to open database file}}
   85: 
   86: do_re_test 1.3.2 { lindex $::log 0 } {^os_unix.c:\d+: \(\d+\) open\(.*test.db\) - }
   87: 
   88: # Test a failure in open() due to the path not existing.
   89: #
   90: do_test 1.4.1 {
   91:   set ::log [list]
   92:   list [catch { sqlite3 dbh /root/test.db } msg] $msg
   93: } {1 {unable to open database file}}
   94: 
   95: do_re_test 1.4.2 { lindex $::log 0 } {^os_unix.c:\d*: \(\d+\) open\(.*test.db\) - }
   96: 
   97: #--------------------------------------------------------------------------
   98: # Tests oserror-1.* test failures in the unlink() system call.
   99: #
  100: ifcapable wal {
  101:   do_test 2.1.1 {
  102:     set ::log [list]
  103:     file mkdir test.db-wal
  104:     forcedelete test.db
  105:     list [catch {
  106:       sqlite3 dbh test.db
  107:       execsql { SELECT * FROM sqlite_master } dbh
  108:     } msg] $msg
  109:   } {1 {disk I/O error}}
  110:   
  111:   do_re_test 2.1.2 { 
  112:     lindex $::log 0 
  113:   } {^os_unix.c:\d+: \(\d+\) unlink\(.*test.db-wal\) - }
  114:   do_test 2.1.3 { 
  115:     catch { dbh close }
  116:     forcedelete test.db-wal
  117:   } {}
  118: }
  119:   
  120: 
  121: test_syscall reset
  122: sqlite3_shutdown
  123: test_sqlite3_log 
  124: sqlite3_initialize
  125: finish_test

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