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