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:
parent
f8c4b99a02
commit
ea4125bbef
@ -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;
|
||||
}
|
||||
|
14
manifest
14
manifest
@ -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
|
||||
|
@ -1 +1 @@
|
||||
e364eeac76a8225146b37d801bc6cabe03e9abede5a1412ebe9d94a32d8838cc
|
||||
438c5c5237a801ae78809bf324bb9251fb50250addfc1f8e36659442b0e26ab6
|
@ -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.
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user