Merge sqlite-release(3.43.1) into prerelease-integration
[sqlcipher.git] / test / sqlcipher.tcl
blob4129dca2ff14b7008ff368d238a26ab9e2fb6354
1 # codec.test developed by Stephen Lombardo (Zetetic LLC)
2 # sjlombardo at zetetic dot net
3 # http://zetetic.net
4 #
5 # Copyright (c) 2018, ZETETIC LLC
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are met:
8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution.
13 # * Neither the name of the ZETETIC LLC nor the
14 # names of its contributors may be used to endorse or promote products
15 # derived from this software without specific prior written permission.
17 # THIS SOFTWARE IS PROVIDED BY ZETETIC LLC ''AS IS'' AND ANY
18 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 # DISCLAIMED. IN NO EVENT SHALL ZETETIC LLC BE LIABLE FOR ANY
21 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 # This file implements regression tests for SQLite library. The
29 # focus of this script is testing code cipher features.
31 # NOTE: tester.tcl has overridden the definition of sqlite3 to
32 # automatically pass in a key value. Thus tests in this file
33 # should explicitly close and open db with sqlite_orig in order
34 # to bypass default key assignment.
37 file delete -force test.db
38 file delete -force test2.db
39 file delete -force test3.db
40 file delete -force test4.db
42 set testdir [file dirname $argv0]
43 set sampleDir [file normalize [file dirname [file dirname $argv0]]]
45 # If the library is not compiled with has_codec support then
46 # skip all tests in this file.
47 if {![sqlite_orig -has-codec]} {
48 finish_test
49 return
52 proc setup {file key} {
53 sqlite_orig db $file
54 execsql "PRAGMA key=$key;"
55 execsql {
56 CREATE table t1(a,b);
57 INSERT INTO t1 VALUES ('test1', 'test2');
58 } db
59 db close
62 proc get_cipher_provider {} {
63 sqlite_orig db test.db
64 return [execsql {
65 PRAGMA key = 'test';
66 PRAGMA cipher_provider;
67 }];
70 proc if_built_with_openssl {name cmd expected} {
71 if {[get_cipher_provider] == "openssl"} {
72 do_test $name $cmd $expected
76 proc if_built_with_libtomcrypt {name cmd expected} {
77 if {[get_cipher_provider] == "libtomcrypt"} {
78 do_test $name $cmd $expected
82 proc if_built_with_commoncrypto {name cmd expected} {
83 if {[get_cipher_provider] == "commoncrypto"} {
84 do_test $name $cmd $expected
88 proc if_built_with_nss {name cmd expected} {
89 if {[get_cipher_provider] == "nss"} {
90 do_test $name $cmd $expected
94 proc cmpFilesChunked {file1 file2 {chunksize 16384}} {
95 set f1 [open $file1]; fconfigure $f1 -translation binary
96 set f2 [open $file2]; fconfigure $f2 -translation binary
97 while {1} {
98 set d1 [read $f1 $chunksize]
99 set d2 [read $f2 $chunksize]
100 set diff [string compare $d1 $d2]
101 if {$diff != 0 || [eof $f1] || [eof $f2]} {
102 close $f1; close $f2
103 return $diff
106 return 0
109 proc trace_proc sql {
110 global TRACE_OUT
111 lappend TRACE_OUT [string trim $sql]