Add unix-only tests to check that the "unzip" program can unpack archives

generated by the zipfile extension.

FossilOrigin-Name: 438c5c5237a801ae78809bf324bb9251fb50250addfc1f8e36659442b0e26ab6
This commit is contained in:
dan 2018-01-29 19:47:32 +00:00
parent f8c4b99a02
commit ea4125bbef
4 changed files with 77 additions and 16 deletions

View File

@ -491,6 +491,7 @@ static void fsdirResetCursor(fsdir_cursor *pCur){
sqlite3_free(pLvl->zDir);
}
sqlite3_free(pCur->zPath);
sqlite3_free(pCur->aLvl);
pCur->aLvl = 0;
pCur->zPath = 0;
pCur->zBase = 0;
@ -506,7 +507,6 @@ static int fsdirClose(sqlite3_vtab_cursor *cur){
fsdir_cursor *pCur = (fsdir_cursor*)cur;
fsdirResetCursor(pCur);
sqlite3_free(pCur->aLvl);
sqlite3_free(pCur);
return SQLITE_OK;
}

View File

@ -1,5 +1,5 @@
C Add\saggregate\sfunction\szipfile()\sto\sthe\szipfile\sextension.\sFor\scomposing\snew\nzip\sarchives\sin\smemory.
D 2018-01-29T18:41:07.175
C Add\sunix-only\stests\sto\scheck\sthat\sthe\s"unzip"\sprogram\scan\sunpack\sarchives\ngenerated\sby\sthe\szipfile\sextension.
D 2018-01-29T19:47:32.262
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
@ -277,7 +277,7 @@ F ext/misc/compress.c dd4f8a6d0baccff3c694757db5b430f3bbd821d8686d1fc24df55cf9f0
F ext/misc/csv.c 1a009b93650732e22334edc92459c4630b9fa703397cbb3c8ca279921a36ca11
F ext/misc/dbdump.c 3509fa6b8932d04e932d6b6b827b6a82ca362781b8e8f3c77336f416793e215e
F ext/misc/eval.c f971962e92ebb8b0a4e6b62949463ee454d88fa2
F ext/misc/fileio.c bd2f717be63a9ae9ff85977a756c43a96d47a7763d98ae913636c64b714c232b
F ext/misc/fileio.c 4cad3a78bfbbea9b1414b4405fd704ee57fbe2621254b011888dae7b0ba8c513
F ext/misc/fuzzer.c 7c64b8197bb77b7d64eff7cac7848870235d4c25
F ext/misc/ieee754.c f190d0cc5182529acb15babd177781be1ac1718c
F ext/misc/json1.c dbe086615b9546c156bf32b9378fc09383b58bd17513b866cfd24c1e15281984
@ -1603,7 +1603,7 @@ F test/wordcount.c cb589cec469a1d90add05b1f8cee75c7210338d87a5afd65260ed5c0f4bbf
F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc
F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa
F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc
F test/zipfile.test 12199631759785b0185ceb1ff3cffdcc91985ef61475ab1c69139686b09a87c8
F test/zipfile.test c40ae3a5d3fd0a31a8c6bdae1dbef55dd7140acb0d3b316c8edb744085ea6134
F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5
F tool/GetTclKit.bat 8995df40c4209808b31f24de0b58f90930239a234f7591e3675d45bfbb990c5d
F tool/Replace.cs 02c67258801c2fb5f63231e0ac0f220b4b36ba91
@ -1702,7 +1702,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 8767f7b880f2e4112f75f0b6ef7be3f50ab1ae20e103e7d03d8bfe77e6c79438
R 5f1a0bf3bc3038aabd0aee2df4b1bd63
P e364eeac76a8225146b37d801bc6cabe03e9abede5a1412ebe9d94a32d8838cc
R 78b9ab6ccbbf51cef503aff35913fad6
U dan
Z eba1cb16b20a1e223d496488c50326dc
Z 634d51e6967cb83c15fce21d55a23989

View File

@ -1 +1 @@
e364eeac76a8225146b37d801bc6cabe03e9abede5a1412ebe9d94a32d8838cc
438c5c5237a801ae78809bf324bb9251fb50250addfc1f8e36659442b0e26ab6

View File

