1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/pager2.test Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,411 @@
1.4 +# 2001 September 15
1.5 +#
1.6 +# The author disclaims copyright to this source code. In place of
1.7 +# a legal notice, here is a blessing:
1.8 +#
1.9 +# May you do good and not evil.
1.10 +# May you find forgiveness for yourself and forgive others.
1.11 +# May you share freely, never taking more than you give.
1.12 +#
1.13 +#***********************************************************************
1.14 +# This file implements regression tests for SQLite library. The
1.15 +# focus of this script is page cache subsystem.
1.16 +#
1.17 +# $Id: pager2.test,v 1.7 2008/08/20 14:49:25 danielk1977 Exp $
1.18 +
1.19 +
1.20 +set testdir [file dirname $argv0]
1.21 +source $testdir/tester.tcl
1.22 +
1.23 +# Don't run this test file if the pager test interface [pager_open] is not
1.24 +# available, or the library was compiled without in-memory database support.
1.25 +#
1.26 +if {[info commands pager_open]!=""} {
1.27 +ifcapable memorydb {
1.28 +db close
1.29 +
1.30 +# Basic sanity check. Open and close a pager.
1.31 +#
1.32 +do_test pager2-1.0 {
1.33 + set v [catch {
1.34 + set ::p1 [pager_open :memory: 10]
1.35 + } msg]
1.36 +} {0}
1.37 +do_test pager2-1.1 {
1.38 + pager_stats $::p1
1.39 +} {ref 0 page 0 max 10 size 0 state 0 err 0 hit 0 miss 0 ovfl 0}
1.40 +do_test pager2-1.2 {
1.41 + pager_pagecount $::p1
1.42 +} {0}
1.43 +do_test pager2-1.3 {
1.44 + pager_stats $::p1
1.45 +} {ref 0 page 0 max 10 size 0 state 0 err 0 hit 0 miss 0 ovfl 0}
1.46 +do_test pager2-1.4 {
1.47 + pager_close $::p1
1.48 +} {}
1.49 +
1.50 +# Try to write a few pages.
1.51 +#
1.52 +do_test pager2-2.1 {
1.53 + set v [catch {
1.54 + set ::p1 [pager_open :memory: 10]
1.55 + } msg]
1.56 +} {0}
1.57 +#do_test pager2-2.2 {
1.58 +# set v [catch {
1.59 +# set ::g1 [page_get $::p1 0]
1.60 +# } msg]
1.61 +# lappend v $msg
1.62 +#} {1 SQLITE_ERROR}
1.63 +do_test pager2-2.3.1 {
1.64 + set ::gx [page_lookup $::p1 1]
1.65 +} {}
1.66 +do_test pager2-2.3.2 {
1.67 + pager_stats $::p1
1.68 +} {ref 0 page 0 max 10 size 0 state 0 err 0 hit 0 miss 0 ovfl 0}
1.69 +do_test pager2-2.3.3 {
1.70 + set v [catch {
1.71 + set ::g1 [page_get $::p1 1]
1.72 + } msg]
1.73 + if {$v} {lappend v $msg}
1.74 + set v
1.75 +} {0}
1.76 +do_test pager2-2.3.3 {
1.77 + pager_stats $::p1
1.78 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
1.79 +do_test pager2-2.3.4 {
1.80 + set ::gx [page_lookup $::p1 1]
1.81 + page_unref $::gx
1.82 + expr {$::gx!=""}
1.83 +} {1}
1.84 +do_test pager2-2.3.5 {
1.85 + pager_stats $::p1
1.86 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
1.87 +do_test pager2-2.3.6 {
1.88 + expr {$::g1==$::gx}
1.89 +} {1}
1.90 +do_test pager2-2.3.7 {
1.91 + pager_stats $::p1
1.92 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
1.93 +do_test pager2-2.4 {
1.94 + pager_stats $::p1
1.95 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
1.96 +do_test pager2-2.5 {
1.97 + pager_pagecount $::p1
1.98 +} {0}
1.99 +do_test pager2-2.6 {
1.100 + pager_stats $::p1
1.101 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
1.102 +do_test pager2-2.7 {
1.103 + page_number $::g1
1.104 +} {1}
1.105 +do_test pager2-2.8 {
1.106 + page_read $::g1
1.107 +} {}
1.108 +do_test pager2-2.9 {
1.109 + page_unref $::g1
1.110 +} {}
1.111 +do_test pager2-2.10 {
1.112 + pager_stats $::p1
1.113 +} {ref 0 page 1 max 10 size 0 state 0 err 0 hit 0 miss 1 ovfl 0}
1.114 +do_test pager2-2.11 {
1.115 + set ::g1 [page_get $::p1 1]
1.116 + expr {$::g1!=0}
1.117 +} {1}
1.118 +do_test pager2-2.12 {
1.119 + page_number $::g1
1.120 +} {1}
1.121 +do_test pager2-2.13 {
1.122 + pager_stats $::p1
1.123 +} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 1 miss 1 ovfl 0}
1.124 +do_test pager2-2.14 {
1.125 + set v [catch {
1.126 + page_write $::g1 "Page-One"
1.127 + } msg]
1.128 + lappend v $msg
1.129 +} {0 {}}
1.130 +do_test pager2-2.15 {
1.131 + pager_stats $::p1
1.132 +} {ref 1 page 1 max 10 size 1 state 4 err 0 hit 1 miss 1 ovfl 0}
1.133 +do_test pager2-2.16 {
1.134 + page_read $::g1
1.135 +} {Page-One}
1.136 +do_test pager2-2.17 {
1.137 + set v [catch {
1.138 + pager_commit $::p1
1.139 + } msg]
1.140 + lappend v $msg
1.141 +} {0 {}}
1.142 +do_test pager2-2.20 {
1.143 + pager_stats $::p1
1.144 +} {ref 1 page 1 max 10 size 1 state 1 err 0 hit 1 miss 1 ovfl 0}
1.145 +do_test pager2-2.19 {
1.146 + pager_pagecount $::p1
1.147 +} {1}
1.148 +do_test pager2-2.21 {
1.149 + pager_stats $::p1
1.150 +} {ref 1 page 1 max 10 size 1 state 1 err 0 hit 1 miss 1 ovfl 0}
1.151 +do_test pager2-2.22 {
1.152 + page_unref $::g1
1.153 +} {}
1.154 +do_test pager2-2.23 {
1.155 + pager_stats $::p1
1.156 +} {ref 0 page 1 max 10 size 1 state 0 err 0 hit 1 miss 1 ovfl 0}
1.157 +do_test pager2-2.24 {
1.158 + set v [catch {
1.159 + page_get $::p1 1
1.160 + } ::g1]
1.161 + if {$v} {lappend v $::g1}
1.162 + set v
1.163 +} {0}
1.164 +do_test pager2-2.25 {
1.165 + page_read $::g1
1.166 +} {Page-One}
1.167 +do_test pager2-2.26 {
1.168 + set v [catch {
1.169 + page_write $::g1 {page-one}
1.170 + } msg]
1.171 + lappend v $msg
1.172 +} {0 {}}
1.173 +do_test pager2-2.27 {
1.174 + page_read $::g1
1.175 +} {page-one}
1.176 +do_test pager2-2.28 {
1.177 + set v [catch {
1.178 + pager_rollback $::p1
1.179 + } msg]
1.180 + lappend v $msg
1.181 +} {0 {}}
1.182 +do_test pager2-2.29 {
1.183 + page_unref $::g1
1.184 + set ::g1 [page_get $::p1 1]
1.185 + page_read $::g1
1.186 +} {Page-One}
1.187 +do_test pager2-2.99 {
1.188 + page_unref $::g1
1.189 +} {}
1.190 +
1.191 +#do_test pager2-3.1 {
1.192 +# set v [catch {
1.193 +# set ::p1 [pager_open :memory: 15]
1.194 +# } msg]
1.195 +# if {$v} {lappend v $msg}
1.196 +# set v
1.197 +#} {0}
1.198 +do_test pager2-3.2 {
1.199 + pager_pagecount $::p1
1.200 +} {1}
1.201 +do_test pager2-3.3 {
1.202 + set v [catch {
1.203 + set ::g(1) [page_get $::p1 1]
1.204 + } msg]
1.205 + if {$v} {lappend v $msg}
1.206 + set v
1.207 +} {0}
1.208 +do_test pager2-3.4 {
1.209 + page_read $::g(1)
1.210 +} {Page-One}
1.211 +do_test pager2-3.5 {
1.212 + for {set i 2} {$i<=20} {incr i} {
1.213 + set gx [page_get $::p1 $i]
1.214 + page_write $gx "Page-$i"
1.215 + page_unref $gx
1.216 + }
1.217 + pager_commit $::p1
1.218 + page_unref $::g(1)
1.219 +} {}
1.220 +for {set i 2} {$i<=20} {incr i} {
1.221 + do_test pager2-3.6.[expr {$i-1}] [subst {
1.222 + set gx \[page_get $::p1 $i\]
1.223 + set v \[page_read \$gx\]
1.224 + page_unref \$gx
1.225 + set v
1.226 + }] "Page-$i"
1.227 +}
1.228 +for {set i 1} {$i<=20} {incr i} {
1.229 + regsub -all CNT {
1.230 + set ::g1 [page_get $::p1 CNT]
1.231 + set ::g2 [page_get $::p1 CNT]
1.232 + set ::vx [page_read $::g2]
1.233 + expr {$::g1==$::g2}
1.234 + } $i body;
1.235 + do_test pager2-3.7.$i.1 $body {1}
1.236 + regsub -all CNT {
1.237 + page_unref $::g2
1.238 + set vy [page_read $::g1]
1.239 + expr {$vy==$::vx}
1.240 + } $i body;
1.241 + do_test pager2-3.7.$i.2 $body {1}
1.242 + regsub -all CNT {
1.243 + page_unref $::g1
1.244 + set gx [page_get $::p1 CNT]
1.245 + set vy [page_read $gx]
1.246 + page_unref $gx
1.247 + expr {$vy==$::vx}
1.248 + } $i body;
1.249 + do_test pager2-3.7.$i.3 $body {1}
1.250 +}
1.251 +do_test pager2-3.99 {
1.252 + pager_close $::p1
1.253 +} {}
1.254 +
1.255 +# tests of the checkpoint mechanism and api
1.256 +#
1.257 +do_test pager2-4.0 {
1.258 + set v [catch {
1.259 + set ::p1 [pager_open :memory: 15]
1.260 + } msg]
1.261 + if {$v} {lappend v $msg}
1.262 + set v
1.263 +} {0}
1.264 +do_test pager2-4.1 {
1.265 + set g1 [page_get $::p1 1]
1.266 + page_write $g1 "Page-1 v0"
1.267 + for {set i 2} {$i<=20} {incr i} {
1.268 + set gx [page_get $::p1 $i]
1.269 + page_write $gx "Page-$i v0"
1.270 + page_unref $gx
1.271 + }
1.272 + pager_commit $::p1
1.273 +} {}
1.274 +for {set i 1} {$i<=20} {incr i} {
1.275 + do_test pager2-4.2.$i {
1.276 + set gx [page_get $p1 $i]
1.277 + set v [page_read $gx]
1.278 + page_unref $gx
1.279 + set v
1.280 + } "Page-$i v0"
1.281 +}
1.282 +do_test pager2-4.3 {
1.283 + lrange [pager_stats $::p1] 0 1
1.284 +} {ref 1}
1.285 +do_test pager2-4.4 {
1.286 + lrange [pager_stats $::p1] 8 9
1.287 +} {state 1}
1.288 +
1.289 +for {set i 1} {$i<20} {incr i} {
1.290 + do_test pager2-4.5.$i.0 {
1.291 + set res {}
1.292 + for {set j 2} {$j<=20} {incr j} {
1.293 + set gx [page_get $p1 $j]
1.294 + set value [page_read $gx]
1.295 + page_unref $gx
1.296 + set shouldbe "Page-$j v[expr {$i-1}]"
1.297 + if {$value!=$shouldbe} {
1.298 + lappend res $value $shouldbe
1.299 + }
1.300 + }
1.301 + set res
1.302 + } {}
1.303 + do_test pager2-4.5.$i.1 {
1.304 + page_write $g1 "Page-1 v$i"
1.305 + lrange [pager_stats $p1] 8 9
1.306 + } {state 4}
1.307 + do_test pager2-4.5.$i.2 {
1.308 + for {set j 2} {$j<=20} {incr j} {
1.309 + set gx [page_get $p1 $j]
1.310 + page_write $gx "Page-$j v$i"
1.311 + page_unref $gx
1.312 + if {$j==$i} {
1.313 + pager_stmt_begin $p1
1.314 + }
1.315 + }
1.316 + } {}
1.317 + do_test pager2-4.5.$i.3 {
1.318 + set res {}
1.319 + for {set j 2} {$j<=20} {incr j} {
1.320 + set gx [page_get $p1 $j]
1.321 + set value [page_read $gx]
1.322 + page_unref $gx
1.323 + set shouldbe "Page-$j v$i"
1.324 + if {$value!=$shouldbe} {
1.325 + lappend res $value $shouldbe
1.326 + }
1.327 + }
1.328 + set res
1.329 + } {}
1.330 + do_test pager2-4.5.$i.4 {
1.331 + pager_rollback $p1
1.332 + set res {}
1.333 + for {set j 2} {$j<=20} {incr j} {
1.334 + set gx [page_get $p1 $j]
1.335 + set value [page_read $gx]
1.336 + page_unref $gx
1.337 + set shouldbe "Page-$j v[expr {$i-1}]"
1.338 + if {$value!=$shouldbe} {
1.339 + lappend res $value $shouldbe
1.340 + }
1.341 + }
1.342 + set res
1.343 + } {}
1.344 +breakpoint
1.345 + do_test pager2-4.5.$i.5 {
1.346 + page_write $g1 "Page-1 v$i"
1.347 + lrange [pager_stats $p1] 8 9
1.348 + } {state 4}
1.349 + do_test pager2-4.5.$i.6 {
1.350 + for {set j 2} {$j<=20} {incr j} {
1.351 + set gx [page_get $p1 $j]
1.352 + page_write $gx "Page-$j v$i"
1.353 + page_unref $gx
1.354 + if {$j==$i} {
1.355 + pager_stmt_begin $p1
1.356 + }
1.357 + }
1.358 + } {}
1.359 + do_test pager2-4.5.$i.7 {
1.360 + pager_stmt_rollback $p1
1.361 + for {set j 2} {$j<=20} {incr j} {
1.362 + set gx [page_get $p1 $j]
1.363 + set value [page_read $gx]
1.364 + page_unref $gx
1.365 + if {$j<=$i || $i==1} {
1.366 + set shouldbe "Page-$j v$i"
1.367 + } else {
1.368 + set shouldbe "Page-$j v[expr {$i-1}]"
1.369 + }
1.370 + if {$value!=$shouldbe} {
1.371 + lappend res $value $shouldbe
1.372 + }
1.373 + }
1.374 + set res
1.375 + } {}
1.376 + do_test pager2-4.5.$i.8 {
1.377 + for {set j 2} {$j<=20} {incr j} {
1.378 + set gx [page_get $p1 $j]
1.379 + page_write $gx "Page-$j v$i"
1.380 + page_unref $gx
1.381 + if {$j==$i} {
1.382 + pager_stmt_begin $p1
1.383 + }
1.384 + }
1.385 + } {}
1.386 + do_test pager2-4.5.$i.9 {
1.387 + pager_stmt_commit $p1
1.388 + for {set j 2} {$j<=20} {incr j} {
1.389 + set gx [page_get $p1 $j]
1.390 + set value [page_read $gx]
1.391 + page_unref $gx
1.392 + set shouldbe "Page-$j v$i"
1.393 + if {$value!=$shouldbe} {
1.394 + lappend res $value $shouldbe
1.395 + }
1.396 + }
1.397 + set res
1.398 + } {}
1.399 + do_test pager2-4.5.$i.10 {
1.400 + pager_commit $p1
1.401 + lrange [pager_stats $p1] 8 9
1.402 + } {state 1}
1.403 +}
1.404 +
1.405 +do_test pager2-4.99 {
1.406 + page_unref $::g1
1.407 + pager_close $::p1
1.408 +} {}
1.409 +
1.410 +} ;# ifcapable inmemory
1.411 +} ;# end if( has pager_open command );
1.412 +
1.413 +
1.414 +finish_test