Added a reasonable test script: ztest.pl
[simpleserver-moved-to-github.git] / ztest.pl
1 #!/usr/bin/perl -w
2
3 use ExtUtils::testlib;
4 use Net::Z3950::SimpleServer;
5 use Net::Z3950::OID;
6 use strict;
7
8 sub my_init_handler {
9         my $args = shift;
10         my $session = {};
11
12         $args->{IMP_NAME} = "DemoServer";
13         $args->{IMP_VER} = "3.14159";
14         $args->{ERR_CODE} = 0;
15         $args->{HANDLE} = $session;
16 }
17
18 sub my_search_handler { 
19         my $args = shift;
20         my $data = [{
21                         name            =>      "Peter Dornan",
22                         title           =>      "Spokesman",
23                         collaboration   =>      "ATLAS"
24                     }, {
25                         name            =>      "Jorn Dines Hansen",
26                         title           =>      "Professor",
27                         collaboration   =>      "HERA-B"
28                     }, {
29                         name            =>      "Alain Blondel",
30                         title           =>      "Head of coll.",
31                         collaboration   =>      "ALEPH"
32                     }];
33
34         my $session = $args->{HANDLE};
35         my $set_id = $args->{SETNAME};
36         my @database_list = @{ $args->{DATABASES} };
37         my $query = $args->{QUERY};
38         my $hits = 3;
39
40         print "------------------------------------------------------------\n";
41         print "Processing query : $query\n";
42         printf("Database set     : %s\n", join(" ", @database_list));
43         print "Setname          : $set_id\n";
44         print "------------------------------------------------------------\n";
45
46         $args->{HITS} = $hits;
47         $session->{$set_id} = $data;
48         $session->{__HITS} = $hits;
49 }
50
51
52 sub my_fetch_handler {
53         my $args = shift;
54         my $session = $args->{HANDLE};
55         my $set_id = $args->{SETNAME};
56         my $data = $session->{$set_id};
57         my $offset = $args->{OFFSET};
58         my $record = "<xml>";
59         my $field;
60         my $hits = $session->{__HITS};
61         my $href = $data->[$offset];
62
63         $args->{REP_FORM} = Net::Z3950::OID::xml;
64
65         foreach $field (keys %$href) {
66                 $record .= "<" . $field . ">" . $href->{$field} . "</" . $field . ">";
67         }
68
69         $record .= "</xml>";
70         $args->{RECORD} = $record;
71         if ($offset == $session->{__HITS}) {
72                 $args->{LAST} = 1;
73         }
74 }
75
76
77 my $handler = Net::Z3950::SimpleServer->new({ 
78                 INIT    =>      \&my_init_handler,
79                 SEARCH  =>      \&my_search_handler,
80                 FETCH   =>      \&my_fetch_handler });
81
82 $handler->launch_server("ztest.pl", @ARGV);
83