Code

Fix calculation of extra-opts parameters.
[nagiosplug.git] / lib / tests / test_opts.c
1 /*****************************************************************************
2
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
7
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * GNU General Public License for more details.
12
13 * You should have received a copy of the GNU General Public License
14 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 * $Id: test_ini.c 1951 2008-03-16 18:10:47Z dermoth $
17
18 *****************************************************************************/
20 #include "common.h"
21 #include "utils_base.h"
22 #include "extra_opts.h"
24 #include "tap.h"
26 void my_free(int *argc, char **argv) {
27         int i;
28         printf ("    Arg(%i): ", *argc);
29         for (i=1; i<*argc; i++) printf ("'%s' ", argv[i]);
30         printf ("\n");
31         free(argv);
32         *argc=0;
33 }
35 int array_diff(int i1, char **a1, int i2, char **a2) {
36         int i;
38         if (i1 != i2) {
39                 printf("    Argument count doesn't match!\n");
40                 return 0;
41         }
42         for (i=0; i<=i1; i++) {
43                 if (a1[i]==NULL && a2[i]==NULL) continue;
44                 if (a1[i]==NULL || a2[i]==NULL) {
45                         printf("    Argument # %i null in one array!\n", i);
46                         return 0;
47                 }
48                 if (strcmp(a1[i], a2[i])) {
49                         printf("    Argument # %i doesn't match!\n", i);
50                         return 0;
51                 }
52         }
53         return 1;
54 }
56 int
57 main (int argc, char **argv)
58 {
59         char **argv_test=NULL, **argv_known=NULL;
60         int i, argc_test;
62         plan_tests(10);
64         argv_test=(char **)malloc(2*sizeof(char **));
65         argv_test[0] = "prog_name";
66         argv_test[1] = NULL;
67         argc_test=1;
68         argv_known=(char **)realloc(argv_known, 2*sizeof(char **));
69         argv_known[0] = "prog_name";
70         argv_known[1] = NULL;
71         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
72         ok(array_diff(argc_test, argv_test, 1, argv_known), "No opts, returns correct argv/argc");
73         my_free(&argc_test, argv_test);
75         argv_test=(char **)malloc(6*sizeof(char **));
76         argv_test[0] = "prog_name";
77         argv_test[1] = "arg1";
78         argv_test[2] = "--arg2=val1";
79         argv_test[3] = "--arg3";
80         argv_test[4] = "val2";
81         argv_test[5] = NULL;
82         argc_test=5;
83         argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
84         argv_known[0] = "prog_name";
85         argv_known[1] = "arg1";
86         argv_known[2] = "--arg2=val1";
87         argv_known[3] = "--arg3";
88         argv_known[4] = "val2";
89         argv_known[5] = NULL;
90         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
91         ok(array_diff(argc_test, argv_test, 5, argv_known), "No extra opts, verbatim copy of argv");
92         my_free(&argc_test,argv_test);
94         argv_test=(char **)malloc(3*sizeof(char **));
95         argv_test[0] = "prog_name";
96         argv_test[1] = "--extra-opts=@./config-opts.ini";
97         argv_test[2] = NULL;
98         argc_test=2;
99         argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
100         argv_known[0] = "prog_name";
101         argv_known[1] = "--foo=Bar";
102         argv_known[2] = "--this=Your Mother!";
103         argv_known[3] = "--blank";
104         argv_known[4] = NULL;
105         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
106         ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts using default section");
107         my_free(&argc_test,argv_test);
109         argv_test=(char **)malloc(5*sizeof(char **));
110         argv_test[0] = "prog_name";
111         argv_test[1] = "--extra-opts=sect1@./config-opts.ini";
112         argv_test[2] = "--extra-opts";
113         argv_test[3] = "sect2@./config-opts.ini";
114         argv_test[4] = NULL;
115         argc_test=4;
116         argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
117         argv_known[0] = "prog_name";
118         argv_known[1] = "--one=two";
119         argv_known[2] = "--something else=oops";
120         argv_known[3] = "--this=that";
121         argv_known[4] = NULL;
122         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
123         ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts specified twice");
124         my_free(&argc_test,argv_test);
126         argv_test=(char **)malloc(7*sizeof(char **));
127         argv_test[0] = "prog_name";
128         argv_test[1] = "--arg1=val1";
129         argv_test[2] = "--extra-opts=@./config-opts.ini";
130         argv_test[3] = "--extra-opts";
131         argv_test[4] = "sect1@./config-opts.ini";
132         argv_test[5] = "--arg2";
133         argv_test[6] = NULL;
134         argc_test=6;
135         argv_known=(char **)realloc(argv_known, 8*sizeof(char **));
136         argv_known[0] = "prog_name";
137         argv_known[1] = "--foo=Bar";
138         argv_known[2] = "--this=Your Mother!";
139         argv_known[3] = "--blank";
140         argv_known[4] = "--one=two";
141         argv_known[5] = "--arg1=val1";
142         argv_known[6] = "--arg2";
143         argv_known[7] = NULL;
144         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
145         ok(array_diff(argc_test, argv_test, 7, argv_known), "twice extra opts using two sections");
146         my_free(&argc_test,argv_test);
148         /* Next three checks are expected to die. They are commented out as they
149          * could possibly go in a sepatare test checked for return value.
150          */
151         /* argv_test=(char **)malloc(6*sizeof(char **));
152         argv_test[0] = "prog_name";
153         argv_test[1] = "arg1";
154         argv_test[2] = "--extra-opts=missing@./config-opts.ini";
155         argv_test[3] = "--arg3";
156         argv_test[4] = "val2";
157         argv_test[5] = NULL;
158         argc_test=5;
159         argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
160         argv_known[0] = "prog_name";
161         argv_known[1] = "arg1";
162         argv_known[2] = "--arg3";
163         argv_known[3] = "val2";
164         argv_known[4] = NULL;
165         argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
166         ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 1");
167         my_free(&argc_test,argv_test); */
169         /* argv_test=(char **)malloc(7*sizeof(char **));
170         argv_test[0] = "prog_name";
171         argv_test[1] = "arg1";
172         argv_test[2] = "--extra-opts";
173         argv_test[3] = "missing@./config-opts.ini";
174         argv_test[4] = "--arg3";
175         argv_test[5] = "val2";
176         argv_test[6] = NULL;
177         argc_test=6;
178         argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
179         argv_known[0] = "prog_name";
180         argv_known[1] = "arg1";
181         argv_known[2] = "--arg3";
182         argv_known[3] = "val2";
183         argv_known[4] = NULL;
184         argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
185         ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 2");
186         my_free(&argc_test,argv_test); */
188         /* argv_test=(char **)malloc(6*sizeof(char **));
189         argv_test[0] = "prog_name";
190         argv_test[1] = "arg1";
191         argv_test[2] = "--extra-opts";
192         argv_test[3] = "--arg3";
193         argv_test[4] = "val2";
194         argv_test[5] = NULL;
195         argc_test=5;
196         argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
197         argv_known[0] = "prog_name";
198         argv_known[1] = "arg1";
199         argv_known[2] = "--arg3";
200         argv_known[3] = "val2";
201         argv_known[4] = NULL;
202         argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
203         ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 3");
204         my_free(&argc_test,argv_test); */
206         setenv("NAGIOS_CONFIG_PATH", ".", 1);
207         argv_test=(char **)malloc(6*sizeof(char **));
208         argv_test[0] = "prog_name";
209         argv_test[1] = "arg1";
210         argv_test[2] = "--extra-opts";
211         argv_test[3] = "--arg3";
212         argv_test[4] = "val2";
213         argv_test[5] = NULL;
214         argc_test=5;
215         argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
216         argv_known[0] = "prog_name";
217         argv_known[1] = "--foo=bar";
218         argv_known[2] = "arg1";
219         argv_known[3] = "--arg3";
220         argv_known[4] = "val2";
221         argv_known[5] = NULL;
222         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
223         ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 1");
225         argv_test=(char **)malloc(3*sizeof(char **));
226         argv_test[0] = "prog_name";
227         argv_test[1] = "--extra-opts";
228         argv_test[2] = NULL;
229         argc_test=2;
230         argv_known=(char **)realloc(argv_known, 3*sizeof(char **));
231         argv_known[0] = "prog_name";
232         argv_known[1] = "--foo=bar";
233         argv_known[2] = NULL;
234         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
235         ok(array_diff(argc_test, argv_test, 2, argv_known), "Default section 2");
236         my_free(&argc_test,argv_test);
238         argv_test=(char **)malloc(6*sizeof(char **));
239         argv_test[0] = "prog_name";
240         argv_test[1] = "arg1";
241         argv_test[2] = "--extra-opts=section1";
242         argv_test[3] = "--arg3";
243         argv_test[4] = "val2";
244         argv_test[5] = NULL;
245         argc_test=5;
246         argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
247         argv_known[0] = "prog_name";
248         argv_known[1] = "--foobar=baz";
249         argv_known[2] = "arg1";
250         argv_known[3] = "--arg3";
251         argv_known[4] = "val2";
252         argv_known[5] = NULL;
253         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
254         ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 3");
255         my_free(&argc_test,argv_test);
257         argv_test=(char **)malloc(6*sizeof(char **));
258         argv_test[0] = "prog_name";
259         argv_test[1] = "arg1";
260         argv_test[2] = "--extra-opts";
261         argv_test[3] = "-arg3";
262         argv_test[4] = "val2";
263         argv_test[5] = NULL;
264         argc_test=5;
265         argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
266         argv_known[0] = "prog_name";
267         argv_known[1] = "--foo=bar";
268         argv_known[2] = "arg1";
269         argv_known[3] = "-arg3";
270         argv_known[4] = "val2";
271         argv_known[5] = NULL;
272         argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
273         ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 4");
274         my_free(&argc_test,argv_test);
276         argv_test=(char **)malloc(4*sizeof(char **));
277         argv_test[0] = "check_tcp";
278         argv_test[1] = "--extra-opts";
279         argv_test[2] = "--extra-opts=tcp_long_lines";
280         argv_test[3] = NULL;
281         argc_test=3;
282         argv_known=(char **)realloc(argv_known, 7*sizeof(char **));
283         argv_known[0] = "check_tcp";
284         argv_known[1] = "--timeout=10";
285         argv_known[2] = "--escape";
286         argv_known[3] = "--send=Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda";
287         argv_known[4] = "--expect=Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda Foo bar BAZ yadda yadda yadda";
288         argv_known[5] = "--jail";
289         argv_known[6] = NULL;
290         argv_test=np_extra_opts(&argc_test, argv_test, "check_tcp");
291         ok(array_diff(argc_test, argv_test, 6, argv_known), "Long lines test");
292         my_free(&argc_test,argv_test);
294         return exit_status();