blob: 158370695e43aa8b0102720f4e193d768ff8a678 [file] [log] [blame]
dan2f7260d2018-01-30 17:43:22 +00001# 2018 January 30
2#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
6# May you do good and not evil.
7# May you find forgiveness for yourself and forgive others.
8# May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15source $testdir/malloc_common.tcl
16set testprefix zipfilefault
17
18ifcapable !vtab {
19 finish_test; return
20}
21if {[catch {load_static_extension db zipfile} error]} {
22 puts "Skipping zipfile2 tests, hit load error: $error"
23 finish_test; return
24}
25
26faultsim_save_and_close
27do_faultsim_test 1 -prep {
28 faultsim_restore_and_reopen
29 load_static_extension db zipfile
30 execsql { DROP TABLE IF EXISTS aaa }
31} -body {
32 execsql { CREATE VIRTUAL TABLE aaa USING zipfile('test.zip') }
33} -test {
34 faultsim_test_result {0 {}}
35}
36
37forcedelete test.zip
38sqlite3 db test.db
39load_static_extension db zipfile
40do_execsql_test 2.0 {
41 CREATE VIRTUAL TABLE setup USING zipfile('test.zip');
42 INSERT INTO setup(name, data) VALUES('a.txt', '1234567890');
43}
44
dan15daa6b2018-02-01 19:41:23 +000045do_faultsim_test 2.1 -faults oom* -body {
dan2f7260d2018-01-30 17:43:22 +000046 execsql { SELECT name,data FROM zipfile('test.zip') }
47} -test {
48 faultsim_test_result {0 {a.txt 1234567890}}
49}
dan15daa6b2018-02-01 19:41:23 +000050do_faultsim_test 2.2 -faults oom* -body {
51 execsql {
52 SELECT json_extract( zipfile_cds(z), '$.version-made-by' )
53 FROM zipfile('test.zip')
54 }
55} -test {
56 faultsim_test_result {0 798}
57}
dan2f7260d2018-01-30 17:43:22 +000058
59forcedelete test.zip
60reset_db
61load_static_extension db zipfile
62do_execsql_test 3.0 {
63 CREATE VIRTUAL TABLE setup USING zipfile('test.zip');
64 INSERT INTO setup(name, data) VALUES('a.txt', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa');
65}
66
danc3ef23a2018-02-01 15:19:54 +000067do_faultsim_test 3 -faults oom* -body {
dan2f7260d2018-01-30 17:43:22 +000068 execsql { SELECT name,data FROM zipfile('test.zip') }
69} -test {
70 faultsim_test_result {0 {a.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaa}}
71}
72
danc3ef23a2018-02-01 15:19:54 +000073do_faultsim_test 4 -faults oom* -body {
74 execsql {
75 WITH c(n, d) AS (
76 SELECT 1, 'aaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb'
77 )
78 SELECT name, data FROM zipfile(
79 (SELECT zipfile(n, d) FROM c)
80 );
81 }
82} -test {
83 faultsim_test_result {0 {1 aaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb}}
84}
85
dan15daa6b2018-02-01 19:41:23 +000086reset_db
dan668845b2018-02-01 20:42:23 +000087sqlite3_db_config_lookaside db 0 0 0
dan15daa6b2018-02-01 19:41:23 +000088load_static_extension db zipfile
89
90do_execsql_test 5.0 {
91 CREATE VIRTUAL TABLE setup USING zipfile('test.zip')
92}
93
94do_faultsim_test 5.1 -faults oom* -prep {
95 forcedelete test.zip
96} -body {
97 execsql {
98 INSERT INTO setup(name, data)
99 VALUES('a.txt', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa');
100 }
101} -test {
102 faultsim_test_result {0 {}}
103}
104
105do_faultsim_test 5.2 -faults oom* -prep {
106 forcedelete test.zip
107} -body {
108 execsql {
109 INSERT INTO setup(name, data) VALUES('dir', NULL)
110 }
111} -test {
112 faultsim_test_result {0 {}}
113}
114
115do_faultsim_test 5.3 -faults oom* -prep {
116 forcedelete test.zip
117 execsql {
118 DROP TABLE IF EXISTS setup;
119 BEGIN;
120 CREATE VIRTUAL TABLE setup USING zipfile('test.zip')
121 }
122} -body {
123 execsql {
124 INSERT INTO setup(name, data) VALUES('dir', NULL)
125 }
126} -test {
127 catchsql { COMMIT }
128 faultsim_test_result {0 {}}
129}
130
dan668845b2018-02-01 20:42:23 +0000131do_faultsim_test 6.1 -faults oom* -body {
132 execsql {
133 WITH c(n, d) AS (
134 VALUES('a.txt', '1234567890') UNION ALL
135 VALUES('dir', NULL)
136 )
137 SELECT zipfile(n, d) IS NULL FROM c;
138 }
139} -test {
140 faultsim_test_result {0 0}
141}
142
143set big [string repeat 0123456789 1000]
144do_faultsim_test 6.2 -faults oom* -body {
145 execsql {
146 WITH c(n, d) AS (
147 VALUES('a.txt', $big)
148 )
149 SELECT zipfile(n, NULL, NULL, d, 0) IS NULL FROM c;
150 }
151} -test {
152 faultsim_test_result {0 0}
153}
154
155do_faultsim_test 7.0 -faults oom* -prep {
156 catch { db close }
157 sqlite3 db ""
158} -body {
159 load_static_extension db zipfile
160} -test {
161}
162
dan2f7260d2018-01-30 17:43:22 +0000163
164finish_test
165