First functional Bath test.
authorMike Taylor <mike@miketaylor.org.uk>
Mon, 7 Jun 2010 17:04:05 +0000 (18:04 +0100)
committerMike Taylor <mike@miketaylor.org.uk>
Mon, 7 Jun 2010 17:04:05 +0000 (18:04 +0100)
lib/ZOOM/IRSpy/Test/Search/Bath.pm [new file with mode: 0644]

diff --git a/lib/ZOOM/IRSpy/Test/Search/Bath.pm b/lib/ZOOM/IRSpy/Test/Search/Bath.pm
new file mode 100644 (file)
index 0000000..ad2321a
--- /dev/null
@@ -0,0 +1,84 @@
+# This tests the main searches specified The Bath Profile, Release 2.0, 
+#      http://www.collectionscanada.gc.ca/bath/tp-bath2-e.htm
+# Specifically section 5.A.0 ("Functional Area A: Level 0 Basic
+# Bibliographic Search and Retrieval") the its subsections.
+
+package ZOOM::IRSpy::Test::Search::Bath;
+
+use 5.008;
+use strict;
+use warnings;
+
+use ZOOM::IRSpy::Test;
+our @ISA = qw(ZOOM::IRSpy::Test);
+
+use ZOOM::IRSpy::Utils qw(isodate);
+
+
+my @bath_queries = (
+    [ author => 1003 ],        # 5.A.0.1
+    [ title => 4 ],    # 5.A.0.2
+    [ subject => 21 ], # 5.A.0.3
+    [ any => 1016 ],   # 5.A.0.4
+    );
+
+
+sub start {
+    my $class = shift();
+    my($conn) = @_;
+
+    start_search($conn, 0);
+}
+
+
+sub start_search {
+    my($conn, $qindex) = @_;
+
+    return ZOOM::IRSpy::Status::TEST_GOOD
+       if $qindex >= @bath_queries;
+
+    my $ref = $bath_queries[$qindex];
+    my($name, $use_attr) = @$ref;
+
+    my $query = "\@attr 1=$use_attr \@attr 2=3 \@attr 3=3 \@attr 4=2 \@attr 5=100 \@attr 6=1 the";
+    $conn->irspy_search_pqf($query, { qindex => $qindex }, {},
+                           ZOOM::Event::ZEND, \&found,
+                           "exception", \&error);
+    return ZOOM::IRSpy::Status::TASK_DONE;
+}
+
+
+sub found {
+    my($conn, $task, $udata, $event) = @_;
+
+    my $qindex = $udata->{qindex};
+    my $ref = $bath_queries[$qindex];
+    my($name, $use_attr) = @$ref;
+
+    my $n = $task->{rs}->size();
+
+    $conn->log("irspy_test",
+              "bath search #$qindex ('$name') found $n record",
+              $n==1 ? "" : "s");
+    my $rec = $conn->record();
+    $rec->append_entry("irspy:status",
+                      "<irspy:search_bath name='$name' ok='1'>" .
+                      isodate(time()) . "</irspy:search_bath>");
+
+    return start_search($conn, $qindex+1);
+}
+
+
+sub error {
+    my($conn, $task, $udata, $exception) = @_;
+
+    $conn->log("irspy_test", "bath search had error: $exception");
+    my $rec = $conn->record();
+    $rec->append_entry("irspy:status", "<irspy:search_bath ok='0'>" .
+                      isodate(time()) . "</irspy:search_bath>");
+    zoom_error_timeout_update($conn, $exception);
+    return ZOOM::IRSpy::Status::TASK_DONE;
+}
+
+
+1;