X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F93storage_replication.t;h=f6d2be67d9189cae50eb57335cc2a008e69b91e0;hb=6412a5927691e6b8e3370edeb06ed3ef79c757b3;hp=161013b5fd6c3831c9e79781810cbcdbe5382694;hpb=f15afa13598dd767ba9547328a31d4b98313a896;p=dbsrgits%2FDBIx-Class.git diff --git a/t/93storage_replication.t b/t/93storage_replication.t index 161013b..f6d2be6 100644 --- a/t/93storage_replication.t +++ b/t/93storage_replication.t @@ -4,12 +4,13 @@ use lib qw(t/lib); use Test::More; use Test::Exception; use DBICTest; +use List::Util 'first'; BEGIN { eval "use DBIx::Class::Storage::DBI::Replicated; use Test::Moose"; plan $@ ? ( skip_all => "Deps not installed: $@" ) - : ( tests => 79 ); + : ( tests => 82 ); } use_ok 'DBIx::Class::Storage::DBI::Replicated::Pool'; @@ -124,9 +125,20 @@ TESTSCHEMACLASSES: { "dbi:SQLite:${_}"; } @{$self->slave_paths}; - return map { [$_,'','',{AutoCommit=>1}] } @dsn; + my @connect_infos = map { [$_,'','',{AutoCommit=>1}] } @dsn; + + # try a hashref too + my $c = $connect_infos[0]; + $connect_infos[0] = { + dsn => $c->[0], + user => $c->[1], + password => $c->[2], + %{ $c->[3] } + }; + + @connect_infos } - + ## Do a 'good enough' replication by copying the master dbfile over each of ## the slave dbfiles. If the master is SQLite we do this, otherwise we ## just do a one second pause to let the slaves catch up. @@ -211,10 +223,28 @@ ok my @replicant_connects = $replicated->generate_replicant_connect_info ok my @replicated_storages = $replicated->schema->storage->connect_replicants(@replicant_connects) => 'Created some storages suitable for replicants'; - + +ok my @all_storages = $replicated->schema->storage->all_storages + => '->all_storages'; + +ok @all_storages == 3 + => 'correct number of ->all_storages'; + +ok ((grep $_->isa('DBIx::Class::Storage::DBI'), @all_storages) == 3 + => '->all_storages are correct type'); + +my @replicant_names = keys %{ $replicated->schema->storage->replicants }; + +## Silence warning about not supporting the is_replicating method if using the +## sqlite dbs. +$replicated->schema->storage->debugobj->silence(1) + if first { m{^t/} } @replicant_names; + isa_ok $replicated->schema->storage->balancer->current_replicant - => 'DBIx::Class::Storage::DBI'; - + => 'DBIx::Class::Storage::DBI'; + +$replicated->schema->storage->debugobj->silence(0); + ok $replicated->schema->storage->pool->has_replicants => 'does have replicants'; @@ -227,8 +257,6 @@ does_ok $replicated_storages[0] does_ok $replicated_storages[1] => 'DBIx::Class::Storage::DBI::Replicated::Replicant'; -my @replicant_names = keys %{$replicated->schema->storage->replicants}; - does_ok $replicated->schema->storage->replicants->{$replicant_names[0]} => 'DBIx::Class::Storage::DBI::Replicated::Replicant'; @@ -249,8 +277,16 @@ $replicated $replicated->replicate; $replicated->schema->storage->replicants->{$replicant_names[0]}->active(1); $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 { m{^t/} } @replicant_names; + $replicated->schema->storage->pool->validate_replicants; +$replicated->schema->storage->debugobj->silence(0); + ## Make sure we can read the data. ok my $artist1 = $replicated->schema->resultset('Artist')->find(4) @@ -312,7 +348,7 @@ is $artist3->name, "Dead On Arrival" => 'Found expected name for first result'; is $replicated->schema->storage->pool->connected_replicants => 1 - => "One replicant reconnected to handle the job"; + => "At Least One replicant reconnected to handle the job"; ## What happens when we try to select something that doesn't exist? @@ -350,14 +386,27 @@ ok $replicated->schema->resultset('Artist')->find(2) $replicated->schema->storage->replicants->{$replicant_names[0]}->active(0); $replicated->schema->storage->replicants->{$replicant_names[1]}->active(0); - + +## Silence warning about falling back to master. +$replicated->schema->storage->debugobj->silence(1); + ok $replicated->schema->resultset('Artist')->find(2) => 'Fallback to master'; +$replicated->schema->storage->debugobj->silence(0); + $replicated->schema->storage->replicants->{$replicant_names[0]}->active(1); $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 { m{^t/} } @replicant_names; + $replicated->schema->storage->pool->validate_replicants; +$replicated->schema->storage->debugobj->silence(0); + ok $replicated->schema->resultset('Artist')->find(2) => 'Returned to replicates'; @@ -577,9 +626,3 @@ ok $replicated->schema->resultset('Artist')->find(1) ## Delete the old database files $replicated->cleanup; - - - - - -