12aba5d96Sdan# 2012 August 7 22aba5d96Sdan# 32aba5d96Sdan# The author disclaims copyright to this source code. In place of 42aba5d96Sdan# a legal notice, here is a blessing: 52aba5d96Sdan# 62aba5d96Sdan# May you do good and not evil. 72aba5d96Sdan# May you find forgiveness for yourself and forgive others. 82aba5d96Sdan# May you share freely, never taking more than you give. 92aba5d96Sdan# 102aba5d96Sdan#************************************************************************* 112aba5d96Sdan# 122aba5d96Sdan# Tests for the secure_delete pragma. 132aba5d96Sdan# 142aba5d96Sdan 152aba5d96Sdanset testdir [file dirname $argv0] 162aba5d96Sdansource $testdir/tester.tcl 172aba5d96Sdanset ::testprefix securedel2 182aba5d96Sdan 192aba5d96Sdan# Generate 1000 pseudo-random 64-bit blobs. 202aba5d96Sdan# 212aba5d96Sdanfor {set i 1} {$i <= 1000} {incr i} { 222aba5d96Sdan set aBlob($i) [string range [db one {SELECT quote(randomblob(8))}] 2 end-1] 232aba5d96Sdan} 242aba5d96Sdan 252aba5d96Sdanproc detect_blob_prepare {zFile} { 262aba5d96Sdan set nByte [file size $zFile] 272aba5d96Sdan set ::detect_blob_data [hexio_read $zFile 0 $nByte] 282aba5d96Sdan} 292aba5d96Sdan 302aba5d96Sdanproc detect_blob {zFile iBlob} { 312aba5d96Sdan if {$zFile != ""} { detect_blob_prepare $zFile } 322aba5d96Sdan string match "*$::aBlob($iBlob)*" $::detect_blob_data 332aba5d96Sdan} 342aba5d96Sdan 352aba5d96Sdando_test 1.1 { 362aba5d96Sdan execsql { PRAGMA secure_delete = 1 } 37*acf239b5Sdan execsql { PRAGMA auto_vacuum = 0 } 382aba5d96Sdan execsql { CREATE TABLE t1(x, y) } 392aba5d96Sdan for {set i 1} {$i <= 1000} {incr i} { 402aba5d96Sdan set x "X'[string repeat $aBlob($i) 1]'" 412aba5d96Sdan set y "X'[string repeat $aBlob($i) 500]'" 422aba5d96Sdan execsql "INSERT INTO t1 VALUES($x, $y)" 432aba5d96Sdan } 442aba5d96Sdan} {} 452aba5d96Sdan 462aba5d96Sdando_test 1.2 { detect_blob test.db 1 } {1} 472aba5d96Sdan 482aba5d96Sdanforcecopy test.db test.db.bak 492aba5d96Sdando_execsql_test 1.3.1 { PRAGMA secure_delete = 0 } {0} 502aba5d96Sdando_execsql_test 1.3.2 { DELETE FROM t1 WHERE rowid = 1 } 512aba5d96Sdando_test 1.3.3 { detect_blob test.db 1 } {1} 522aba5d96Sdan 532aba5d96Sdandb close 542aba5d96Sdanforcecopy test.db.bak test.db 552aba5d96Sdansqlite3 db test.db 562aba5d96Sdando_execsql_test 1.4.1 { PRAGMA secure_delete = 1 } {1} 572aba5d96Sdando_execsql_test 1.4.2 { DELETE FROM t1 WHERE rowid = 1 } 582aba5d96Sdando_test 1.4.3 { detect_blob test.db 1 } {0} 592aba5d96Sdan 602aba5d96Sdando_execsql_test 1.5.1 { DELETE FROM t1 WHERE rowid>850 } {} 612aba5d96Sdando_test 1.5.2 { 622aba5d96Sdan set n 0 632aba5d96Sdan detect_blob_prepare test.db 642aba5d96Sdan for {set i 851} {$i <= 1000} {incr i 5} { 652aba5d96Sdan incr n [detect_blob {} $i] 662aba5d96Sdan } 672aba5d96Sdan set n 682aba5d96Sdan} {0} 692aba5d96Sdan 702aba5d96Sdandb close 712aba5d96Sdansqlite3 db test.db 722aba5d96Sdando_test 1.6.1 { 732aba5d96Sdan execsql { 742aba5d96Sdan PRAGMA cache_size = 200; 752aba5d96Sdan PRAGMA secure_delete = 1; 762aba5d96Sdan CREATE TABLE t2(x); 772aba5d96Sdan SELECT * FROM t1; 782aba5d96Sdan } 792aba5d96Sdan for {set i 100} {$i < 5000} {incr i} { 802aba5d96Sdan execsql { INSERT INTO t2 VALUES(randomblob($i)) } 812aba5d96Sdan } 822aba5d96Sdan execsql { DELETE FROM t1 } 832aba5d96Sdan} {} 842aba5d96Sdan 852aba5d96Sdando_test 1.6.2 { 862aba5d96Sdan set n 0 872aba5d96Sdan detect_blob_prepare test.db 882aba5d96Sdan for {set i 2} {$i <= 850} {incr i 5} { 892aba5d96Sdan incr n [detect_blob {} $i] 902aba5d96Sdan } 912aba5d96Sdan set n 922aba5d96Sdan} {0} 932aba5d96Sdan 942aba5d96Sdanfinish_test 95