xref: /sqlite-3.40.0/test/zipfilefault.test (revision 6131adc0)
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