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

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: rsrc001.tcl,v 11.18 2001/01/18 06:41:03 krinsky Exp $
  7. #
  8. # Recno backing file test.
  9. # Try different patterns of adding records and making sure that the
  10. # corresponding file matches
  11. proc rsrc001 { } {
  12. source ./include.tcl
  13. puts "Rsrc001: Basic recno backing file writeback tests"
  14. # We run this test essentially twice, once with a db file
  15. # and once without (an in-memory database).
  16. set rec1 "This is record 1"
  17. set rec2 "This is record 2 This is record 2"
  18. set rec3 "This is record 3 This is record 3 This is record 3"
  19. set rec4 [replicate "This is record 4 " 512]
  20. foreach testfile { "$testdir/rsrc001.db" "" } {
  21. cleanup $testdir NULL
  22. if { $testfile == "" } {
  23. puts "Rsrc001: Testing with in-memory database."
  24. } else {
  25. puts "Rsrc001: Testing with disk-backed database."
  26. }
  27. # Create backing file for the empty-file test.
  28. set oid1 [open $testdir/rsrc.txt w]
  29. close $oid1
  30. puts "tRsrc001.a: Put to empty file."
  31. set db [eval {berkdb_open -create -mode 0644
  32.     -recno -source $testdir/rsrc.txt} $testfile]
  33. error_check_good dbopen [is_valid_db $db] TRUE
  34. set txn ""
  35. set ret [eval {$db put} $txn {1 $rec1}]
  36. error_check_good put_to_empty $ret 0
  37. error_check_good db_close [$db close] 0
  38. # Now fill out the backing file and create the check file.
  39. set oid1 [open $testdir/rsrc.txt a]
  40. set oid2 [open $testdir/check.txt w]
  41.     
  42. # This one was already put into rsrc.txt.
  43. puts $oid2 $rec1
  44. # These weren't.
  45. puts $oid1 $rec2
  46. puts $oid2 $rec2
  47. puts $oid1 $rec3
  48. puts $oid2 $rec3
  49. puts $oid1 $rec4
  50. puts $oid2 $rec4
  51. close $oid1
  52. close $oid2
  53. puts -nonewline "tRsrc001.b: Read file, rewrite last record;"
  54. puts " write it out and diff"
  55. set db [eval {berkdb_open -create -mode 0644
  56.     -recno -source $testdir/rsrc.txt} $testfile]
  57. error_check_good dbopen [is_valid_db $db] TRUE
  58. # Read the last record; replace it (but we won't change it).
  59. # Then close the file and diff the two files.
  60. set dbc [eval {$db cursor} $txn]
  61. error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
  62. set rec [$dbc get -last]
  63. error_check_good get_last [llength [lindex $rec 0]] 2
  64. set key [lindex [lindex $rec 0] 0]
  65. set data [lindex [lindex $rec 0] 1]
  66. # Get the last record from the text file
  67. set oid [open $testdir/rsrc.txt]
  68. set laststr ""
  69. while { [gets $oid str] != -1 } {
  70. set laststr $str
  71. }
  72. close $oid
  73. set data [sanitize_record $data]
  74. error_check_good getlast $data $laststr
  75. set ret [eval {$db put} $txn {$key $data}]
  76. error_check_good replace_last $ret 0
  77. error_check_good curs_close [$dbc close] 0
  78. error_check_good db_sync [$db sync] 0
  79. error_check_good db_sync [$db sync] 0
  80. error_check_good 
  81.     Rsrc001:diff($testdir/rsrc.txt,$testdir/check.txt) 
  82.     [filecmp $testdir/rsrc.txt $testdir/check.txt] 0
  83. puts -nonewline "tRsrc001.c: "
  84. puts "Append some records in tree and verify in file."
  85. set oid [open $testdir/check.txt a]
  86. for {set i 1} {$i < 10} {incr i} {
  87. set rec [replicate "New Record $i" $i]
  88. puts $oid $rec
  89. incr key
  90. set ret [eval {$db put} $txn {-append $rec}]
  91. error_check_good put_append $ret $key
  92. }
  93. error_check_good db_sync [$db sync] 0
  94. error_check_good db_sync [$db sync] 0
  95. close $oid
  96. set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
  97. error_check_good 
  98.     Rsrc001:diff($testdir/{rsrc.txt,check.txt}) $ret 0
  99. puts "tRsrc001.d: Append by record number"
  100. set oid [open $testdir/check.txt a]
  101. for {set i 1} {$i < 10} {incr i} {
  102. set rec [replicate "New Record (set 2) $i" $i]
  103. puts $oid $rec
  104. incr key
  105. set ret [eval {$db put} $txn {$key $rec}]
  106. error_check_good put_byno $ret 0
  107. }
  108. error_check_good db_sync [$db sync] 0
  109. error_check_good db_sync [$db sync] 0
  110. close $oid
  111. set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
  112. error_check_good 
  113.     Rsrc001:diff($testdir/{rsrc.txt,check.txt}) $ret 0
  114. puts "tRsrc001.e: Put beyond end of file."
  115. set oid [open $testdir/check.txt a]
  116. for {set i 1} {$i < 10} {incr i} {
  117. puts $oid ""
  118. incr key
  119. }
  120. set rec "Last Record"
  121. puts $oid $rec
  122. incr key
  123. set ret [eval {$db put} $txn {$key $rec}]
  124. error_check_good put_byno $ret 0
  125. puts "tRsrc001.f: Put beyond end of file, after reopen."
  126. error_check_good db_close [$db close] 0
  127. set db [eval {berkdb_open -create -mode 0644
  128.     -recno -source $testdir/rsrc.txt} $testfile]
  129. error_check_good dbopen [is_valid_db $db] TRUE
  130. set rec "Last record with reopen"
  131. puts $oid $rec
  132. incr key 
  133. set ret [eval {$db put} $txn {$key $rec}]
  134. error_check_good put_byno_with_reopen $ret 0
  135. puts "tRsrc001.g:
  136.     Put several beyond end of file, after reopen."
  137. error_check_good db_close [$db close] 0
  138. set db [eval {berkdb_open -create -mode 0644
  139.     -recno -source $testdir/rsrc.txt} $testfile]
  140. error_check_good dbopen [is_valid_db $db] TRUE
  141. set rec "Really really last record with reopen"
  142. puts $oid ""
  143. puts $oid ""
  144. puts $oid ""
  145. puts $oid $rec
  146. incr key 
  147. incr key
  148. incr key
  149. incr key
  150. set ret [eval {$db put} $txn {$key $rec}]
  151. error_check_good put_byno_with_reopen $ret 0
  152. error_check_good db_sync [$db sync] 0
  153. error_check_good db_sync [$db sync] 0
  154. close $oid
  155. set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
  156. error_check_good 
  157.     Rsrc001:diff($testdir/{rsrc.txt,check.txt}) $ret 0
  158. puts "tRsrc001.h: Verify proper syncing of changes on close."
  159. error_check_good Rsrc001:db_close [$db close] 0
  160. set db [eval {berkdb_open -create -mode 0644 -recno 
  161.     -source $testdir/rsrc.txt} $testfile]
  162. set oid [open $testdir/check.txt a]
  163. for {set i 1} {$i < 10} {incr i} {
  164. set rec [replicate "New Record $i" $i]
  165. puts $oid $rec
  166. set ret [eval {$db put} $txn {-append $rec}]
  167. # Don't bother checking return;  we don't know what
  168. # the key number is, and we'll pick up a failure
  169. # when we compare.
  170. }
  171. error_check_good Rsrc001:db_close [$db close] 0
  172. close $oid
  173. set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
  174. error_check_good Rsrc001:diff($testdir/{rsrc,check}.txt) $ret 0
  175. }
  176. }
  177. # Strip CRs from a record.
  178. # Needed on Windows when a file is created as text (with CR/LF)
  179. # but read as binary (where CR is read as a separate character)
  180. proc sanitize_record { rec } {
  181. source ./include.tcl
  182. if { $is_windows_test != 1 } {
  183. return $rec
  184. }
  185. regsub -all 15 $rec "" data
  186. return $data
  187. }