X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fexception.t;h=9a14af3be644854b4efa5e4f1f321afaa0b92f81;hb=64ae166780d0cb2b9577e506da9b9b240c146d20;hp=3315fd05c6585d870d5c0d502eef9ca97a00ec73;hpb=d0c7015cbf4d447cb9df870214b5e88b5542b393;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/exception.t b/t/storage/exception.t index 3315fd0..9a14af3 100644 --- a/t/storage/exception.t +++ b/t/storage/exception.t @@ -1,5 +1,3 @@ -#!/usr/bin/perl - use strict; use warnings; @@ -9,6 +7,8 @@ use lib qw(t/lib); use DBICTest; use DBICTest::Schema; +# make sure nothing eats the exceptions (an unchecked eval in Storage::DESTROY used to be a problem) + { package Dying::Storage; @@ -21,53 +21,21 @@ use DBICTest::Schema; my $self = shift; my $death = $self->_dbi_connect_info->[3]{die}; - die $death if $death eq 'before_populate'; + die "storage test died: $death" if $death eq 'before_populate'; my $ret = $self->next::method (@_); - die $death if $death eq 'after_populate'; + die "storage test died: $death" if $death eq 'after_populate'; return $ret; } } -TODO: { -local $TODO = "I have no idea what is going on here... but it ain't right"; - for (qw/before_populate after_populate/) { - - throws_ok (sub { + dies_ok (sub { my $schema = DBICTest::Schema->clone; $schema->storage_type ('Dying::Storage'); $schema->connection (DBICTest->_database, { die => $_ }); $schema->storage->ensure_connected; - }, qr/$_/, "$_ exception found"); -} - + }, "$_ exception found"); } done_testing; - -__END__ -For reference - next::method goes to ::Storage::DBI::_populate_dbh -which is: - -sub _populate_dbh { - my ($self) = @_; - - my @info = @{$self->_dbi_connect_info || []}; - $self->_dbh(undef); # in case ->connected failed we might get sent here - $self->_dbh($self->_connect(@info)); - - $self->_conn_pid($$); - $self->_conn_tid(threads->tid) if $INC{'threads.pm'}; - - $self->_determine_driver; - - # Always set the transaction depth on connect, since - # there is no transaction in progress by definition - $self->{transaction_depth} = $self->_dbh_autocommit ? 0 : 1; - - $self->_run_connection_actions unless $self->{_in_determine_driver}; -} - -After further tracing it seems that if I die() before $self->_conn_pid($$) -the exception is propagated. If I die after it - it's lost. What The Fuck?!