xref: /sqlite-3.40.0/test/securedel2.test (revision 5822d6fe)
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