test061.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: test061.tcl,v 11.12 2000/10/27 13:23:56 sue Exp $
  7. #
  8. # Test061: Test of transaction abort and commit for in-memory databases.
  9. # a) Put + abort: verify absence of data
  10. # b) Put + commit: verify presence of data
  11. # c) Overwrite + abort: verify that data is unchanged
  12. # d) Overwrite + commit: verify that data has changed
  13. # e) Delete + abort: verify that data is still present
  14. # f) Delete + commit: verify that data has been deleted
  15. proc test061 { method args } {
  16. global alphabet
  17. global errorCode
  18. source ./include.tcl
  19. #
  20. # If we are using an env, then skip this test.  It needs its own.
  21. set eindex [lsearch -exact $args "-env"]
  22. if { $eindex != -1 } {
  23. incr eindex
  24. set env [lindex $args $eindex]
  25. puts "Test061 skipping for env $env"
  26. return
  27. }
  28. set args [convert_args $method $args]
  29. set omethod [convert_method $method]
  30. if { [is_queueext $method] == 1} {
  31. puts "Test061 skipping for method $method"
  32. return
  33. }
  34. puts "Test061: Transaction abort and commit test for in-memory data."
  35. puts "Test061: $method $args"
  36. set key "key"
  37. set data "data"
  38. set otherdata "otherdata"
  39. set txn ""
  40. set flags ""
  41. set gflags ""
  42. if { [is_record_based $method] == 1} {
  43. set key 1
  44. set gflags " -recno"
  45. }
  46. puts "tTest061: Create environment and $method database."
  47. env_cleanup $testdir
  48. # create environment
  49. set eflags "-create -txn -home $testdir"
  50. set dbenv [eval {berkdb env} $eflags]
  51. error_check_good dbenv [is_valid_env $dbenv] TRUE
  52. # db open -- no file specified, in-memory database
  53. set flags "-create $args $omethod"
  54. set db [eval {berkdb_open -env} $dbenv $flags]
  55. error_check_good dbopen [is_valid_db $db] TRUE
  56. # Here we go with the six test cases.  Since we need to verify
  57. # a different thing each time, and since we can't just reuse
  58. # the same data if we're to test overwrite, we just
  59. # plow through rather than writing some impenetrable loop code;
  60. # each of the cases is only a few lines long, anyway.
  61. puts "tTest061.a: put/abort"
  62. # txn_begin
  63. set txn [$dbenv txn]
  64. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  65. # put a key
  66. set ret [eval {$db put} -txn $txn {$key [chop_data $method $data]}]
  67. error_check_good db_put $ret 0
  68. # check for existence
  69. set ret [eval {$db get} -txn $txn $gflags {$key}]
  70. error_check_good get $ret [list [list $key [pad_data $method $data]]]
  71. # abort
  72. error_check_good txn_abort [$txn abort] 0
  73. # check for *non*-existence
  74. set ret [eval {$db get} $gflags {$key}]
  75. error_check_good get $ret {}
  76. puts "tTest061.b: put/commit"
  77. # txn_begin
  78. set txn [$dbenv txn]
  79. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  80. # put a key
  81. set ret [eval {$db put} -txn $txn {$key [chop_data $method $data]}]
  82. error_check_good db_put $ret 0
  83. # check for existence
  84. set ret [eval {$db get} -txn $txn $gflags {$key}]
  85. error_check_good get $ret [list [list $key [pad_data $method $data]]]
  86. # commit
  87. error_check_good txn_commit [$txn commit] 0
  88. # check again for existence
  89. set ret [eval {$db get} $gflags {$key}]
  90. error_check_good get $ret [list [list $key [pad_data $method $data]]]
  91. puts "tTest061.c: overwrite/abort"
  92. # txn_begin
  93. set txn [$dbenv txn]
  94. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  95. # overwrite {key,data} with {key,otherdata}
  96. set ret [eval {$db put} -txn $txn {$key [chop_data $method $otherdata]}]
  97. error_check_good db_put $ret 0
  98. # check for existence
  99. set ret [eval {$db get} -txn $txn $gflags {$key}]
  100. error_check_good get $ret 
  101.     [list [list $key [pad_data $method $otherdata]]]
  102. # abort
  103. error_check_good txn_abort [$txn abort] 0
  104. # check that data is unchanged ($data not $otherdata)
  105. set ret [eval {$db get} $gflags {$key}]
  106. error_check_good get $ret [list [list $key [pad_data $method $data]]]
  107. puts "tTest061.d: overwrite/commit"
  108. # txn_begin
  109. set txn [$dbenv txn]
  110. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  111. # overwrite {key,data} with {key,otherdata}
  112. set ret [eval {$db put} -txn $txn {$key [chop_data $method $otherdata]}]
  113. error_check_good db_put $ret 0
  114. # check for existence
  115. set ret [eval {$db get} -txn $txn $gflags {$key}]
  116. error_check_good get $ret 
  117.     [list [list $key [pad_data $method $otherdata]]]
  118. # commit
  119. error_check_good txn_commit [$txn commit] 0
  120. # check that data has changed ($otherdata not $data)
  121. set ret [eval {$db get} $gflags {$key}]
  122. error_check_good get $ret 
  123.     [list [list $key [pad_data $method $otherdata]]]
  124. puts "tTest061.e: delete/abort"
  125. # txn_begin
  126. set txn [$dbenv txn]
  127. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  128. # delete
  129. set ret [eval {$db del} -txn $txn {$key}]
  130. error_check_good db_put $ret 0
  131. # check for nonexistence
  132. set ret [eval {$db get} -txn $txn $gflags {$key}]
  133. error_check_good get $ret {}
  134. # abort
  135. error_check_good txn_abort [$txn abort] 0
  136. # check for existence
  137. set ret [eval {$db get} $gflags {$key}]
  138. error_check_good get $ret 
  139.     [list [list $key [pad_data $method $otherdata]]]
  140. puts "tTest061.f: delete/commit"
  141. # txn_begin
  142. set txn [$dbenv txn]
  143. error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
  144. # put a key
  145. set ret [eval {$db del} -txn $txn {$key}]
  146. error_check_good db_put $ret 0
  147. # check for nonexistence
  148. set ret [eval {$db get} -txn $txn $gflags {$key}]
  149. error_check_good get $ret {}
  150. # commit
  151. error_check_good txn_commit [$txn commit] 0
  152. # check for continued nonexistence
  153. set ret [eval {$db get} $gflags {$key}]
  154. error_check_good get $ret {}
  155. # We're done; clean up.
  156. error_check_good db_close [eval {$db close}] 0
  157. error_check_good env_close [eval {$dbenv close}] 0
  158. # Now run db_recover and ensure that it runs cleanly.
  159. puts "tTest061.g: Running db_recover -h"
  160. set ret [catch {exec $util_path/db_recover -h $testdir} res]
  161. if { $ret != 0 } {
  162. puts "FAIL: db_recover outputted $res"
  163. }
  164. error_check_good db_recover $ret 0
  165. puts "tTest061.h: Running db_recover -c -h"
  166. set ret [catch {exec $util_path/db_recover -c -h $testdir} res]
  167. error_check_good db_recover-c $ret 0
  168. }