Omit the single test from zipfile.test that uses json functionality in
[sqlite.git] / test / zipfile.test
blob07fc80f60283e19393a5da00d97239eb05d95e7f
1 # 2017 December 9
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
13 set testdir [file dirname $argv0]
14 source $testdir/tester.tcl
15 set testprefix zipfile
17 ifcapable !vtab {
18   finish_test; return
20 if {[catch {load_static_extension db zipfile} error]} {
21   puts "Skipping zipfile tests, hit load error: $error"
22   finish_test; return
25 forcedelete test.zip
26 do_execsql_test 1.0 {
27   CREATE VIRTUAL TABLE temp.zz USING zipfile('test.zip');
28   PRAGMA table_info(zz);
29 } {
30   0 name {} 1 {} 1 
31   1 mode {} 0 {} 0 
32   2 mtime {} 0 {} 0 
33   3 sz {} 0 {} 0 
34   4 rawdata {} 0 {} 0
35   5 data {} 0 {} 0
36   6 method {} 0 {} 0
39 do_catchsql_test 1.1.0.1 {
40   INSERT INTO zz(name, mode, mtime, sz, rawdata, method) 
41   VALUES('f.txt', '-rw-r--r--', 1000000000, 5, 'abcde', 0);
42 } {1 {constraint failed}}
43 do_catchsql_test 1.1.0.1 {
44   INSERT INTO zz(name, mtime, sz, rawdata, method) 
45   VALUES('g.txt', 1000000002, 5, '12345', 0);
46 } {1 {constraint failed}}
48 do_execsql_test 1.1.1 {
49   INSERT INTO zz(name, mode, mtime, data, method) 
50   VALUES('f.txt', '-rw-r--r--', 1000000000, 'abcde', 0);
52 do_execsql_test 1.1.2 {
53   INSERT INTO zz(name, mode, mtime, data, method) 
54   VALUES('g.txt', NULL, 1000000002, '12345', 0);
57 do_execsql_test 1.2 {
58   SELECT name, mtime, data FROM zipfile('test.zip')
59 } {
60   f.txt 1000000000 abcde 
61   g.txt 1000000002 12345
64 do_execsql_test 1.3 {
65   INSERT INTO zz(name, mode, mtime, data) VALUES('h.txt', 
66     '-rw-r--r--', 1000000004, 'aaaaaaaaaabbbbbbbbbb'
67   );
70 do_execsql_test 1.4 {
71   SELECT name, mtime, data, method FROM zipfile('test.zip');
72 } {
73   f.txt 1000000000 abcde 0
74   g.txt 1000000002 12345 0
75   h.txt 1000000004 aaaaaaaaaabbbbbbbbbb 8
78 ifcapable json1 {
79   do_execsql_test 1.4.1 {
80     SELECT name, json_extract( zipfile_cds(z) , '$.crc32')!=0
81     FROM zipfile('test.zip');
82   } {
83     f.txt 1
84     g.txt 1
85     h.txt 1
86   }
89 do_execsql_test 1.5.1 {
90   BEGIN;
91     INSERT INTO zz(name, mode, mtime, data, method)
92     VALUES('i.txt', '-rw-r--r--', 1000000006, 'zxcvb', 0);
93     SELECT name FROM zz;
94   COMMIT;
95 } {f.txt g.txt h.txt i.txt}
96 do_execsql_test 1.5.2 {
97   SELECT name FROM zz;
98 } {f.txt g.txt h.txt i.txt}
99 do_execsql_test 1.5.3 {
100   SELECT data FROM zz WHERE name='i.txt';
101 } {zxcvb}
103 do_execsql_test 1.6.0 {
104   DELETE FROM zz WHERE name='g.txt';
105   SELECT name FROM zz;
106 } {f.txt h.txt i.txt}
108 do_execsql_test 1.6.1 {
109   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
110 } {
111   f.txt 33188 1000000000 abcde 0
112   h.txt 33188 1000000004 aaaaaaaaaabbbbbbbbbb 8
113   i.txt 33188 1000000006 zxcvb 0
116 do_execsql_test 1.6.2 {
117   UPDATE zz SET mtime=4 WHERE name='i.txt';
118   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
119 } {
120   f.txt 33188 1000000000 abcde 0
121   h.txt 33188 1000000004 aaaaaaaaaabbbbbbbbbb 8
122   i.txt 33188 4 zxcvb 0
125 do_execsql_test 1.6.3 {
126   UPDATE zz SET mode='-rw-r--r-x' WHERE name='h.txt';
127   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
128 } {
129   f.txt 33188 1000000000 abcde 0
130   h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
131   i.txt 33188 4 zxcvb 0
134 do_execsql_test 1.6.4 {
135   UPDATE zz SET name = 'blue.txt' WHERE name='f.txt';
136   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
137 } {
138   blue.txt 33188 1000000000 abcde 0
139   h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
140   i.txt 33188 4 zxcvb 0
143 do_execsql_test 1.6.5 {
144   UPDATE zz SET data = 'edcba' WHERE name='blue.txt';
145   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
146 } {
147   blue.txt 33188 1000000000 edcba 0
148   h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
149   i.txt 33188 4 zxcvb 0
152 do_execsql_test 1.6.6 {
153   UPDATE zz SET mode=NULL, data = NULL WHERE name='blue.txt';
154   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
155 } {
156   blue.txt/ 16877 1000000000 {} 0
157   h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
158   i.txt 33188 4 zxcvb 0
161 do_catchsql_test 1.6.7 {
162   UPDATE zz SET data=NULL WHERE name='i.txt'
163 } {1 {constraint failed}}
164 do_execsql_test 1.6.8 {
165   SELECT name, mode, mtime, data, method FROM zipfile('test.zip');
166 } {
167   blue.txt/ 16877 1000000000 {} 0
168   h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
169   i.txt 33188 4 zxcvb 0
172 #-------------------------------------------------------------------------
173 db close
174 forcedelete test.zip
175 reset_db
176 load_static_extension db zipfile
177 do_execsql_test 2.1 {
178   CREATE VIRTUAL TABLE zzz USING zipfile('test.zip');
179   INSERT INTO zzz(name, mode) VALUES('dirname', 'drwxr-xr-x');
180   SELECT name, mode, data FROM zzz;
181 } {dirname/ 16877 {}}
182 do_execsql_test 2.2 {
183   INSERT INTO zzz(name, data) VALUES('dirname2', NULL);
184   INSERT INTO zzz(name, data) VALUES('dirname2/file1.txt', 'abcdefghijklmnop');
185   SELECT name, mode, data FROM zzz;
186 } {
187   dirname/ 16877 {}
188   dirname2/ 16877 {}
189   dirname2/file1.txt 33188 abcdefghijklmnop
192 do_catchsql_test 2.3 {
193   UPDATE zzz SET name = 'dirname3' WHERE name = 'dirname/';
194 } {0 {}}
195 do_execsql_test 2.4 {
196   SELECT name, mode, data FROM zzz;
197 } {
198   dirname3/ 16877 {}
199   dirname2/ 16877 {}
200   dirname2/file1.txt 33188 abcdefghijklmnop
203 # If on unix, check that the [unzip] utility can unpack our archive.
205 if {$::tcl_platform(platform)=="unix"} {
206   do_test 2.5.1 {
207     forcedelete dirname
208     forcedelete dirname2
209     set rc [catch { exec unzip test.zip > /dev/null } msg]
210     list $rc $msg
211   } {0 {}}
212   do_test 2.5.2 { file isdir dirname3 } 1
213   do_test 2.5.3 { file isdir dirname2 } 1
214   do_test 2.5.4 { file isdir dirname2/file1.txt } 0
215   do_test 2.5.5 { 
216     set fd [open dirname2/file1.txt]
217     set data [read $fd]
218     close $fd
219     set data
220   } {abcdefghijklmnop}
223 #-------------------------------------------------------------------------
224 reset_db
225 forcedelete test.zip
226 load_static_extension db zipfile
228 do_execsql_test 3.0 {
229   CREATE VIRTUAL TABLE temp.x1 USING zipfile('test.zip');
230   INSERT INTO x1(name, data) VALUES('dir1/', NULL);
231   INSERT INTO x1(name, data) VALUES('file1', '1234');
232   INSERT INTO x1(name, data) VALUES('dir1/file2', '5678');
234 foreach {tn fname} {
235   1 dir1
236   2 file1
237   3 dir1/file2
238 } {
239   do_catchsql_test 3.1.$tn.0 {
240     INSERT INTO x1(name, data) VALUES($fname, NULL);
241   } {1 {constraint failed}}
242   do_catchsql_test 3.1.$tn.1 {
243     INSERT INTO x1(name, data) VALUES($fname || '/', NULL);
244   } {1 {constraint failed}}
245   do_catchsql_test 3.1.$tn.2 {
246     INSERT INTO x1(name, data) VALUES($fname, 'abcd');
247   } {1 {constraint failed}}
250 do_catchsql_test 3.2 {
251   SELECT rowid FROM x1
252 } {1 {no such column: rowid}}
255 finish_test