- my @syntax = ( 'canmarc',
- 'danmarc',
- 'grs-1',
- 'ibermarc',
- 'intermarc',
- 'jpmarc',
- 'librismarc',
- 'mab',
- 'normarc',
- 'opac',
- 'picamarc',
- 'rusmarc',
- 'summary',
- 'sutrs',
- 'swemarc',
- 'ukmarc',
- 'unimarc',
- 'usmarc',
- 'xml'
- );
-
- foreach my $syn (@syntax) {
- $conn->option('preferredRecordSyntax' => $syn);
- $conn->option('start' => 0);
- $conn->option('count' => 1);
-
- ## 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",
- {'syntax' => $syn},
- ZOOM::Event::RECV_RECORD, \&record,
- exception => \&error);
+
+ $conn->irspy_search_pqf($queries[0], { queryindex => 0 }, {},
+ ZOOM::Event::ZEND, \&completed_search,
+ exception => \&completed_search);
+}
+
+
+sub completed_search {
+ my($conn, $task, $udata, $event) = @_;
+
+ my $n = $task->{rs}->size();
+ $conn->log("irspy_test", "Fetch test search (", $task->render_query(), ") ",
+ ref $event && $event->isa("ZOOM::Exception") ?
+ "failed: $event" : "found $n records (event=$event)");
+
+ # remember how often a target record hit a timeout
+ if (ref $event && $event->isa("ZOOM::Exception")) {
+ if ($event =~ /Timeout/i) {
+ $conn->record->zoom_error->{TIMEOUT}++;
+ $conn->log("irspy_test", "Increase timeout error counter to: " .
+ $conn->record->zoom_error->{TIMEOUT});
+ }
+ }
+
+ if ($n == 0) {
+ $task->{rs}->destroy();
+ my $qindex = $udata->{queryindex}+1;
+ my $q = $queries[$qindex];
+ return ZOOM::IRSpy::Status::TEST_SKIPPED
+ if !defined $q || $conn->record->zoom_error->{TIMEOUT} >= $max_timeout_errors;
+
+ $conn->log("irspy_test", "Trying another search ...");
+ $conn->irspy_search_pqf($queries[$qindex], { queryindex => $qindex }, {},
+ ZOOM::Event::ZEND, \&completed_search,
+ exception => \&completed_search);
+ return ZOOM::IRSpy::Status::TASK_DONE;
+ }
+
+ foreach my $i (0 ..$#syntax) {
+ my $syntax = $syntax[$i];
+ $conn->irspy_rs_record($task->{rs}, 0,
+ { syntax => $syntax,
+ last => ($i == $#syntax) },
+ { start => 0, count => 1,
+ preferredRecordSyntax => $syntax },
+ ZOOM::Event::ZEND, \&record,
+ exception => \&fetch_error);