Code

Update developer guideline regarding CVS Commits
[nagiosplug.git] / lib / tests / test_opts2.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 *****************************************************************************/
18 #include "common.h"
19 #include "utils_base.h"
20 #include "extra_opts.h"
22 #include "tap.h"
24 void my_free(int *argc, char **newargv, char **argv) {
25         /* Free stuff (and print while we're at it) */
26         int i, freeflag=1;
27         printf ("    Arg(%i): ", *argc+1);
28         printf ("'%s' ", newargv[0]);
29         for (i=1; i<*argc; i++) {
30                 printf ("'%s' ", newargv[i]);
31                 /* Stop freeing when we get to the start of the original array */
32                 if (freeflag) {
33                         if (newargv[i] == argv[1])
34                                 freeflag=0;
35                         else
36                                 free(newargv[i]);
37                 }
38         }
39         printf ("\n");
40         /* Free only if it's a different array */
41         if (newargv != argv) free(newargv);
42         *argc=0;
43 }
45 int array_diff(int i1, char **a1, int i2, char **a2) {
46         int i;
48         if (i1 != i2) {
49                 printf("    Argument count doesn't match!\n");
50                 return 0;
51         }
52         for (i=0; i<=i1; i++) {
53                 if (a1[i]==NULL && a2[i]==NULL) continue;
54                 if (a1[i]==NULL || a2[i]==NULL) {
55                         printf("    Argument # %i null in one array!\n", i);
56                         return 0;
57                 }
58                 if (strcmp(a1[i], a2[i])) {
59                         printf("    Argument # %i doesn't match!\n", i);
60                         return 0;
61                 }
62         }
63         return 1;
64 }
66 int
67 main (int argc, char **argv)
68 {
69         char **argv_new=NULL;
70         int i, argc_test;
72         plan_tests(5);
74         {
75                 char *argv_test[] = {"prog_name", "arg1", "--extra-opts", "--arg3", "val2", (char *) NULL};
76                 argc_test=5;
77                 char *argv_known[] = {"prog_name", "--foo=bar", "arg1", "--arg3", "val2", (char *) NULL};
78                 argv_new=np_extra_opts(&argc_test, argv_test, "check_disk");
79                 ok(array_diff(argc_test, argv_new, 5, argv_known), "Default section 1");
80                 my_free(&argc_test, argv_new, argv_test);
81         }
83         {
84                 char *argv_test[] = {"prog_name", "--extra-opts", (char *) NULL};
85                 argc_test=2;
86                 char *argv_known[] = {"prog_name", "--foo=bar", (char *) NULL};
87                 argv_new=np_extra_opts(&argc_test, argv_test, "check_disk");
88                 ok(array_diff(argc_test, argv_new, 2, argv_known), "Default section 2");
89                 my_free(&argc_test, argv_new, argv_test);
90         }
92         {
93                 char *argv_test[] = {"prog_name", "arg1", "--extra-opts=section1", "--arg3", "val2", (char *) NULL};
94                 argc_test=5;
95                 char *argv_known[] = {"prog_name", "--foobar=baz", "arg1", "--arg3", "val2", (char *) NULL};
96                 argv_new=np_extra_opts(&argc_test, argv_test, "check_disk");
97                 ok(array_diff(argc_test, argv_new, 5, argv_known), "Default section 3");
98                 my_free(&argc_test, argv_new, argv_test);
99         }
101         {
102                 char *argv_test[] = {"prog_name", "arg1", "--extra-opts", "-arg3", "val2", (char *) NULL};
103                 argc_test=5;
104                 char *argv_known[] = {"prog_name", "--foo=bar", "arg1", "-arg3", "val2", (char *) NULL};
105                 argv_new=np_extra_opts(&argc_test, argv_test, "check_disk");
106                 ok(array_diff(argc_test, argv_new, 5, argv_known), "Default section 4");
107                 my_free(&argc_test, argv_new, argv_test);
108         }
110         {
111                 char *argv_test[] = {"check_tcp", "--extra-opts", "--extra-opts=tcp_long_lines", (char *) NULL};
112                 argc_test=3;
113                 char *argv_known[] = {"check_tcp", "--timeout=10", "--escape", "--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", "--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", "--jail", (char *) NULL};
114                 argv_new=np_extra_opts(&argc_test, argv_test, "check_tcp");
115                 ok(array_diff(argc_test, argv_new, 6, argv_known), "Long lines test");
116                 my_free(&argc_test, argv_new, argv_test);
117         }
119         return exit_status();