Fix incorrect exception propagation in ::Replicated::execute_reliably
[dbsrgits/DBIx-Class.git] / t / storage / replicated.t
index 82c809d..59bf7e5 100644 (file)
@@ -1,3 +1,4 @@
+BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
 use DBIx::Class::Optional::Dependencies -skip_all_without => 'test_replicated';
 
 use strict;
@@ -5,7 +6,7 @@ use warnings;
 
 use Test::More;
 use DBIx::Class::_Util 'modver_gt_or_eq_and_lt';
-use lib qw(t/lib);
+
 use DBICTest;
 
 BEGIN {
@@ -18,14 +19,12 @@ BEGIN {
 
 use Test::Moose;
 use Test::Exception;
-use List::Util 'first';
 use Scalar::Util 'reftype';
-use File::Spec;
 use Moose();
 use MooseX::Types();
 note "Using Moose version $Moose::VERSION and MooseX::Types version $MooseX::Types::VERSION";
 
-my $var_dir = quotemeta ( File::Spec->catdir(qw/t var/) );
+my $var_dir_re = qr{ t [\/\\] var [\/\\] }x;
 
 ## Add a connect_info option to test option merging.
 use DBIx::Class::Storage::DBI::Replicated;
@@ -156,8 +155,8 @@ TESTSCHEMACLASSES: {
 
         $self->master_path( DBICTest->_sqlite_dbfilename );
         $self->slave_paths([
-            File::Spec->catfile(qw/t var DBIxClass_slave1.db/),
-            File::Spec->catfile(qw/t var DBIxClass_slave2.db/),
+            't/var/DBIxClass_slave1.db',
+            't/var/DBIxClass_slave2.db',
         ]);
 
         return $self;
@@ -375,7 +374,7 @@ ok @replicant_names, "found replicant names @replicant_names";
 ## Silence warning about not supporting the is_replicating method if using the
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
-  if first { $_ =~ /$var_dir/ } @replicant_names;
+  if grep { $_ =~ $var_dir_re } @replicant_names;
 
 isa_ok $replicated->schema->storage->balancer->current_replicant
     => 'DBIx::Class::Storage::DBI';
@@ -423,7 +422,7 @@ $replicated->schema->storage->replicants->{$replicant_names[1]}->active(1);
 ## Silence warning about not supporting the is_replicating method if using the
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
-  if first { $_ =~ /$var_dir/ } @replicant_names;
+  if grep { $_ =~ $var_dir_re } @replicant_names;
 
 $replicated->schema->storage->pool->validate_replicants;
 
@@ -606,7 +605,7 @@ $replicated->schema->storage->replicants->{$replicant_names[1]}->active(1);
 ## Silence warning about not supporting the is_replicating method if using the
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
-  if first { $_ =~ /$var_dir/ } @replicant_names;
+  if grep { $_ =~ $var_dir_re } @replicant_names;
 
 $replicated->schema->storage->pool->validate_replicants;
 
@@ -710,9 +709,19 @@ ok my $reliably = sub {
     is $debug{storage_type}, 'MASTER',
         "got last query from a master: $debug{dsn}";
 
+    $_[1] = 9;
+
 } => 'created coderef properly';
 
-$replicated->schema->storage->execute_reliably($reliably);
+my @list_to_mangle = (1, 2, 3);
+
+$replicated->schema->storage->execute_reliably($reliably, @list_to_mangle);
+
+is_deeply
+  \@list_to_mangle,
+  [ 1, 9, 3],
+  'Aliasing of values passed to execute_reliably works'
+;
 
 ## Try something with an error
 
@@ -727,6 +736,12 @@ throws_ok {$replicated->schema->storage->execute_reliably($unreliably)}
     qr/Can't find source for ArtistXX/
     => 'Bad coderef throws proper error';
 
+throws_ok {
+  $replicated->schema->storage->execute_reliably(sub{
+    die bless [], 'SomeExceptionThing';
+  });
+} 'SomeExceptionThing', "Blessed exception kept intact";
+
 ## Make sure replication came back
 
 ok $replicated->schema->resultset('Artist')->find(3)