X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F33storage_reconnect.t;h=993cfad0c141b1fb8c51daf5e89510ac5adf828f;hb=cda5e0825360a15f97520dae86864b68ac90d5f5;hp=f069ef0636898f8063923885e03ffbefa79df989;hpb=e7827df02409b8e642cd68fca01de4a1c8fbb628;p=dbsrgits%2FDBIx-Class.git diff --git a/t/33storage_reconnect.t b/t/33storage_reconnect.t index f069ef0..993cfad 100644 --- a/t/33storage_reconnect.t +++ b/t/33storage_reconnect.t @@ -7,20 +7,27 @@ use Test::More; use lib qw(t/lib); use DBICTest; -plan tests => 5; +plan tests => 6; my $db_orig = "$FindBin::Bin/var/DBIxClass.db"; my $db_tmp = "$db_orig.tmp"; # Set up the "usual" sqlite for DBICTest -my $schema = DBICTest->init_schema; +my $schema = DBICTest->init_schema( sqlite_use_file => 1 ); # Make sure we're connected by doing something my @art = $schema->resultset("Artist")->search({ }, { order_by => 'name DESC'}); cmp_ok(@art, '==', 3, "Three artists returned"); # Disconnect the dbh, and be sneaky about it -$schema->storage->_dbh->disconnect; +# Also test if DBD::SQLite finaly knows how to ->disconnect properly +TODO: { + local $TODO = 'SQLite is evil/braindead. Once this test starts passing, remove the related atrocity from DBIx::Class::Storage::DBI::SQLite'; + my $w; + local $SIG{__WARN__} = sub { $w = shift }; + $schema->storage->_dbh->disconnect; + ok ($w !~ /active statement handles/, 'SQLite can disconnect properly \o/'); +} # Try the operation again - What should happen here is: # 1. S::DBI blindly attempts the SELECT, which throws an exception @@ -40,20 +47,28 @@ close DBFILE; chmod 0000, $db_orig; ### Try the operation again... it should fail, since there's no db -eval { - my @art_three = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } ); -}; -ok( $@, 'The operation failed' ); +{ + # Catch the DBI connection error + local $SIG{__WARN__} = sub {}; + eval { + my @art_three = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } ); + }; + ok( $@, 'The operation failed' ); +} ### Now, move the db file back to the correct name unlink($db_orig); move( $db_tmp, $db_orig ); -### Try the operation again... this time, it should succeed -my @art_four; -eval { - @art_four = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } ); -}; -ok( !$@, 'The operation succedded' ); -cmp_ok( @art_four, '==', 3, "Three artists returned" ); +SKIP: { + skip "Cannot reconnect if original connection didn't fail", 2 + if ( $@ =~ /encrypted or is not a database/ ); + ### Try the operation again... this time, it should succeed + my @art_four; + eval { + @art_four = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } ); + }; + ok( !$@, 'The operation succeeded' ); + cmp_ok( @art_four, '==', 3, "Three artists returned" ); +}