X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F72pg.t;h=623a5a14127dce00d3ef81c9b21b5a06f3a44487;hb=2c2bc4e58c2146670960fc1a0a2ae802cb650506;hp=c02a5e32f98449b3f243bb15809b4309036eeee6;hpb=5f35ba0fbddfcfe22694f8deff22da4db4f01846;p=dbsrgits%2FDBIx-Class.git diff --git a/t/72pg.t b/t/72pg.t index c02a5e3..623a5a1 100644 --- a/t/72pg.t +++ b/t/72pg.t @@ -4,10 +4,12 @@ use warnings; use Test::More; use Test::Exception; use Sub::Name; +use Config; use DBIx::Class::Optional::Dependencies (); use lib qw(t/lib); use DBICTest; -use DBIx::Class::_Util 'is_literal_value'; +use SQL::Abstract 'is_literal_value'; +use DBIx::Class::_Util 'is_exception'; plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_rdbms_pg') unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_rdbms_pg'); @@ -26,11 +28,12 @@ EOM ### load any test classes that are defined further down in the file via BEGIN blocks our @test_classes; #< array that will be pushed into by test classes defined in this file +require DBICTest::Schema; DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_classes; ### pre-connect tests (keep each test separate as to make sure rebless() runs) { - my $s = DBICTest::Schema->connect($dsn, $user, $pass); + my $s = DBICTest->connect_schema($dsn, $user, $pass); ok (!$s->storage->_dbh, 'definitely not connected'); @@ -52,7 +55,7 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class } { - my $s = DBICTest::Schema->connect($dsn, $user, $pass); + my $s = DBICTest->connect_schema($dsn, $user, $pass); # make sure sqlt_type overrides work (::Storage::DBI::Pg does this) ok (!$s->storage->_dbh, 'definitely not connected'); is ($s->storage->sqlt_type, 'PostgreSQL', 'sqlt_type correct pre-connection'); @@ -61,7 +64,7 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class # test LIMIT support { - my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + my $schema = DBICTest->connect_schema($dsn, $user, $pass); drop_test_schema($schema); create_test_schema($schema); for (1..6) { @@ -93,14 +96,14 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class # check if we indeed do support stuff my $test_server_supports_insert_returning = do { - my $si = DBICTest::Schema->connect($dsn, $user, $pass)->storage->_server_info; + my $si = DBICTest->connect_schema($dsn, $user, $pass)->storage->_server_info; die "Unparseable Pg server version: $si->{dbms_version}\n" unless $si->{normalized_dbms_version}; $si->{normalized_dbms_version} < 8.002 ? 0 : 1; }; is ( - DBICTest::Schema->connect($dsn, $user, $pass)->storage->_use_insert_returning, + DBICTest->connect_schema($dsn, $user, $pass)->storage->_use_insert_returning, $test_server_supports_insert_returning, 'insert returning capability guessed correctly' ); @@ -121,7 +124,7 @@ for my $use_insert_returning ($test_server_supports_insert_returning ### test capability override { - my $s = DBICTest::Schema->connect($dsn, $user, $pass); + my $s = DBICTest->connect_schema($dsn, $user, $pass); ok (!$s->storage->_dbh, 'definitely not connected'); @@ -134,7 +137,7 @@ for my $use_insert_returning ($test_server_supports_insert_returning ### connect, create postgres-specific test schema - $schema = DBICTest::Schema->connect($dsn, $user, $pass); + $schema = DBICTest->connect_schema($dsn, $user, $pass); $schema->storage->ensure_connected; drop_test_schema($schema); @@ -339,14 +342,9 @@ my $cds = $artist->cds_unordered->search({ lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; ## Test SELECT ... FOR UPDATE - SKIP: { - if(eval { require Sys::SigAction }) { - Sys::SigAction->import( 'set_sig_handler' ); - } - else { - skip "Sys::SigAction is not available", 6; - } + skip "Your system does not support unsafe signals (d_sigaction) - unable to run deadlock test", 1 + unless eval { $Config{d_sigaction} and require POSIX }; my ($timed_out, $artist2); @@ -369,7 +367,7 @@ lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; }, ) { # create a new schema - my $schema2 = DBICTest::Schema->connect($dsn, $user, $pass); + my $schema2 = DBICTest->connect_schema($dsn, $user, $pass); $schema2->source("Artist")->name("dbic_t_schema.artist"); $schema->txn_do( sub { @@ -385,15 +383,28 @@ lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; is($artist->artistid, 1, "select returns artistid = 1"); $timed_out = 0; + eval { - my $h = set_sig_handler( 'ALRM', sub { die "DBICTestTimeout" } ); + # can not use %SIG assignment directly - we need sigaction below + # localization to a block still works however + local $SIG{ALRM}; + + POSIX::sigaction( POSIX::SIGALRM() => POSIX::SigAction->new( + sub { die "DBICTestTimeout" }, + )); + alarm(2); $artist2 = $schema2->resultset('Artist')->find(1); $artist2->name('fooey'); $artist2->update; - alarm(0); }; - $timed_out = $@ =~ /DBICTestTimeout/; + + alarm(0); + + if (is_exception($@)) { + $timed_out = $@ =~ /DBICTestTimeout/ + or die $@; + } }); $t->{test_sub}->();