add .cvsignore
[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 dump_hash {
9         my $href = shift;
10         my $key;
11
12         foreach $key (keys %$href) {
13                 printf("%10s    =>      %s\n", $key, $href->{$key});
14         }
15 }
16
17
18 sub my_init_handler {
19         my $args = shift;
20         my $session = {};
21
22         $args->{IMP_NAME} = "DemoServer";
23         $args->{IMP_VER} = "3.14159";
24         $args->{ERR_CODE} = 0;
25         $args->{HANDLE} = $session;
26         if (defined($args->{PASS}) && defined($args->{USER})) {
27             printf("Received USER/PASS=%s/%s\n", $args->{USER},$args->{PASS});
28         }
29             
30 }
31
32 sub my_scan_handler {
33         my $args = shift;
34         my $term = $args->{TERM};
35         my $entries = [
36                                 {       TERM            =>      'Number 1',
37                                         OCCURRENCE      =>      10 },
38                                 {       TERM            =>      'Number 2',
39                                         OCCURRENCE      =>      8 },
40                                 {       TERM            =>      'Number 3',
41                                         OCCURRENCE      =>      8 },
42                                 {       TERM            =>      'Number 4',
43                                         OCCURRENCE      =>      8 },
44                                 {       TERM            =>      'Number 5',
45                                         OCCURRENCE      =>      8 },
46                                 {       TERM            =>      'Number 6',
47                                         OCCURRENCE      =>      8 },
48                                 {       TERM            =>      'Number 7',
49                                         OCCURRENCE      =>      8 },
50                                 {       TERM            =>      'Number 8',
51                                         OCCURRENCE      =>      8 },
52                                 {       TERM            =>      'Number 9',
53                                         OCCURRENCE      =>      8 },
54                                 {       TERM            =>      'Number 10',
55                                         OCCURRENCE      =>      4 },
56                         ];
57         $args->{NUMBER} = 10;
58         $args->{ENTRIES} = $entries;
59         $args->{STATUS} = Net::Z3950::SimpleServer::ScanPartial;
60         print "Welcome to scan....\n";
61         print "You scanned for term '$term'\n";
62 }
63
64
65 sub my_search_handler { 
66         my $args = shift;
67         my $data = [{
68                         name            =>      "Peter Dornan",
69                         title           =>      "Spokesman",
70                         collaboration   =>      "ATLAS"
71                     }, {
72                         name            =>      "Jorn Dines Hansen",
73                         title           =>      "Professor",
74                         collaboration   =>      "HERA-B"
75                     }, {
76                         name            =>      "Alain Blondel",
77                         title           =>      "Head of coll.",
78                         collaboration   =>      "ALEPH"
79                     }];
80
81         my $session = $args->{HANDLE};
82         my $set_id = $args->{SETNAME};
83         my @database_list = @{ $args->{DATABASES} };
84         my $query = $args->{QUERY};
85         my $hits = 3;
86
87         print "------------------------------------------------------------\n";
88         print "Processing query : $query\n";
89         printf("Database set     : %s\n", join(" ", @database_list));
90         print "Setname          : $set_id\n";
91         print "------------------------------------------------------------\n";
92
93         $args->{HITS} = $hits;
94         $session->{$set_id} = $data;
95         $session->{__HITS} = $hits;
96 }
97
98
99 sub my_fetch_handler {
100         my $args = shift;
101         my $session = $args->{HANDLE};
102         my $set_id = $args->{SETNAME};
103         my $data = $session->{$set_id};
104         my $offset = $args->{OFFSET};
105         my $record = "<xml>";
106         my $field;
107         my $hits = $session->{__HITS};
108         my $href = $data->[$offset - 1];
109
110         $args->{REP_FORM} = Net::Z3950::OID::xml;
111         foreach $field (keys %$href) {
112                 $record .= "<" . $field . ">" . $href->{$field} . "</" . $field . ">";
113         }
114
115         $record .= "</xml>";
116         $args->{RECORD} = $record;
117         if ($offset == $session->{__HITS}) {
118                 $args->{LAST} = 1;
119         }
120 }
121
122
123 my $handler = new Net::Z3950::SimpleServer( 
124                 INIT    =>      \&my_init_handler,
125                 SEARCH  =>      \&my_search_handler,
126                 SCAN    =>      \&my_scan_handler,
127                 FETCH   =>      \&my_fetch_handler );
128
129 $handler->launch_server("ztest.pl", @ARGV);
130
131
132 ## $Log: ztest.pl,v $
133 ## Revision 1.11  2002-09-16 13:55:53  sondberg
134 ## Added support for authentication into SimpleServer.
135 ##
136 ## Revision 1.10  2001/08/30 13:15:11  sondberg
137 ## Corrected a memory leak, one more to go.
138 ##
139 ## Revision 1.9  2001/08/29 11:48:36  sondberg
140 ## Added routines
141 ##
142 ##      Net::Z3950::SimpleServer::ScanSuccess
143 ##      Net::Z3950::SimpleServer::ScanPartial
144 ##
145 ## and a bit of documentation.
146 ##
147 ## Revision 1.8  2001/08/24 14:00:20  sondberg
148 ## Added support for scan.
149 ##
150 ## Revision 1.7  2001/03/13 14:20:21  sondberg
151 ## Added CVS logging
152 ##
153