Fixed bug in sort for unset entries at end of sort file.
[idzebra-moved-to-github.git] / test / testclient.c
1 /*
2  * $Id: testclient.c,v 1.8 2002-12-10 12:54:24 adam Exp $
3  *
4  * Z39.50 client specifically for Zebra testing.
5  */
6
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <yaz/xmalloc.h>
10 #include <yaz/options.h>
11 #include <yaz/zoom.h>
12
13 char *prog = "testclient";
14
15 int main(int argc, char **argv)
16 {
17     ZOOM_connection z;
18     ZOOM_resultset r;
19     int error;
20     const char *errmsg, *addinfo;
21     char *query = 0;
22     char *target = 0;
23     char *arg;
24     int delay_sec = 0;
25     int expected_hits=-1;
26     int ret;
27     int retrieve_number = 0;
28     int retrieve_offset = 0;
29     char *format = 0;
30     int pos;
31     int check_count = -1;
32     int exit_code = 0;
33
34     while ((ret = options("d:n:o:f:c:", argv, argc, &arg)) != -2)
35     {
36         switch (ret)
37         {
38         case 0:
39             if (!target)
40                 target = xstrdup(arg);
41             else if (!query)
42                 query = xstrdup(arg);
43             break;
44         case 'd':
45             delay_sec = atoi(arg);
46             break;
47         case 'n':
48             retrieve_number = atoi(arg);
49             break;
50         case 'o':
51             retrieve_offset = atoi(arg);
52             break;
53         case 'f':
54             format = xstrdup(arg);
55             break;
56         case 'c':
57             check_count = atoi(arg);
58             break;
59         default:
60             printf ("%s: unknown option %s\n", prog, arg);
61             printf ("usage:\n%s [options] target query \n", prog);
62             printf (" eg.  indexdata.dk/gils computer\n");
63             exit (1);
64         }
65     }
66
67     if (!target || !target)
68     {
69         printf ("%s: missing target/query\n", prog);
70         printf ("usage:\n%s [options] target query \n", prog);
71         printf (" eg.  bagel.indexdata.dk/gils computer\n");
72         printf ("Options:\n");
73         printf (" -n num       number of records to fetch. Default: 0.\n");
74         printf (" -o off       offset for records - counting from 0.\n");
75         printf (" -f format    set record syntax. Default: none\n");
76         printf (" -d sec       delay a number of seconds before exit.\n");
77         exit (3);
78     }
79     z = ZOOM_connection_new (target, 0);
80     
81     if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
82     {
83         printf ("Error: %s (%d) %s\n", errmsg, error, addinfo);
84         exit (2);
85     }
86
87     r = ZOOM_connection_search_pqf (z, query);
88     if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
89     {
90         printf ("Error: %s (%d) %s\n", errmsg, error, addinfo);
91         if (check_count != -1)
92             exit_code = 10;
93     }
94     else
95     {
96         printf ("Result count: %d\n", ZOOM_resultset_size(r));
97         if (check_count != -1 && check_count != ZOOM_resultset_size(r))
98         {
99             printf("Wrong number of hits, expected %d, got %d\n",
100                             expected_hits, ZOOM_resultset_size(r) );
101             exit(3);
102         }
103     }
104     if (format)
105         ZOOM_resultset_option_set(r, "preferredRecordSyntax", format);
106     for (pos = 0; pos < retrieve_number; pos++)
107     {
108         size_t len;
109         const char *rec =
110             ZOOM_record_get(
111                 ZOOM_resultset_record(r, pos + retrieve_offset),
112                 "render", &len);
113         
114         if (rec)
115             fwrite (rec, 1, len, stdout);
116     }
117     if (delay_sec > 0)
118         sleep(delay_sec);
119     ZOOM_resultset_destroy (r);
120     ZOOM_connection_destroy (z);
121     exit (exit_code);
122 }