X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fdebug.t;h=6d8e94cf89aee57a630658e5b74387c1ceccc962;hb=67341081b1a57cc8549e51a8fb1b8cd4661543c5;hp=480ad6e06876c71a04a6ab47db5dd462ddb73a66;hpb=c9d29bb255e00c9c734edfc9634b3ff24ad621ba;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/debug.t b/t/storage/debug.t index 480ad6e..6d8e94c 100644 --- a/t/storage/debug.t +++ b/t/storage/debug.t @@ -1,46 +1,64 @@ use strict; -use warnings; +use warnings; +no warnings 'once'; use Test::More; +use Test::Exception; use lib qw(t/lib); use DBICTest; use DBIC::DebugObj; use DBIC::SqlMakerTest; use Path::Class qw/file/; +BEGIN { delete @ENV{qw(DBIC_TRACE DBIC_TRACE_PROFILE DBICTEST_SQLITE_USE_FILE)} } + my $schema = DBICTest->init_schema(); +my $lfn = file("t/var/sql-$$.log"); +unlink $lfn or die $! + if -e $lfn; -ok ( $schema->storage->debug(1), 'debug' ); -$schema->storage->debugfh(file('t/var/sql.log')->openw); +# make sure we are testing the vanilla debugger and not ::PrettyPrint +$schema->storage->debugobj(DBIx::Class::Storage::Statistics->new); +ok ( $schema->storage->debug(1), 'debug' ); +$schema->storage->debugfh($lfn->openw); $schema->storage->debugfh->autoflush(1); -my $rs = $schema->resultset('CD')->search({}); -$rs->count(); +$schema->resultset('CD')->count; -my $log = file('t/var/sql.log')->openr; -my $line = <$log>; -$log->close(); -ok($line =~ /^SELECT COUNT/, 'Log success'); +my @loglines = $lfn->slurp; +is (@loglines, 1, 'one line of log'); +like($loglines[0], qr/^SELECT COUNT/, 'File log via debugfh success'); $schema->storage->debugfh(undef); -$ENV{'DBIC_TRACE'} = '=t/var/foo.log'; -$rs = $schema->resultset('CD')->search({}); -$rs->count(); -$log = file('t/var/foo.log')->openr; -$line = <$log>; -$log->close(); -ok($line =~ /^SELECT COUNT/, 'Log success'); -$schema->storage->debugobj->debugfh(undef); -delete($ENV{'DBIC_TRACE'}); + +{ + local $ENV{DBIC_TRACE} = "=$lfn"; + unlink $lfn; + + $schema->resultset('CD')->count; + + my $schema2 = DBICTest->init_schema(no_deploy => 1); + $schema2->storage->_do_query('SELECT 1'); # _do_query() logs via standard mechanisms + + my @loglines = $lfn->slurp; + is(@loglines, 2, '2 lines of log'); + like($loglines[0], qr/^SELECT COUNT/, 'Env log from schema1 success'); + like($loglines[1], qr/^SELECT 1:/, 'Env log from schema2 success'); + + $schema->storage->debugobj->debugfh(undef) +} + +END { + unlink $lfn; +} + open(STDERRCOPY, '>&STDERR'); -stat(STDERRCOPY); # nop to get warnings quiet close(STDERR); -eval { - $rs = $schema->resultset('CD')->search({}); - $rs->count(); -}; -ok($@, 'Died on closed FH'); +dies_ok { + $schema->resultset('CD')->search({})->count; +} 'Died on closed FH'; + open(STDERR, '>&STDERRCOPY'); # test trace output correctness for bind params @@ -51,7 +69,7 @@ open(STDERR, '>&STDERRCOPY'); my @cds = $schema->resultset('CD')->search( { artist => 1, cdid => { -between => [ 1, 3 ] }, } ); is_same_sql_bind( $sql, \@bind, - "SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE ( artist = ? AND (cdid BETWEEN ? AND ?) ): '1', '1', '3'", + "SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE ( artist = ? AND (cdid BETWEEN ? AND ?) )", [qw/'1' '1' '3'/], 'got correct SQL with all bind parameters (debugcb)' );