[Bioperl-l] Tests involving remote databases

Chris Fields cjfields at uiuc.edu
Sat Sep 30 05:01:06 UTC 2006

I'm not sure how Bio::Root::HTTPget deals with errors, but you can  
test for several conditions when using LWP (success, error, etc) and  
throw an error accordingly.  So you could possibly test $@ with a  
regex for the error message, pass/fail tests based on that, followed  
by skipping further tests.  Test::More has like/unlike to deal with  
that; you could use plain regex using Test.pm.

   skip('Set BIOPERLDEBUG=1 to run tests which require remote DB  
access', 5)
       if !$DEBUG;
   my $db = Bio::DB::GenBank->new();
   my $seq;
   eval { $seq = $db->get_Seq_by_acc('ABC123')};
   if ($@) {
       # test to make sure the URL is unreachable
       like{$@, qr{bad hostname}, 'URL test'};
       # must skip tests regardless, anyway
       skip('Bio::DB::GenBank URL problem', 4);
   } else {
       ok(!$@, 'Bio::DB::GenBank URL test');
   ... # four more tests based on $seq

Caveat: haven't tried the above in the real world, but it should work.

Having a set of instructions for tests is a good idea, maybe  
something for the wiki and developers, similar to Torsten's Best  
Practices page.  Working code from tests would be a good start.


On Sep 29, 2006, at 3:40 PM, Hilmar Lapp wrote:
> Can we include a library function (or instructions) somewhere to  
> use for test writers that will determine based on the error string  
> whether merely the network is out or whether the URL is unreachable  
> (supposedly because it's wrong).
> 	-hilmar
> On Sep 29, 2006, at 12:44 PM, Chris Fields wrote:
>> Sendu, all,
>> We're running into several problems with tests being skipped based  
>> on URL
>> failure but passing as 'ok'.  Two incidents involving XEMBL_DB.t and
>> Biblio_biofetch.t come to mind, and recent problems have now  
>> surfaced with
>> proxies (thanks Torsten!).
>> As one option, I would like to propose using the following SKIP  
>> block format
>> (or something similar) and Test::More to run checks on remote DB's  
>> in the
>> various tests where remote DB access is required.  There are probably
>> similar ways to accomplish the same thing using Test, but I believe
>> Test::More makes it easier.
>> SKIP:{
>>   skip('Set BIOPERLDEBUG=1 to run tests which require remote DB  
>> access', 5)
>>       if !$DEBUG;
>>   my $db = Bio::DB::GenBank->new();
>>   my $seq;
>>   eval { $seq = $db->get_Seq_by_acc('ABC123')};
>>   ok(!$@, 'Bio::DB::GenBank URL test');
>>   skip('Bio::DB::GenBank URL failure', 4) if $@;
>>   ... # four more tests based on $seq
>> }
>> Most of us do not run each set of tests individually unless we are
>> developing code that relies on a specific set.  Most often, when  
>> we run all
>> of the tests we use 'make test' and Test::Harness, which treats  
>> skipped
>> tests as 'ok.'
>> So, in effect, we never see any URL failure, just that all tests  
>> pass.  This
>> practice isn't used by other CPAN modules.  WWW::Shorten, for  
>> instance, runs
>> tests on all URLs and fails if they are invalid.  If we did the  
>> same thing,
>> we would have picked up on the following almost immediately when  
>> running
>> full tests:
>> 1)  The XEMBL server has been out for over six months.
>> 2)  The Biblio_biofetch.t tests probably never worked correctly,  
>> judging by
>> recent fixes (thanks Brian).
>> However, we would never had known that if we relied strictly on  
>> the summary
>> results from running 'make test.'  Blindly skipping these doesn't  
>> inform us
>> when the URL is invalid, and so we never manage to address the  
>> issue when it
>> pops up.  Explicit and consistent test failures let us know when  
>> things go
>> wrong (i.e. when the URL is no longer valid).
>> Furthermore, the debugging output that accompanies the tests when  
>> using
>> BIOPERLDEBUG=1 obfuscates any potential error messages, so we tend  
>> to miss
>> warning flags that pop up (such as the biblio_biofetch.t warning  
>> message
>> about the bad URL).  Torsten has a proposal that we use a  
>> different variable
>> for running remote DB tests, which IMHO we should consider and  
>> which should
>> take care of this.
>> Setting these to run based on BIOPERLDEBUG=1 also passes over the  
>> remote
>> tests for most users, which shouldn't cause a problem with  
>> spamming the
>> servers.
>> Thoughts?  Flames?
>> Chris
>> Christopher Fields
>> Postdoctoral Researcher - Switzer Lab
>> Dept. of Biochemistry
>> University of Illinois Urbana-Champaign
>> _______________________________________________
>> Bioperl-l mailing list
>> Bioperl-l at lists.open-bio.org
>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
> -- 
> ===========================================================
> : Hilmar Lapp  -:-  Durham, NC  -:-  hlapp at gmx dot net :
> ===========================================================

Christopher Fields
Postdoctoral Researcher
Lab of Dr. Robert Switzer
Dept of Biochemistry
University of Illinois Urbana-Champaign

More information about the Bioperl-l mailing list