libdb/test/tcl/memp004.tcl
2012-11-14 15:13:24 -05:00

82 lines
2.1 KiB
Tcl

# See the file LICENSE for redistribution information.
#
# Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved.
#
# $Id$
#
# TEST memp004
# TEST Test that small read-only databases are mapped into memory.
proc memp004 { } {
global is_qnx_test
source ./include.tcl
puts "Memp004: Test of memory-mapped read-only databases"
if { $is_qnx_test } {
puts "Memp004: skipping for QNX"
return
}
env_cleanup $testdir
set testfile memp004.db
# Create an environment.
puts "memp004.a: Create an environment and database"
set dbenv [eval {berkdb_env -create -home $testdir -private}]
error_check_good dbenv [is_valid_env $dbenv] TRUE
set db [berkdb_open -env $dbenv -create -mode 0644 -btree $testfile]
error_check_good dbopen/$testfile/RW [is_valid_db $db] TRUE
# Put each key/data pair.
set did [open $dict]
set keys ""
set count 0
while { [gets $did str] != -1 && $count < 1000 } {
lappend keys $str
set ret [eval {$db put} {$str $str}]
error_check_good put $ret 0
incr count
}
close $did
error_check_good close [$db close] 0
# Discard the environment.
error_check_good close [$dbenv close] 0
puts "memp004.b: Re-create the environment and open database read-only"
set dbenv [eval {berkdb_env -create -home $testdir}]
error_check_good dbenv [is_valid_env $dbenv] TRUE
set db [berkdb_open -env $dbenv -rdonly $testfile]
error_check_good dbopen/$testfile/RO [is_substr $db db] 1
# Read a couple of keys.
set c [eval {$db cursor}]
for { set i 0 } { $i < 500 } { incr i } {
set ret [$c get -next]
}
puts "memp004.c: Check mpool statistics"
set tmp [memp004_stat $dbenv "Pages mapped into address space"]
error_check_good "mmap check: $tmp >= 500" [expr $tmp >= 500] 1
error_check_good db_close [$db close] 0
reset_env $dbenv
}
# memp004_stat --
# Return the current mpool statistics.
proc memp004_stat { env s } {
set stat [$env mpool_stat]
foreach statpair $stat {
set statmsg [lindex $statpair 0]
set statval [lindex $statpair 1]
if {[is_substr $statmsg $s] != 0} {
return $statval
}
}
puts "FAIL: memp004: stat string $s not found"
return 0
}