xref: /sqlite-3.40.0/test/incrblobfault.test (revision a32536b4)
1# 2010 October 26
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#
13
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16
17ifcapable !incrblob {
18  finish_test
19  return
20}
21
22set testprefix incrblobfault
23
24do_execsql_test 1.0 {
25  CREATE TABLE blob(x INTEGER PRIMARY KEY, v BLOB);
26  INSERT INTO blob VALUES(1, 'hello world');
27  INSERT INTO blob VALUES(2, 'world hello');
28  INSERT INTO blob SELECT NULL, v FROM blob;
29  INSERT INTO blob SELECT NULL, v FROM blob;
30  INSERT INTO blob SELECT NULL, v FROM blob;
31  INSERT INTO blob SELECT NULL, v FROM blob;
32  INSERT INTO blob SELECT NULL, v FROM blob;
33  INSERT INTO blob SELECT NULL, v FROM blob;
34  INSERT INTO blob SELECT NULL, v FROM blob;
35  INSERT INTO blob SELECT NULL, v FROM blob;
36  INSERT INTO blob SELECT NULL, v FROM blob;
37  INSERT INTO blob SELECT NULL, v FROM blob;
38}
39
40do_faultsim_test 1 -prep {
41  sqlite3 db test.db
42  set ::blob [db incrblob blob v 1]
43} -body {
44  if {[catch {sqlite3_blob_reopen $::blob 1000}]} {
45    error [sqlite3_errmsg db]
46  }
47} -test {
48  faultsim_test_result {0 {}}
49  close $::blob
50}
51
52do_faultsim_test 2 -prep {
53  sqlite3 db test.db
54  set ::blob [db incrblob blob v 1]
55} -body {
56  if {[catch {sqlite3_blob_reopen $::blob -1}]} {
57    error [sqlite3_errmsg db]
58  }
59} -test {
60  faultsim_test_result {1 {no such rowid: -1}} {1 {disk I/O error}}
61  close $::blob
62}
63
64do_faultsim_test 3 -prep {
65  sqlite3 db test.db
66} -body {
67  set ::blob [db incrblob blob v 1]
68  gets $::blob
69} -test {
70  faultsim_test_result {0 {hello world}}
71  catch { close $::blob }
72}
73
74finish_test
75