blob: 3a071c9c58532bd6aa6e9ccf05e6d83bdc69fff2 [file] [log] [blame]
danielk197792d4d7a2007-05-04 12:05:56 +00001# 2007 May 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#
danielk197727467042008-05-12 07:42:20 +000012# $Id: incrblob_err.test,v 1.9 2008/05/12 07:42:20 danielk1977 Exp $
danielk197792d4d7a2007-05-04 12:05:56 +000013#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17
danielk19774152e672007-09-12 17:01:45 +000018ifcapable {!incrblob || !memdebug || !tclvar} {
danielk197732a0d8b2007-05-04 19:03:02 +000019 finish_test
20 return
21}
22
danielk1977cdc3a6b2007-08-25 13:09:26 +000023source $testdir/malloc_common.tcl
danielk197792d4d7a2007-05-04 12:05:56 +000024
25set ::fd [open [info script]]
26set ::data [read $::fd]
27close $::fd
28
29do_malloc_test 1 -tclprep {
30 set bytes [file size [info script]]
31 execsql {
32 CREATE TABLE blobs(k, v BLOB);
33 INSERT INTO blobs VALUES(1, zeroblob($::bytes));
34 }
35} -tclbody {
36 set ::blob [db incrblob blobs v 1]
37 set rc [catch {puts -nonewline $::blob $::data}]
38 if {$rc} { error "out of memory" }
39}
40
41do_malloc_test 2 -tclprep {
42 execsql {
43 CREATE TABLE blobs(k, v BLOB);
44 INSERT INTO blobs VALUES(1, $::data);
45 }
46} -tclbody {
47 set ::blob [db incrblob blobs v 1]
48 set rc [catch {set ::r [read $::blob]}]
49 if {$rc} {
50 error "out of memory"
51 } elseif {$::r ne $::data} {
52 error "Bad data read..."
53 }
54}
55
56do_malloc_test 3 -tclprep {
57 execsql {
58 CREATE TABLE blobs(k, v BLOB);
59 INSERT INTO blobs VALUES(1, $::data);
60 }
61} -tclbody {
62 set ::blob [db incrblob blobs v 1]
63 set rc [catch {set ::r [read $::blob]}]
64 if {$rc} {
65 error "out of memory"
66 } elseif {$::r ne $::data} {
67 error "Bad data read..."
68 }
69 set rc [catch {close $::blob}]
70 if {$rc} {
71 error "out of memory"
72 }
73}
danielk197792d4d7a2007-05-04 12:05:56 +000074
danielk197727467042008-05-12 07:42:20 +000075
danielk197792d4d7a2007-05-04 12:05:56 +000076do_ioerr_test incrblob_err-4 -cksum 1 -sqlprep {
77 CREATE TABLE blobs(k, v BLOB);
78 INSERT INTO blobs VALUES(1, $::data);
79} -tclbody {
80 set ::blob [db incrblob blobs v 1]
81 read $::blob
82}
83
84do_ioerr_test incrblob_err-5 -cksum 1 -sqlprep {
85 CREATE TABLE blobs(k, v BLOB);
86 INSERT INTO blobs VALUES(1, zeroblob(length(CAST($::data AS BLOB))));
87} -tclbody {
88 set ::blob [db incrblob blobs v 1]
89 puts -nonewline $::blob $::data
90 close $::blob
91}
92
93do_ioerr_test incrblob_err-6 -cksum 1 -sqlprep {
94 CREATE TABLE blobs(k, v BLOB);
95 INSERT INTO blobs VALUES(1, $::data || $::data || $::data);
96} -tclbody {
97 set ::blob [db incrblob blobs v 1]
98 seek $::blob -20 end
99 puts -nonewline $::blob "12345678900987654321"
100 close $::blob
101}
102
103finish_test