1use strict; 2use Test::More; 3 4#---------------------------------------------------------------------- 5# Test database failures 6#---------------------------------------------------------------------- 7 8BEGIN { 9 eval "use DBD::SQLite"; 10 plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 7); 11} 12 13use lib 't/testlib'; 14use Film; 15 16Film->create_test_film; 17 18{ 19 my $btaste = Film->retrieve('Bad Taste'); 20 isa_ok $btaste, 'Film', "We have Bad Taste"; 21 { 22 no warnings 'redefine'; 23 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" }; 24 eval { $btaste->delete }; 25 ::like $@, qr/Database died/s, "We failed"; 26 } 27 my $still = Film->retrieve('Bad Taste'); 28 isa_ok $btaste, 'Film', "We still have Bad Taste"; 29} 30 31{ 32 my $btaste = Film->retrieve('Bad Taste'); 33 isa_ok $btaste, 'Film', "We have Bad Taste"; 34 $btaste->numexplodingsheep(10); 35 { 36 no warnings 'redefine'; 37 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" }; 38 eval { $btaste->update }; 39 ::like $@, qr/update.*Database died/s, "We failed"; 40 } 41 $btaste->discard_changes; 42 my $still = Film->retrieve('Bad Taste'); 43 isa_ok $btaste, 'Film', "We still have Bad Taste"; 44 is $btaste->numexplodingsheep, 1, "with 1 sheep"; 45} 46 47if (0) { 48 my $sheep = Film->maximum_value_of('numexplodingsheep'); 49 is $sheep, 1, "1 exploding sheep"; 50 { 51 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" }; 52 my $sheep = eval { Film->maximum_value_of('numexplodingsheep') }; 53 ::like $@, qr/select.*Database died/s, 54 "Handle database death in single value select"; 55 } 56} 57 58