------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Make\ssure\sthe\swal-index\smapping\sis\salways\slarge\senough\sto\scover\sthe\sentire\nactive\sarea\sof\sthe\swal-index.
-D 2010-05-26T17:31:59
+C Add\sa\stest\sto\swalcksum.test\sto\sstress\sthe\schecksum\scalculation.
+D 2010-05-28T04:16:28
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F test/wal.test be8ef043253ca735ffcabb92a7dac2d79ebfe8c1
F test/wal2.test a10f52b403117c2b9a1f7a11db527c53bb684a25
F test/walbak.test e7650a26eb4b8abeca9b145b1af1e63026dde432
-F test/walcksum.test a0712107b6a73397fc7e3f92d5b16e206caa7d3d
+F test/walcksum.test a710d2c5c3f4e786d37d099790d8df8c47e270a3
F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f
F test/walcrash2.test 14585ad1a2c85da2de721caa3b4deeea55213008
F test/walfault.test f71d4c9a13d4e27086aef55f1e0e94734ffa2f6a
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 72de00731245277b2209103ec0a76e3d4f56530e
-R 3803eb711e1482685c888c1d5aad25b9
-U drh
-Z fbf41cb9ad1e3a86d51249de0c4212ff
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFL/VsSoxKgR168RlERAiiyAKCNIB2cx0oWfiSWhB7rYPl7wJQPNwCffewd
-BG/+93y24TpcUQJKKPuyhOs=
-=WCDR
------END PGP SIGNATURE-----
+P 42705babba0e9d2ef078845854bebbd168f23366
+R 9d2a3bc8fc2778c92116dc9b4d28847f
+U dan
+Z 0d53d36af3414df9e04c32dec264ddf0
catch { db2 close }
}
+#-------------------------------------------------------------------------
+# Test case walcksum-2.* tests that if a statement transaction is rolled
+# back after frames are written to the WAL, and then (after writing some
+# more) the outer transaction is committed, the WAL file is still correctly
+# formatted (and can be recovered by a second process if required).
+#
do_test walcksum-2.1 {
file delete -force test.db test.db-wal test.db-journal
sqlite3 db test.db
catch { db close }
catch { db2 close }
+#-------------------------------------------------------------------------
+# Test case walcksum-3.* tests that the checksum calculation detects single
+# byte changes to frame or frame-header data and considers the frame
+# invalid as a result.
+#
+do_test walcksum-3.1 {
+ file delete -force test.db test.db-wal test.db-journal
+ sqlite3 db test.db
+
+ execsql {
+ PRAGMA synchronous = NORMAL;
+ PRAGMA page_size = 1024;
+ CREATE TABLE t1(a, b);
+ INSERT INTO t1 VALUES(1, randomblob(300));
+ INSERT INTO t1 VALUES(2, randomblob(300));
+ PRAGMA journal_mode = WAL;
+ INSERT INTO t1 VALUES(3, randomblob(300));
+ }
+
+ file size test.db-wal
+} [log_file_size 1 1024]
+do_test walcksum-3.2 {
+ file copy -force test.db-wal test2.db-wal
+ file copy -force test.db test2.db
+ sqlite3 db2 test2.db
+ execsql { SELECT a FROM t1 } db2
+} {1 2 3}
+db2 close
+file copy -force test.db test2.db
+for {set incr 1} {$incr <= 255} {incr incr 21} {
+ do_test walcksum-3.3.$incr {
+ set FAIL 0
+ for {set iOff 0} {$iOff < [log_file_size 1 1024]} {incr iOff} {
+
+ file copy -force test.db-wal test2.db-wal
+ set fd [open test2.db-wal r+]
+ fconfigure $fd -encoding binary
+ fconfigure $fd -translation binary
+
+ seek $fd $iOff
+ binary scan [read $fd 1] c x
+ seek $fd $iOff
+ puts -nonewline $fd [binary format c [expr {$x+$incr}]]
+ close $fd
+
+ sqlite3 db2 test2.db
+ if { [execsql { SELECT a FROM t1 } db2] != "1 2" } {set FAIL 1}
+ db2 close
+ }
+ set FAIL
+ } {0}
+}
+
finish_test
+