Test programs not build on 'make all'.
[egate.git] / res+log / gw-res-test.c
1 /*
2  * Copyright (c) 1995, the EUROPAGATE consortium (see below).
3  *
4  * The EUROPAGATE consortium members are:
5  *
6  *    University College Dublin
7  *    Danmarks Teknologiske Videnscenter
8  *    An Chomhairle Leabharlanna
9  *    Consejo Superior de Investigaciones Cientificas
10  *
11  * Permission to use, copy, modify, distribute, and sell this software and
12  * its documentation, in whole or in part, for any purpose, is hereby granted,
13  * provided that:
14  *
15  * 1. This copyright and permission notice appear in all copies of the
16  * software and its documentation. Notices of copyright or attribution
17  * which appear at the beginning of any file must remain unchanged.
18  *
19  * 2. The names of EUROPAGATE or the project partners may not be used to
20  * endorse or promote products derived from this software without specific
21  * prior written permission.
22  *
23  * 3. Users of this software (implementors and gateway operators) agree to
24  * inform the EUROPAGATE consortium of their use of the software. This
25  * information will be used to evaluate the EUROPAGATE project and the
26  * software, and to plan further developments. The consortium may use
27  * the information in later publications.
28  * 
29  * 4. Users of this software agree to make their best efforts, when
30  * documenting their use of the software, to acknowledge the EUROPAGATE
31  * consortium, and the role played by the software in their work.
32  *
33  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
34  * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
35  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
36  * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
37  * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
38  * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
39  * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
40  * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
41  * USE OR PERFORMANCE OF THIS SOFTWARE.
42  *
43  */
44 /*
45  * Test of resource management.
46  *
47  * Europagate, 1994-1995.
48  *
49  * $Log: gw-res-test.c,v $
50  * Revision 1.4  1995/05/16 09:40:49  adam
51  * LICENSE.
52  *
53  * Revision 1.3  1995/02/23  08:32:22  adam
54  * Changed header.
55  *
56  * Revision 1.1.1.1  1995/02/09  17:27:12  adam
57  * Initial version of email gateway under CVS control.
58  *
59  * Initial:       Dec  7, 94 (Adam Dickmeiss)
60  */
61
62 #include <stdio.h>
63 #include <stdlib.h>
64 #include <string.h>
65 #include <stdarg.h>
66
67 #include <gw-log.h>
68 #include <gw-res.h>
69
70 static GwRes res;
71
72 static void showf (const char *name, const char *value)
73 {
74     printf ("%s: %s\n", name, value);
75 }
76
77 static void interactive (void)
78 {
79     char buffer[128];
80     char arg[3][128];
81     int no_arg;
82     int r;
83
84     while (1)
85     {
86         char *cp;
87         const char *value;
88
89         putc ('>', stdout);
90         fflush (stdout);
91         if (!(fgets (buffer, sizeof(buffer)-1, stdin)))
92             break;
93         while ((cp = strchr (buffer, '\n')))
94             *cp = '\0';
95         if (*buffer == '\0')
96             continue;
97         no_arg = sscanf (buffer+1, "%s %s %s", arg[0], arg[1], arg[2]);
98         r = -10;
99         switch (*buffer)
100         {
101         case 'm':
102             if (no_arg == 1)
103                 r = gw_res_merge (res, arg[0]);
104             break;
105         case 'p':
106             if (no_arg == 3)
107                 r = gw_res_put (res, arg[0], arg[1], arg[2]);
108             break;
109         case 'g':
110             if (no_arg == 1)
111             {
112                 value = gw_res_get (res, arg[0], "<unknown>");
113                 printf ("%s has value `%s'\n", arg[0], value);
114                 r = 0;
115             }
116             break;
117         case 's':
118             if (no_arg == 1)
119                 r = gw_res_trav (res, arg[0], showf);
120             else if (no_arg <= 0)
121                 r = gw_res_trav (res, NULL, showf);
122             break;
123         case 'c':
124             if (no_arg == 1)
125                 r = gw_res_commit (res, arg[0]);
126             break;
127         case 'h':
128             printf ("m <file>                     merge\n"
129                     "g <name>                     get\n"
130                     "p <name> <value> <file>      put\n"
131                     "s [<file>]                   show\n"
132                     "c <file>                     commit\n"
133                     "q                            quit\n");
134             r = 0;
135             break;
136         case 'q':
137             return;
138         }
139         if (r == -10)
140             printf ("syntax, type 'h' for help\n");
141         else if (r)
142             printf ("returned %d\n", r);
143         else
144             printf ("ok\n");
145     }
146 }
147
148 static void do_intensive (void)
149 {
150     int i;
151     for (i = 0; i<100; i++)
152     {
153         const char *cp;
154         char new_val[12];
155         res = gw_res_init ();
156         
157         gw_res_merge (res, "big.res");
158         gw_res_merge (res, "default.res");
159         gw_res_merge (res, "adam.res");
160
161         cp = gw_res_get (res, "loopvar", "0");
162         sprintf (new_val, "%d", atoi(cp)+1);
163         gw_res_put (res, "loopvar", new_val, "big.res");
164
165         gw_res_commit (res, "big.res");
166         gw_res_close (res);
167     }
168 }
169
170 int main (int argc, char **argv)
171 {
172     gw_log_init (*argv);
173
174     while (--argc > 0)
175     {
176         if (**++argv == '-')
177         {
178             switch (*++*argv)
179             {
180             case 'd':
181                 gw_log_level (GW_LOG_ALL);
182                 continue;
183             case 't':
184                 do_intensive ();
185                 return 0;
186             default:
187                 gw_log (GW_LOG_FATAL, "Fatal", "Unknown option %s",
188                         *argv);
189                 exit (1);
190             }
191         }
192     }
193     gw_log_file (GW_LOG_ALL, "all.log");
194
195     res = gw_res_init ();
196
197     interactive ();
198
199     gw_res_close (res);
200     exit (0);
201 }