Add tests for malloc() failure when the atomic-write optimization is being used. Also fix things so that rollback can occur without a malloc(), even if there is a master journal file. (CVS 4330)

FossilOrigin-Name: 481fd3a89e50e329596d96565170e3d9977aae29
diff --git a/test/mallocD.test b/test/mallocD.test
new file mode 100644
index 0000000..ac7cd85
--- /dev/null
+++ b/test/mallocD.test
@@ -0,0 +1,54 @@
+# 2007 Aug 29
+#
+# 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.
+#
+#***********************************************************************
+#
+# $Id: mallocD.test,v 1.1 2007/08/30 08:08:17 danielk1977 Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+source $testdir/malloc_common.tcl
+
+sqlite3_simulate_device -char atomic
+
+set PREP { 
+  PRAGMA page_size = 1024;
+  CREATE TABLE abc(a, b, c);
+}
+
+do_malloc_test mallocD-1 -sqlprep $PREP -sqlbody { 
+  INSERT INTO abc VALUES(1, 2, 3);
+}
+
+do_malloc_test mallocD-2 -sqlprep $PREP -sqlbody {
+  BEGIN;
+  INSERT INTO abc VALUES(1, 2, 3);
+  INSERT INTO abc VALUES(4, 5, 6);
+  ROLLBACK;
+}
+
+do_malloc_test mallocD-3 -sqlprep $PREP -sqlbody {
+  BEGIN;
+  INSERT INTO abc VALUES(1, 2, 3);
+  INSERT INTO abc VALUES(4, 5, randstr(1500,1500));
+  COMMIT;
+}
+
+do_malloc_test mallocD-4 -sqlprep $PREP -sqlbody {
+  ATTACH 'test2.db' AS aux;
+  BEGIN;
+  CREATE TABLE aux.def(d, e, f);
+  INSERT INTO abc VALUES(4, 5, 6);
+  COMMIT;
+}
+
+sqlite3_simulate_device -char {}
+
+finish_test
+