12f7260deSdan# 2018 January 30 22f7260deSdan# 32f7260deSdan# The author disclaims copyright to this source code. In place of 42f7260deSdan# a legal notice, here is a blessing: 52f7260deSdan# 62f7260deSdan# May you do good and not evil. 72f7260deSdan# May you find forgiveness for yourself and forgive others. 82f7260deSdan# May you share freely, never taking more than you give. 92f7260deSdan# 102f7260deSdan#*********************************************************************** 112f7260deSdan# 122f7260deSdan 132f7260deSdanset testdir [file dirname $argv0] 142f7260deSdansource $testdir/tester.tcl 152f7260deSdansource $testdir/malloc_common.tcl 162f7260deSdanset testprefix zipfilefault 172f7260deSdan 182f7260deSdanifcapable !vtab { 192f7260deSdan finish_test; return 202f7260deSdan} 212f7260deSdanif {[catch {load_static_extension db zipfile} error]} { 222f7260deSdan puts "Skipping zipfile2 tests, hit load error: $error" 232f7260deSdan finish_test; return 242f7260deSdan} 252f7260deSdan 262f7260deSdanfaultsim_save_and_close 272f7260deSdando_faultsim_test 1 -prep { 282f7260deSdan faultsim_restore_and_reopen 292f7260deSdan load_static_extension db zipfile 302f7260deSdan execsql { DROP TABLE IF EXISTS aaa } 312f7260deSdan} -body { 322f7260deSdan execsql { CREATE VIRTUAL TABLE aaa USING zipfile('test.zip') } 332f7260deSdan} -test { 342f7260deSdan faultsim_test_result {0 {}} 352f7260deSdan} 362f7260deSdan 372f7260deSdanforcedelete test.zip 382f7260deSdansqlite3 db test.db 392f7260deSdanload_static_extension db zipfile 402f7260deSdando_execsql_test 2.0 { 412f7260deSdan CREATE VIRTUAL TABLE setup USING zipfile('test.zip'); 422f7260deSdan INSERT INTO setup(name, data) VALUES('a.txt', '1234567890'); 432f7260deSdan} 442f7260deSdan 4515daa6b5Sdando_faultsim_test 2.1 -faults oom* -body { 462f7260deSdan execsql { SELECT name,data FROM zipfile('test.zip') } 472f7260deSdan} -test { 482f7260deSdan faultsim_test_result {0 {a.txt 1234567890}} 492f7260deSdan} 50*6131adc0Sdrhifcapable json1 { 5115daa6b5Sdan do_faultsim_test 2.2 -faults oom* -body { 5215daa6b5Sdan execsql { 5315daa6b5Sdan SELECT json_extract( zipfile_cds(z), '$.version-made-by' ) 5415daa6b5Sdan FROM zipfile('test.zip') 5515daa6b5Sdan } 5615daa6b5Sdan } -test { 5715daa6b5Sdan faultsim_test_result {0 798} 5815daa6b5Sdan } 59*6131adc0Sdrh} 602f7260deSdan 612f7260deSdanforcedelete test.zip 622f7260deSdanreset_db 632f7260deSdanload_static_extension db zipfile 642f7260deSdando_execsql_test 3.0 { 652f7260deSdan CREATE VIRTUAL TABLE setup USING zipfile('test.zip'); 662f7260deSdan INSERT INTO setup(name, data) VALUES('a.txt', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'); 672f7260deSdan} 682f7260deSdan 69c3ef23a1Sdando_faultsim_test 3 -faults oom* -body { 702f7260deSdan execsql { SELECT name,data FROM zipfile('test.zip') } 712f7260deSdan} -test { 722f7260deSdan faultsim_test_result {0 {a.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaa}} 732f7260deSdan} 742f7260deSdan 75c3ef23a1Sdando_faultsim_test 4 -faults oom* -body { 76c3ef23a1Sdan execsql { 77c3ef23a1Sdan WITH c(n, d) AS ( 78c3ef23a1Sdan SELECT 1, 'aaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb' 79c3ef23a1Sdan ) 80c3ef23a1Sdan SELECT name, data FROM zipfile( 81c3ef23a1Sdan (SELECT zipfile(n, d) FROM c) 82c3ef23a1Sdan ); 83c3ef23a1Sdan } 84c3ef23a1Sdan} -test { 85c3ef23a1Sdan faultsim_test_result {0 {1 aaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb}} 86c3ef23a1Sdan} 87c3ef23a1Sdan 8815daa6b5Sdanreset_db 89668845bbSdansqlite3_db_config_lookaside db 0 0 0 9015daa6b5Sdanload_static_extension db zipfile 9115daa6b5Sdan 9215daa6b5Sdando_execsql_test 5.0 { 9315daa6b5Sdan CREATE VIRTUAL TABLE setup USING zipfile('test.zip') 9415daa6b5Sdan} 9515daa6b5Sdan 9615daa6b5Sdando_faultsim_test 5.1 -faults oom* -prep { 9715daa6b5Sdan forcedelete test.zip 9815daa6b5Sdan} -body { 9915daa6b5Sdan execsql { 10015daa6b5Sdan INSERT INTO setup(name, data) 10115daa6b5Sdan VALUES('a.txt', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'); 10215daa6b5Sdan } 10315daa6b5Sdan} -test { 10415daa6b5Sdan faultsim_test_result {0 {}} 10515daa6b5Sdan} 10615daa6b5Sdan 10715daa6b5Sdando_faultsim_test 5.2 -faults oom* -prep { 10815daa6b5Sdan forcedelete test.zip 10915daa6b5Sdan} -body { 11015daa6b5Sdan execsql { 11115daa6b5Sdan INSERT INTO setup(name, data) VALUES('dir', NULL) 11215daa6b5Sdan } 11315daa6b5Sdan} -test { 11415daa6b5Sdan faultsim_test_result {0 {}} 11515daa6b5Sdan} 11615daa6b5Sdan 11715daa6b5Sdando_faultsim_test 5.3 -faults oom* -prep { 11815daa6b5Sdan forcedelete test.zip 11915daa6b5Sdan execsql { 12015daa6b5Sdan DROP TABLE IF EXISTS setup; 12115daa6b5Sdan BEGIN; 12215daa6b5Sdan CREATE VIRTUAL TABLE setup USING zipfile('test.zip') 12315daa6b5Sdan } 12415daa6b5Sdan} -body { 12515daa6b5Sdan execsql { 12615daa6b5Sdan INSERT INTO setup(name, data) VALUES('dir', NULL) 12715daa6b5Sdan } 12815daa6b5Sdan} -test { 12915daa6b5Sdan catchsql { COMMIT } 13015daa6b5Sdan faultsim_test_result {0 {}} 13115daa6b5Sdan} 13215daa6b5Sdan 133668845bbSdando_faultsim_test 6.1 -faults oom* -body { 134668845bbSdan execsql { 135668845bbSdan WITH c(n, d) AS ( 136668845bbSdan VALUES('a.txt', '1234567890') UNION ALL 137668845bbSdan VALUES('dir', NULL) 138668845bbSdan ) 139668845bbSdan SELECT zipfile(n, d) IS NULL FROM c; 140668845bbSdan } 141668845bbSdan} -test { 142668845bbSdan faultsim_test_result {0 0} 143668845bbSdan} 144668845bbSdan 145668845bbSdanset big [string repeat 0123456789 1000] 146668845bbSdando_faultsim_test 6.2 -faults oom* -body { 147668845bbSdan execsql { 148668845bbSdan WITH c(n, d) AS ( 149668845bbSdan VALUES('a.txt', $big) 150668845bbSdan ) 151668845bbSdan SELECT zipfile(n, NULL, NULL, d, 0) IS NULL FROM c; 152668845bbSdan } 153668845bbSdan} -test { 154668845bbSdan faultsim_test_result {0 0} 155668845bbSdan} 156668845bbSdan 157668845bbSdando_faultsim_test 7.0 -faults oom* -prep { 158668845bbSdan catch { db close } 159668845bbSdan sqlite3 db "" 160668845bbSdan} -body { 161668845bbSdan load_static_extension db zipfile 162668845bbSdan} -test { 163668845bbSdan} 164668845bbSdan 1652f7260deSdan 1662f7260deSdanfinish_test 167