X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fsavepoints.t;h=8960a5e5ed38597cf36aa2f4c4b2bc5bbeea64e9;hb=6b44e3b08d4d855e971ccb756fc2038a7cb206cb;hp=5866e6dfe5d84dcdf59373a38938bfd50924f6bd;hpb=a6543cfa5769989102af82b5308e23a4ebd3d24d;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/savepoints.t b/t/storage/savepoints.t index 5866e6d..8960a5e 100644 --- a/t/storage/savepoints.t +++ b/t/storage/savepoints.t @@ -1,10 +1,14 @@ +BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) } + use strict; use warnings; use Test::More; use Test::Exception; +use DBIx::Class::Optional::Dependencies; +use DBIx::Class::_Util qw(sigwarn_silencer scope_guard); +use Scalar::Util 'weaken'; -use lib qw(t/lib); use DBICTest; { @@ -34,13 +38,10 @@ for ('', keys %$env2optdep) { SKIP: { my $prefix; if ($prefix = $_) { - my ($dsn, $user, $pass) = map { $ENV{"${prefix}_$_"} } qw/DSN USER PASS/; - skip ("Skipping tests with $prefix: set \$ENV{${prefix}_DSN} _USER and _PASS", 1) - unless $dsn; + DBIx::Class::Optional::Dependencies->skip_without($env2optdep->{$prefix}); - skip ("Testing with ${prefix}_DSN needs " . DBIx::Class::Optional::Dependencies->req_missing_for( $env2optdep->{$prefix} ), 1) - unless DBIx::Class::Optional::Dependencies->req_ok_for($env2optdep->{$prefix}); + my ($dsn, $user, $pass) = map { $ENV{"${prefix}_$_"} } qw/DSN USER PASS/; $schema = DBICTest::Schema->connect ($dsn,$user,$pass,{ auto_savepoint => 1 }); @@ -75,9 +76,9 @@ for ('', keys %$env2optdep) { SKIP: { { $_ => $schema->storage->$_ } qw(debugcb debugobj debug) }; - my $sg = Scope::Guard->new(sub { + my $sg = scope_guard { $schema->storage->$_ ( $orig_states->{$_} ) for keys %$orig_states; - }); + }; $schema->storage->debugobj (my $stats = DBICTest::SVPTracerObj->new); $schema->storage->debug (1); @@ -237,6 +238,20 @@ for ('', keys %$env2optdep) { SKIP: { undef, 'rollback from inner transaction'; + # make sure a fresh txn will work after above + $schema->storage->txn_do(sub { ok "noop" } ); + +### Make sure non-existend savepoint release doesn't infloop itself + { + weaken( my $s = $schema ); + + throws_ok { + $s->storage->txn_do(sub { $s->svp_release('wibble') }) + } qr/Savepoint 'wibble' does not exist/, + "Calling svp_release on a non-existant savepoint throws expected error" + ; + } + ### cleanupz $schema->storage->dbh_do(sub { $_[1]->do("DROP TABLE artist") }); }}