From: Mike Taylor Date: Fri, 8 Dec 2006 11:57:51 +0000 (+0000) Subject: Instead of a single search, a sequence of searches are now run X-Git-Tag: CPAN-v1.02~54^2~640 X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=commitdiff_plain;h=18c0310db8963cf138e1802d7405827c76685956 Instead of a single search, a sequence of searches are now run sequentially until we get one that finds one or more records. This enables us to test for records in, for example, indexdata.com/marc, which previously got zero hits and then gave up. So far, there is only one fallback query, but more can be added trivially. Also arranged for the last retrieval callback to return TEST_GOOD rather than TASK_DONE, which makes no real difference but is more polite. --- diff --git a/lib/ZOOM/IRSpy/Test/Record/Fetch.pm b/lib/ZOOM/IRSpy/Test/Record/Fetch.pm index c6b489f..bd4c8c4 100644 --- a/lib/ZOOM/IRSpy/Test/Record/Fetch.pm +++ b/lib/ZOOM/IRSpy/Test/Record/Fetch.pm @@ -1,4 +1,4 @@ -# $Id: Fetch.pm,v 1.16 2006-11-29 11:06:29 mike Exp $ +# $Id: Fetch.pm,v 1.17 2006-12-08 11:57:51 mike Exp $ # See the "Main" test package for documentation @@ -12,6 +12,14 @@ use ZOOM::IRSpy::Test; our @ISA = qw(ZOOM::IRSpy::Test); +# These queries +my @queries = ( + "\@attr 1=4 mineral", + "\@attr 1=4 computer", + ### We can add more queries here + ); + + sub start { my $class = shift(); my($conn) = @_; @@ -19,7 +27,7 @@ sub start { # Here I want to get a use attribute from the session, which we've # managed to search for in the Search/Bib1 or Search/Dan1 tests. # But how? So far we search for title: 1=4 - $conn->irspy_search_pqf("\@attr 1=4 mineral", {}, {}, + $conn->irspy_search_pqf($queries[0], { queryindex => 0 }, {}, ZOOM::Event::RECV_SEARCH, \&completed_search, exception => \&error); } @@ -30,7 +38,19 @@ sub completed_search { my $n = $task->{rs}->size(); $conn->log("irspy_test", "Fetch test search found $n records"); - return ZOOM::IRSpy::Status::TEST_SKIPPED if $n == 0; + if ($n == 0) { + my $n = $udata->{queryindex}+1; + my $q = $queries[$n]; + if (defined $q) { + $conn->log("irspy_test", "Trying another search ..."); + $conn->irspy_search_pqf($queries[$n], { queryindex => $n }, {}, + ZOOM::Event::RECV_SEARCH, \&completed_search, + exception => \&error); + return ZOOM::IRSpy::Status::TASK_DONE; + } else { + return ZOOM::IRSpy::Status::TEST_SKIPPED; + } + } my @syntax = ( 'canmarc', @@ -54,9 +74,11 @@ sub completed_search { 'xml' ); #@syntax = qw(grs-1 sutrs usmarc xml); # simplify for debugging - foreach my $syntax (@syntax) { + foreach my $i (0 ..$#syntax) { + my $syntax = $syntax[$i]; $conn->irspy_rs_record($task->{rs}, 0, - { syntax => $syntax }, + { syntax => $syntax, + last => ($i == $#syntax) }, { start => 0, count => 1, preferredRecordSyntax => $syntax }, ZOOM::Event::RECV_RECORD, \&record, @@ -68,8 +90,8 @@ sub completed_search { sub record { - my($conn, $task, $test_args, $event) = @_; - my $syn = $test_args->{'syntax'}; + my($conn, $task, $udata, $event) = @_; + my $syn = $udata->{'syntax'}; my $rs = $task->{rs}; my $record = _fetch_record($rs, 0, $syn); @@ -92,7 +114,9 @@ sub record { 'syntax' => $syn, 'ok' => $ok); - return ZOOM::IRSpy::Status::TASK_DONE; + return ($udata->{last} ? + ZOOM::IRSpy::Status::TEST_GOOD : + ZOOM::IRSpy::Status::TASK_DONE); }