]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add fault-injection tests for the new code on this branch.
authordan <Dan Kennedy>
Tue, 29 Oct 2024 20:27:12 +0000 (20:27 +0000)
committerdan <Dan Kennedy>
Tue, 29 Oct 2024 20:27:12 +0000 (20:27 +0000)
FossilOrigin-Name: 349b2d895752c087dae7b7019bc10ac21852309e96dbc5f29cd902d080421f83

manifest
manifest.uuid
test/readonlyfault.test [new file with mode: 0644]

index 2d6564bbfae0473e7507c525a994c44653173214..a5bff9a2f3c59a1ee2f6497b032fcf657189b4a5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Allow\sread-only\sconnections\sto\signore\shot\sjournals\screated\sby\s"PRAGMA\sjournal_mode\s=\swal".
-D 2024-10-29T19:34:58.292
+C Add\sfault-injection\stests\sfor\sthe\snew\scode\son\sthis\sbranch.
+D 2024-10-29T20:27:12.839
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28
@@ -1551,6 +1551,7 @@ F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736
 F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8
 F test/readonly.test 69a7ccec846cad2e000b3539d56360d02f327061dc5e41f7f9a3e01f19719952
 F test/readonly2.test df7b572df01a0f773bb7b6e64bd8c98a55cb3099b4ffd054a44319c5f7e87f14
+F test/readonlyfault.test a96653369f6c2912ccf9d18a43fe82dcb8b19bdbb3e9871ed76325ebea755fd1
 F test/recover.test a163a156ea9f2beea63fa83c4dcd8dea6e57b8a569fc647155e3d2754eaac1b5
 F test/regexp1.test 8f2a8bc1569666e29a4cee6c1a666cd224eb6d50e2470d1dc1df995170f3e0f1
 F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5
@@ -2199,11 +2200,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P decc60034849c232a05c8eb93ff0c6a5d6a48336d960771ed096d89633a9d0e2
-R b458c57cdc073a8cbc08997978169801
-T *branch * readonly-ignore-wal-jrnl
-T *sym-readonly-ignore-wal-jrnl *
-T -sym-trunk *
+P d003480db7443025cfd2227096fd929454e9243d5f393f296b74f9bdad15d396
+R 90a9a0e8b17e5b79825f8d5c457cd6a8
 U dan
-Z 5e2548d07e7a74989e8031dcc6402807
+Z e756bc3964111f499ec65a7f126bb3a0
 # Remove this line to create a well-formed Fossil manifest.
index e9fe55edc5462da3ecca42d1b991b87de9de3298..55df15d12dff6064c3b7fd55cb02f7aebc89b4ed 100644 (file)
@@ -1 +1 @@
-d003480db7443025cfd2227096fd929454e9243d5f393f296b74f9bdad15d396
+349b2d895752c087dae7b7019bc10ac21852309e96dbc5f29cd902d080421f83
diff --git a/test/readonlyfault.test b/test/readonlyfault.test
new file mode 100644 (file)
index 0000000..4305b13
--- /dev/null
@@ -0,0 +1,66 @@
+# 2024 October 30
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+set ::testprefix readonlyfault
+
+testvfs tvfs -default 1
+tvfs script at_vfs_callback
+tvfs filter {xDelete}
+
+set ::delete_shall_fail 0
+proc at_vfs_callback {method file z args} {
+  if {$::delete_shall_fail} {
+    return "SQLITE_IOERR"
+  }
+  return "SQLITE_OK"
+}
+
+reset_db
+do_execsql_test 1.0 {
+  BEGIN;
+    CREATE TABLE t1(a, b);
+    INSERT INTO t1 VALUES(1, 2), (3, 4), (5, 6);
+  COMMIT;
+}
+
+set ::delete_shall_fail 1
+do_catchsql_test 1.1 {
+  PRAGMA journal_mode = wal;
+} {1 {disk I/O error}}
+
+do_test 1.2 {
+  file exists test.db-journal
+} 1
+
+db_save_and_close
+
+# Injecting CANTOPEN errors doesn't work here. If such an error occurs
+# while trying to open a potentially hot journal to inspect its contents,
+# the error is ignored and the journal assumed to be hot. Leading to an
+# SQLITE_READONLY error. So only the other types of fault-injection are
+# tested here.
+#
+do_faultsim_test readonlyfault-1 -faults {oom* ioerr* inter* full*} -prep {
+  catch { db close }
+  db_restore
+  sqlite3 db test.db -readonly 1
+} -body {
+  execsql { SELECT count(*), sum(a), sum(b) FROM t1 }
+} -test {
+  faultsim_test_result {0 {3 9 12}} 
+}
+
+
+finish_test