1: # 2008 Feb 1
2: #
3: # The author disclaims copyright to this source code. In place of
4: # a legal notice, here is a blessing:
5: #
6: # May you do good and not evil.
7: # May you find forgiveness for yourself and forgive others.
8: # May you share freely, never taking more than you give.
9: #
10: #***********************************************************************
11: #
12: # This file is to test that ticket #2920 is fixed.
13: #
14: # $Id: tkt2920.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
15: #
16:
17: set testdir [file dirname $argv0]
18: source $testdir/tester.tcl
19:
20: # Create a database file that is full.
21: #
22: do_test tkt2920-1.1 {
23: db eval {
24: PRAGMA page_size=1024;
25: PRAGMA max_page_count=40;
26: PRAGMA auto_vacuum=0;
27: CREATE TABLE filler (fill);
28: }
29: file size test.db
30: } {2048}
31: do_test tkt2920-1.2 {
32: db eval BEGIN
33: for {set i 0} {$i<34} {incr i} {
34: db eval {INSERT INTO filler VALUES(randomblob(1024))}
35: }
36: db eval COMMIT
37: } {}
38:
39: # Try to add a single new page to the full database. We get
40: # a disk full error. But this does not corrupt the database.
41: #
42: do_test tkt2920-1.3 {
43: db eval BEGIN
44: catchsql {
45: INSERT INTO filler VALUES(randomblob(1024))
46: }
47: } {1 {database or disk is full}}
48: integrity_check tkt2920-1.4
49:
50: # Increase the maximum size of the database file by 1 page,
51: # but then try to add a two-page record. This also fails.
52: #
53: do_test tkt2920-1.5 {
54: db eval {PRAGMA max_page_count=41}
55: catchsql {
56: INSERT INTO filler VALUES(randomblob(2048))
57: }
58: } {1 {database or disk is full}}
59: integrity_check tkt2920-1.6
60:
61: # Increase the maximum size of the database by one more page.
62: # This time the insert works.
63: #
64: do_test tkt2920-1.7 {
65: db eval {PRAGMA max_page_count=42}
66: catchsql {
67: INSERT INTO filler VALUES(randomblob(2048))
68: }
69: } {0 {}}
70: integrity_check tkt2920-1.8
71:
72: # The previous errors cancelled the transaction.
73: #
74: do_test tkt2920-1.9 {
75: catchsql {COMMIT}
76: } {1 {cannot commit - no transaction is active}}
77:
78: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>