X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fbase.t;h=b4fd7892c8f363a70cea1c72916f0540f33aef65;hb=3cff955a7163e263490edecd0a1922aa5ee6c6db;hp=ab7e89ccf3fbffedfc23e36b152de2e3e90f51f0;hpb=444f799b93630ab056ac1bd110661f8fc3d7c033;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/base.t b/t/storage/base.t index ab7e89c..b4fd789 100644 --- a/t/storage/base.t +++ b/t/storage/base.t @@ -1,20 +1,24 @@ +BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) } + use strict; use warnings; use Test::More; use Test::Warn; use Test::Exception; -use lib qw(t/lib); + use DBICTest; use Data::Dumper; my $schema = DBICTest->init_schema( sqlite_use_file => 1 ); -is( ref($schema->storage), 'DBIx::Class::Storage::DBI::SQLite', - 'Storage reblessed correctly into DBIx::Class::Storage::DBI::SQLite' ); - my $storage = $schema->storage; -$storage->ensure_connected; + +is( + ref($storage), + 'DBIx::Class::Storage::DBI::SQLite', + 'Storage reblessed correctly into DBIx::Class::Storage::DBI::SQLite' +) unless $ENV{DBICTEST_VIA_REPLICATED}; throws_ok { $schema->storage->throw_exception('test_exception_42'); @@ -25,6 +29,34 @@ throws_ok { } qr/prepare_cached failed/, 'exception via DBI->HandleError, etc'; +# make sure repeated disconnection works +{ + my $fn = DBICTest->_sqlite_dbfilename; + + lives_ok { + $schema->storage->ensure_connected; + my $dbh = $schema->storage->dbh; + $schema->storage->disconnect for 1,2; + unlink $fn; + $dbh->disconnect; + }; + + lives_ok { + $schema->storage->ensure_connected; + $schema->storage->disconnect for 1,2; + unlink $fn; + $schema->storage->disconnect for 1,2; + }; + + lives_ok { + $schema->storage->ensure_connected; + $schema->storage->_dbh->disconnect; + unlink $fn; + $schema->storage->disconnect for 1,2; + }; +} + + # testing various invocations of connect_info ([ ... ]) my $coderef = sub { 42 }; @@ -147,33 +179,42 @@ for my $type (keys %$invocations) { } # make sure connection-less storages do not throw on _determine_driver -{ - local $ENV{DBI_DSN}; - local $ENV{DBI_DRIVER}; +# but work with ENV at the same time +SKIP: for my $env_dsn (undef, (DBICTest->_database)[0] ) { + + skip 'This set of tests relies on being connected to SQLite', 1 + if $env_dsn and $env_dsn !~ /\:SQLite\:/; - my $s = DBICTest::Schema->connect; + local $ENV{DBI_DSN} = $env_dsn || ''; + + my $s = DBICTest::Schema->connect(); is_deeply ( $s->storage->connect_info, [], - 'Starting with no connection info', + 'Starting with no explicitly passed in connect info' + . ($env_dsn ? ' (with DBI_DSN)' : ''), ); - isa_ok( - $s->storage->sql_maker, - 'DBIx::Class::SQLMaker', - 'Getting back an SQLMaker succesfully', - ); + my $sm = $s->storage->sql_maker; - ok (! $s->storage->_driver_determined, 'Driver undetermined'); + ok (! $s->storage->connected, 'Storage does not appear connected after SQLMaker instance is taken'); - ok (! $s->storage->connected, 'Storage does not appear connected'); + if ($env_dsn) { + isa_ok($sm, 'DBIx::Class::SQLMaker'); - throws_ok { - $s->storage->ensure_connected - } qr/You did not provide any connection_info/, - 'sensible exception on empty conninfo connect' + ok ( $s->storage->_driver_determined, 'Driver determined (with DBI_DSN)'); + isa_ok ( $s->storage, 'DBIx::Class::Storage::DBI::SQLite' ); + } + else { + isa_ok($sm, 'DBIx::Class::SQLMaker'); + + ok (! $s->storage->_driver_determined, 'Driver undetermined'); + + throws_ok { + $s->storage->ensure_connected + } qr/You did not provide any connection_info/, + 'sensible exception on empty conninfo connect'; + } } done_testing; - -1;