Annotation of embedaddon/sqlite3/test/oserror.test, revision 1.1
1.1 ! misho 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>