Merge branch 'master' of gnunet.org:gnunet
[oweals/gnunet.git] / src / util / test_program.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2009 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14     
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18 /**
19  * @file util/test_program.c
20  * @brief tests for program.c
21  */
22 #include "platform.h"
23 #include "gnunet_util_lib.h"
24
25
26 static int setme1;
27
28 static int setme2;
29
30
31 /**
32  * Main function that will be run.
33  */
34 static void
35 runner (void *cls,
36         char *const *args,
37         const char *cfgfile,
38         const struct GNUNET_CONFIGURATION_Handle *cfg)
39 {
40   int *ok = cls;
41
42   GNUNET_assert (setme1 == 1);
43   GNUNET_assert (0 == strcmp (args[0], "extra"));
44   GNUNET_assert (args[1] == NULL);
45   GNUNET_assert (NULL != strstr (cfgfile, "/test_program_data.conf"));
46   *ok = 0;
47 }
48
49
50 int
51 main (int argc, char *argv[])
52 {
53   int ok = 1;
54   char *const argvx[] = {
55     "test_program",
56     "-c",
57     "test_program_data.conf",
58     "-L",
59     "WARNING",
60     "-n",
61     "extra",
62     NULL
63   };
64   struct GNUNET_GETOPT_CommandLineOption options1[] = {
65     GNUNET_GETOPT_option_flag ('n',
66                                   "name",
67                                   "description",
68                                   &setme1),
69     GNUNET_GETOPT_OPTION_END
70   };
71   struct GNUNET_GETOPT_CommandLineOption options2[] = {
72     GNUNET_GETOPT_option_flag ('n',
73                                   "name",
74                                   "description",
75                                   &setme1),
76     GNUNET_GETOPT_option_flag ('N',
77                                   "number",
78                                   "description",
79                                   &setme2),
80     GNUNET_GETOPT_OPTION_END
81   };
82   struct GNUNET_GETOPT_CommandLineOption options3[] = {
83     GNUNET_GETOPT_option_flag ('N',
84                                   "number",
85                                   "description",
86                                   &setme1),
87     GNUNET_GETOPT_option_flag ('n',
88                                   "name",
89                                   "description",
90                                   &setme2),
91     GNUNET_GETOPT_OPTION_END
92   };
93   struct GNUNET_GETOPT_CommandLineOption options4[] = {
94     GNUNET_GETOPT_option_flag ('n',
95                                   "name",
96                                   "description",
97                                   &setme1),
98     GNUNET_GETOPT_option_flag ('n',
99                                   "name",
100                                   "description",
101                                   &setme2),
102     GNUNET_GETOPT_OPTION_END
103   };
104
105
106   GNUNET_log_setup ("test_program",
107                     "WARNING",
108                     NULL);
109   GNUNET_assert (GNUNET_OK ==
110                  GNUNET_PROGRAM_run (7, argvx,
111                                      "test_program",
112                                      "A test",
113                                      options1,
114                                      &runner, &ok));
115
116   GNUNET_assert (GNUNET_OK ==
117                  GNUNET_PROGRAM_run (7, argvx,
118                                      "test_program", "A test",
119                                      options2,
120                                      &runner, &ok));
121   GNUNET_assert (GNUNET_OK ==
122                  GNUNET_PROGRAM_run (7, argvx,
123                                      "test_program", "A test",
124                                      options3,
125                                      &runner, &ok));
126   GNUNET_assert (GNUNET_OK ==
127                  GNUNET_PROGRAM_run (7, argvx,
128                                      "test_program", "A test",
129                                      options4,
130                                      &runner, &ok));
131
132   return ok;
133 }
134
135 /* end of test_program.c */