Annotation of embedaddon/sqlite3/test/async.test, revision 1.1
1.1 ! misho 1: #
! 2: # May you do good and not evil.
! 3: # May you find forgiveness for yourself and forgive others.
! 4: # May you share freely, never taking more than you give.
! 5: #
! 6: #***********************************************************************
! 7: # This file runs all tests.
! 8: #
! 9: # $Id: async.test,v 1.21 2009/06/05 17:09:12 drh Exp $
! 10:
! 11: set testdir [file dirname $argv0]
! 12: source $testdir/tester.tcl
! 13:
! 14: if {[info commands sqlite3async_initialize] eq ""} {
! 15: # The async logic is not built into this system
! 16: finish_test
! 17: return
! 18: }
! 19:
! 20: rename finish_test async_really_finish_test
! 21: proc finish_test {} {
! 22: catch {db close}
! 23: catch {db2 close}
! 24: catch {db3 close}
! 25: }
! 26: if {[info exists G(isquick)]} { set ASYNC_SAVE_ISQUICK $G(isquick) }
! 27: set G(isquick) 1
! 28:
! 29: set ASYNC_INCLUDE {
! 30: insert.test
! 31: insert2.test
! 32: insert3.test
! 33: lock.test
! 34: lock2.test
! 35: lock3.test
! 36: select1.test
! 37: select2.test
! 38: select3.test
! 39: select4.test
! 40: trans.test
! 41: }
! 42:
! 43: # Enable asynchronous IO.
! 44: sqlite3async_initialize "" 1
! 45:
! 46: # This proc flushes the contents of the async-IO queue through to the
! 47: # underlying VFS. A couple of the test scripts identified in $ASYNC_INCLUDE
! 48: # above contain lines like "catch flush_async_queue" in places where
! 49: # this is required for the tests to work in async mode.
! 50: #
! 51: proc flush_async_queue {} {
! 52: sqlite3async_control halt idle
! 53: sqlite3async_start
! 54: sqlite3async_wait
! 55: sqlite3async_control halt never
! 56: }
! 57:
! 58: rename do_test async_really_do_test
! 59: proc do_test {name args} {
! 60: uplevel async_really_do_test async_io-$name $args
! 61: flush_async_queue
! 62: }
! 63:
! 64: foreach testfile [lsort -dictionary [glob $testdir/*.test]] {
! 65: set tail [file tail $testfile]
! 66: if {[lsearch -exact $ASYNC_INCLUDE $tail]<0} continue
! 67: source $testfile
! 68:
! 69: # Make sure everything is flushed through. This is because [source]ing
! 70: # the next test file will delete the database file on disk (using
! 71: # [delete_file]). If the asynchronous backend still has the file
! 72: # open, it will become confused.
! 73: #
! 74: flush_async_queue
! 75: }
! 76:
! 77: # Flush the write-queue and disable asynchronous IO. This should ensure
! 78: # all allocated memory is cleaned up.
! 79: set sqlite3async_trace 1
! 80: flush_async_queue
! 81: sqlite3async_shutdown
! 82: set sqlite3async_trace 0
! 83:
! 84: rename do_test {}
! 85: rename async_really_do_test do_test
! 86: rename finish_test {}
! 87: rename async_really_finish_test finish_test
! 88:
! 89: if {[info exists ASYNC_SAVE_ISQUICK]} { set G(isquick) $ASYNC_SAVE_ISQUICK }
! 90: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>