File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / incrblob_err.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 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: #
   12: # $Id: incrblob_err.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
   13: #
   14: 
   15: set testdir [file dirname $argv0]
   16: source $testdir/tester.tcl
   17: 
   18: ifcapable {!incrblob  || !memdebug || !tclvar} {
   19:   finish_test
   20:   return
   21: }
   22: 
   23: source $testdir/malloc_common.tcl
   24: 
   25: unset -nocomplain ::fd ::data
   26: set ::fd [open [info script]]
   27: set ::data [read $::fd]
   28: close $::fd
   29: 
   30: do_malloc_test 1 -tclprep {
   31:   set bytes [file size [info script]]
   32:   execsql {
   33:     CREATE TABLE blobs(k, v BLOB);
   34:     INSERT INTO blobs VALUES(1, zeroblob($::bytes));
   35:   }
   36: } -tclbody {
   37:   set ::blob [db incrblob blobs v 1]
   38:   fconfigure $::blob -translation binary
   39:   set rc [catch {puts -nonewline $::blob $::data}]
   40:   if {$rc} { error "out of memory" }
   41: } 
   42: 
   43: do_malloc_test 2 -tclprep {
   44:   execsql {
   45:     CREATE TABLE blobs(k, v BLOB);
   46:     INSERT INTO blobs VALUES(1, $::data);
   47:   }
   48: } -tclbody {
   49:   set ::blob [db incrblob blobs v 1]
   50:   set rc [catch {set ::r [read $::blob]}]
   51:   if {$rc} { 
   52:     error "out of memory" 
   53:   } elseif {$::r ne $::data} {
   54:     error "Bad data read..."
   55:   }
   56: }
   57: 
   58: do_malloc_test 3 -tclprep {
   59:   execsql {
   60:     CREATE TABLE blobs(k, v BLOB);
   61:     INSERT INTO blobs VALUES(1, $::data);
   62:   }
   63: } -tclbody {
   64:   set ::blob [db incrblob blobs v 1]
   65:   set rc [catch {set ::r [read $::blob]}]
   66:   if {$rc} { 
   67:     error "out of memory" 
   68:   } elseif {$::r ne $::data} {
   69:     error "Bad data read..."
   70:   }
   71:   set rc [catch {close $::blob}]
   72:   if {$rc} { 
   73:     error "out of memory" 
   74:   }
   75: }
   76: 
   77: do_ioerr_test incrblob_err-4 -cksum 1 -sqlprep {
   78:   CREATE TABLE blobs(k, v BLOB);
   79:   INSERT INTO blobs VALUES(1, $::data);
   80: } -tclbody {
   81:   set ::blob [db incrblob blobs v 1]
   82:   read $::blob
   83: }
   84: 
   85: do_ioerr_test incrblob_err-5 -cksum 1 -sqlprep {
   86:   CREATE TABLE blobs(k, v BLOB);
   87:   INSERT INTO blobs VALUES(1, zeroblob(length(CAST($::data AS BLOB))));
   88: } -tclbody {
   89:   set ::blob [db incrblob blobs v 1]
   90:   fconfigure $::blob -translation binary
   91:   puts -nonewline $::blob $::data
   92:   close $::blob
   93: }
   94: 
   95: do_ioerr_test incrblob_err-6 -cksum 1 -sqlprep {
   96:   CREATE TABLE blobs(k, v BLOB);
   97:   INSERT INTO blobs VALUES(1, $::data || $::data || $::data);
   98: } -tclbody {
   99:   set ::blob [db incrblob blobs v 1]
  100:   fconfigure $::blob -translation binary
  101:   seek $::blob -20 end
  102:   puts -nonewline $::blob "12345678900987654321"
  103:   close $::blob
  104: }
  105: 
  106: do_ioerr_test incrblob_err-7 -cksum 1 -sqlprep {
  107:   PRAGMA auto_vacuum = 1;
  108:   CREATE TABLE blobs(k INTEGER PRIMARY KEY, v BLOB);
  109:   INSERT INTO blobs VALUES(1, zeroblob(500 * 1020));
  110: } -tclbody {
  111:   # Read some data from the end of the large blob inserted into table 
  112:   # "blobs". This forces the IO error to occur while reading a pointer
  113:   # map page for the purposes of seeking to the end of the blob.
  114:   #
  115:   sqlite3 db2 test.db
  116:   set ::blob [db2 incrblob blobs v 1]
  117:   sqlite3_blob_read $::blob [expr 500*1020-20] 20
  118:   close $::blob
  119: }
  120: catch {db2 close}
  121: 
  122: do_ioerr_test incrblob_err-8 -cksum 1 -sqlprep {
  123:   PRAGMA auto_vacuum = 1;
  124:   CREATE TABLE blobs(k INTEGER PRIMARY KEY, v BLOB);
  125:   INSERT INTO blobs VALUES(1, zeroblob(500 * 1020));
  126: } -tclbody {
  127:   # Read some data from the end of the large blob inserted into table 
  128:   # "blobs". This forces the IO error to occur while reading a pointer
  129:   # map page for the purposes of seeking to the end of the blob.
  130:   #
  131:   sqlite3 db2 test.db
  132:   set ::blob [db2 incrblob blobs v 1]
  133:   sqlite3_blob_write $::blob [expr 500*1020-20] 12345678900987654321
  134:   close $::blob
  135: }
  136: 
  137: catch {db2 close}
  138: 
  139: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>