@ -30,6 +30,24 @@ proc readfile {f} {
set data
}
if {$::tcl_platform(platform)=="unix" && [catch {exec unzip}]==0} {
set ::UNZIP 1
load_static_extension db fileio
proc do_unzip {file} {
forcedelete test_unzip
file mkdir test_unzip
exec unzip -d test_unzip $file
set res [db eval {
SELECT replace(name,'test_unzip/',''),mode,mtime,data
FROM fsdir('test_unzip')
WHERE name!='test_unzip'
ORDER BY name
}]
set res
}
}
# Argument $file is the name of a zip archive on disk. This function
# executes test cases to check that the results of each of the following
# are the same:
@ -58,7 +76,49 @@ proc do_zipfile_blob_test {tn file} {
#puts $r3
uplevel [list do_test $tn.1 [list set {} $r2] $r1]
uplevel [list do_test $tn.1 [list set {} $r3] $r1]
uplevel [list do_test $tn.2 [list set {} $r3] $r1]
}
# Argument $file is a zip file on disk. This command runs tests to:
#
# 1. Unpack the archive with unix command [unzip] and compare the
# results to reading the same archive using the zipfile() table
# valued function.
#
# 2. Creates a new archive with the same contents using the zipfile()
# aggregate function as follows:
#
# SELECT writefile('test_unzip.zip',
# ( SELECT zipfile(name,mode,mtime,data,method) FROM zipfile($file) )
# );
#
# Then tests that unpacking the new archive using [unzip] produces
# the same results as in (1).
#
proc do_unzip_test {tn file} {
if {[info vars ::UNZIP]==""} { return }
db func sss strip_slash
db eval {
SELECT writefile('test_unzip.zip',
( SELECT zipfile(name,mode,mtime,data,method) FROM zipfile($file) )
);
}
set r1 [db eval {
SELECT sss(name),mode,mtime,data FROM zipfile($file) ORDER BY name
}]
set r2 [do_unzip $file]
set r3 [do_unzip test_unzip.zip]
uplevel [list do_test $tn.1 [list set {} $r2] $r1]
uplevel [list do_test $tn.2 [list set {} $r3] $r1]
}
proc strip_slash {in} { regsub {/$} $in {} }
proc do_zip_tests {tn file} {
uplevel do_zipfile_blob_test $tn.1 $file
uplevel do_unzip_test $tn.2 $file
}
forcedelete test.zip
@ -99,14 +159,14 @@ do_execsql_test 1.2 {
f.txt 1000000000 abcde
g.txt 1000000002 12345
}
do_zipfile_blob_test 1.2.1 test.zip
do_zip_tests 1.2a test.zip
do_execsql_test 1.3 {
INSERT INTO zz(name, mode, mtime, data) VALUES('h.txt',
'-rw-r--r--', 1000000004, 'aaaaaaaaaabbbbbbbbbb'
);
}
do_zipfile_blob_test 1.3.1 test.zip
do_zip_tests 1.3a test.zip
do_execsql_test 1.4 {
SELECT name, mtime, data, method FROM zipfile('test.zip');
@ -153,7 +213,7 @@ do_execsql_test 1.6.1 {
h.txt 33188 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 1000000006 zxcvb 0
}
do_zipfile_blob_test 1.6.1a test.zip
do_zip_tests 1.6.1a test.zip
do_execsql_test 1.6.2 {
UPDATE zz SET mtime=4 WHERE name='i.txt';
@ -172,7 +232,7 @@ do_execsql_test 1.6.3 {
h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 4 zxcvb 0
}
do_zipfile_blob_test 1.6.3a test.zip
do_zip_tests 1.6.3a test.zip
do_execsql_test 1.6.4 {
UPDATE zz SET name = 'blue.txt' WHERE name='f.txt';
@ -182,7 +242,7 @@ do_execsql_test 1.6.4 {
h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 4 zxcvb 0
}
do_zipfile_blob_test 1.6.4a test.zip
do_zip_tests 1.6.4a test.zip
do_execsql_test 1.6.5 {
UPDATE zz SET data = 'edcba' WHERE name='blue.txt';
@ -217,6 +277,7 @@ do_execsql_test 1.6.8 {
db close
forcedelete test.zip
reset_db
load_static_extension db fileio
load_static_extension db zipfile
do_execsql_test 2.1 {
CREATE VIRTUAL TABLE zzz USING zipfile('test.zip');
@ -243,7 +304,7 @@ do_execsql_test 2.4 {
dirname2/ 16877 {}
dirname2/file1.txt 33188 abcdefghijklmnop
}
do_zipfile_blob_test 2.4.1 test.zip
do_zip_tests 2.4a test.zip
# If on unix, check that the [unzip] utility can unpack our archive.
#