# 2016 October 6
#
# 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.
#
#***********************************************************************
#
# The focus of this file is testing the session module.
#

if {![info exists testdir]} {
  set testdir [file join [file dirname [info script]] .. .. test]
} 
source [file join [file dirname [info script]] session_common.tcl]
source $testdir/tester.tcl
ifcapable !session {finish_test; return}
set testprefix sessionfault3

do_execsql_test 1.0 {
  CREATE TABLE t1(a, b, PRIMARY KEY(a));
  INSERT INTO t1 VALUES(1, 2);
  INSERT INTO t1 VALUES(3, 4);
  INSERT INTO t1 VALUES('five', 'six');
}

set C1 [changeset_from_sql {
  INSERT INTO t1 VALUES('seven', 'eight');
  UPDATE t1 SET b=6 WHERE a='five';
  DELETE FROM t1 WHERE a=1;
}]

do_execsql_test 1.1 {
  ALTER TABLE t1 ADD COLUMN d DEFAULT 123;
  ALTER TABLE t1 ADD COLUMN e DEFAULT 'string';
}

set C2 [changeset_from_sql {
  UPDATE t1 SET e='new value' WHERE a='seven';
  INSERT INTO t1 VALUES(0, 0, 0, 0);
}]

do_faultsim_test 1 -faults oom* -prep {
  sqlite3changegroup G
} -body {
  G schema db main
  G add $::C1
  G add $::C2
  G output
  set {} {}
} -test {
  catch { G delete }
  faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
}

#-------------------------------------------------------------------------
reset_db
do_execsql_test 2.0 {
  CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
  INSERT INTO t1 VALUES(1, 'one');
  INSERT INTO t1 VALUES(2, 'two');
  ALTER TABLE t1 ADD COLUMN c DEFAULT 'abcdefghijklmnopqrstuvwxyz';
}
faultsim_save_and_close

do_faultsim_test 2 -faults oom-t* -prep {
  faultsim_restore_and_reopen
  db eval {SELECT * FROM sqlite_schema}
} -body {
  sqlite3session S db main
  S attach *
  execsql {
    DELETE FROM t1 WHERE a = 1;
  }
} -test {
  faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
  catch { S delete }
}

finish_test
