tizen 2.3 release
[external/buxton.git] / test / check_configurator.c
1 /*
2  * This file is part of buxton.
3  *
4  * Copyright (C) 2013 Intel Corporation
5  *
6  * buxton is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1
9  * of the License, or (at your option) any later version.
10  */
11
12 #ifdef HAVE_CONFIG_H
13         #include "config.h"
14 #endif
15
16 #include <check.h>
17 #include <iniparser.h>
18 #include <linux/limits.h>
19 #include <stdio.h>
20 #include <stdbool.h>
21 #include <stdlib.h>
22 #include <unistd.h>
23
24 #include "configurator.h"
25
26 #ifdef NDEBUG
27         #error "re-run configure with --enable-debug"
28 #endif
29
30 static void fail_strne(const char *value, char *correct_value, bool casecmp)
31 {
32         char buf[PATH_MAX];
33         int ret;
34
35         snprintf(buf, sizeof(buf), "%s was not %s", value, correct_value);
36         if (casecmp)
37                 ret = strcasecmp(value, correct_value);
38         else
39                 ret = strcmp(value, correct_value);
40         fail_unless(ret == 0, buf);
41 }
42
43 static void fail_ne(int a, int b)
44 {
45         fail_unless(a == b, "%d is not %d", a, b);
46 }
47
48 static void default_test(const char *value, char *correct_value, char *symbolname)
49 {
50         char buf[PATH_MAX];
51
52         snprintf(buf, sizeof(buf), "%s returned null!", symbolname);
53         fail_if(value == NULL, buf);
54
55         snprintf(buf, sizeof(buf), "%s was not %s", value, correct_value);
56         fail_strne(value, correct_value, true);
57 }
58
59 START_TEST(configurator_default_module_dir)
60 {
61         default_test(buxton_module_dir(), (char*)_MODULE_DIRECTORY, "buxton_module_dir()");
62 }
63 END_TEST
64
65 START_TEST(configurator_default_conf_file)
66 {
67         default_test(buxton_conf_file(), (char*)_DEFAULT_CONFIGURATION_FILE, "buxton_conf_file()");
68 }
69 END_TEST
70
71 START_TEST(configurator_default_db_path)
72 {
73         default_test(buxton_db_path(), (char*)_DB_PATH, "buxton_db_path()");
74 }
75 END_TEST
76
77 START_TEST(configurator_default_smack_load_file)
78 {
79         default_test(buxton_smack_load_file(), (char*)_SMACK_LOAD_FILE, "buxton_smack_load_file()");
80 }
81 END_TEST
82
83 START_TEST(configurator_default_buxton_socket)
84 {
85         default_test(buxton_socket(), (char*)_BUXTON_SOCKET, "buxton_socket()");
86 }
87 END_TEST
88
89
90 START_TEST(configurator_env_conf_file)
91 {
92         putenv("BUXTON_CONF_FILE=/nonexistant/buxton.conf");
93         default_test(buxton_conf_file(), "/nonexistant/buxton.conf", "buxton_conf_file()");
94 }
95 END_TEST
96
97 START_TEST(configurator_env_module_dir)
98 {
99         putenv("BUXTON_MODULE_DIR=/nonexistant/buxton/plugins");
100         default_test(buxton_module_dir(), "/nonexistant/buxton/plugins", "buxton_module_dir()");
101 }
102 END_TEST
103
104 START_TEST(configurator_env_db_path)
105 {
106         putenv("BUXTON_DB_PATH=/nonexistant/buxton.db");
107         default_test(buxton_db_path(), "/nonexistant/buxton.db", "buxton_db_path()");
108 }
109 END_TEST
110
111 START_TEST(configurator_env_smack_load_file)
112 {
113         putenv("BUXTON_SMACK_LOAD_FILE=/nonexistant/smack_load_file");
114         default_test(buxton_smack_load_file(), "/nonexistant/smack_load_file", "buxton_smack_load_file()");
115 }
116 END_TEST
117
118 START_TEST(configurator_env_buxton_socket)
119 {
120         putenv("BUXTON_BUXTON_SOCKET=/nonexistant/buxton_socket");
121         default_test(buxton_socket(), "/nonexistant/buxton_socket", "buxton_socket()");
122 }
123 END_TEST
124
125
126 START_TEST(configurator_cmd_conf_file)
127 {
128         char *correct = "herpyderpy";
129
130         buxton_add_cmd_line(CONFIG_CONF_FILE, correct);
131         putenv("BUXTON_CONF_FILE=/nonexistant/buxton.conf");
132         default_test(buxton_conf_file(), correct, "buxton_conf_file()");
133 }
134 END_TEST
135
136 START_TEST(configurator_cmd_module_dir)
137 {
138         char *correct = "herpyderpy";
139
140         buxton_add_cmd_line(CONFIG_MODULE_DIR, correct);
141         putenv("BUXTON_MODULE_DIR=/nonexistant/buxton/plugins");
142         default_test(buxton_module_dir(), correct, "buxton_module_dir()");
143 }
144 END_TEST
145
146 START_TEST(configurator_cmd_db_path)
147 {
148         char *correct = "herpyderpy";
149
150         buxton_add_cmd_line(CONFIG_DB_PATH, correct);
151         putenv("BUXTON_DB_PATH=/nonexistant/buxton.db");
152         default_test(buxton_db_path(), correct, "buxton_db_path()");
153 }
154 END_TEST
155
156 START_TEST(configurator_cmd_smack_load_file)
157 {
158         char *correct = "herpyderpy";
159
160         buxton_add_cmd_line(CONFIG_SMACK_LOAD_FILE, correct);
161         putenv("BUXTON_SMACK_LOAD_FILE=/nonexistant/smack_load_file");
162         default_test(buxton_smack_load_file(), correct, "buxton_smack_load_file()");
163 }
164 END_TEST
165
166 START_TEST(configurator_cmd_buxton_socket)
167 {
168         char *correct = "herpyderpy";
169
170         buxton_add_cmd_line(CONFIG_BUXTON_SOCKET, correct);
171         putenv("BUXTON_BUXTON_SOCKET=/nonexistant/buxton_socket");
172         default_test(buxton_socket(), correct, "buxton_socket()");
173 }
174 END_TEST
175
176
177 START_TEST(configurator_conf_db_path)
178 {
179         char *correct = "/you/are/so/suck";
180
181         putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
182         default_test(buxton_db_path(), correct, "buxton_db_path()");
183 }
184 END_TEST
185
186 START_TEST(configurator_conf_smack_load_file)
187 {
188         char *correct = "/smack/smack/smack";
189
190         putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
191         default_test(buxton_smack_load_file(), correct, "smack_load_file()");
192 }
193 END_TEST
194
195 START_TEST(configurator_conf_buxton_socket)
196 {
197         char *correct = "/hurp/durp/durp";
198
199         putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
200         default_test(buxton_socket(), correct, "buxton_socket()");
201 }
202 END_TEST
203
204 START_TEST(configurator_conf_module_dir)
205 {
206         char *correct = "/shut/your/mouth";
207
208         putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
209         default_test(buxton_module_dir(), correct, "buxton_module_dir()");
210 }
211 END_TEST
212
213 START_TEST(configurator_get_layers)
214 {
215         ConfigLayer *layers = NULL;
216         int numlayers;
217
218         putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
219         numlayers = buxton_key_get_layers(&layers);
220         fail_if(layers == NULL, "buxton_key_get_layers returned NULL");
221         fail_if(numlayers != 7, "num layers is %d instead of %d", numlayers, 7);
222
223         fail_strne(layers[0].name, "base", false);
224         fail_strne(layers[0].type, "System", false);
225         fail_strne(layers[0].backend, "gdbm", false);
226         fail_strne(layers[0].description, "Operating System configuration layer", false);
227         fail_ne(layers[0].priority, 0);
228
229         fail_strne(layers[1].name, "isp", false);
230         fail_strne(layers[1].type, "System", false);
231         fail_strne(layers[1].backend, "gdbm", false);
232         fail_strne(layers[1].description, "ISP specific settings", false);
233         fail_ne(layers[1].priority, 1);
234
235         /* ... */
236
237         fail_strne(layers[6].name, "test-gdbm-user", false);
238         fail_strne(layers[6].type, "User", false);
239         fail_strne(layers[6].backend, "gdbm", false);
240         fail_strne(layers[6].description, "GDBM test db for user", false);
241         fail_ne(layers[6].priority, 6000);
242
243
244
245 }
246 END_TEST
247
248 START_TEST(ini_parse_check)
249 {
250         char ini_good[] = "test/test-pass.ini";
251         char ini_bad[] = "test/test-fail.ini";
252         dictionary *ini = NULL;
253
254         ini = iniparser_load(ini_good);
255         fail_if(ini == NULL,
256                 "Failed to parse ini file");
257
258         iniparser_dump(ini, stdout);
259         iniparser_freedict(ini);
260
261         ini = iniparser_load(ini_bad);
262         fail_if(ini != NULL,
263                 "Failed to catch bad ini file");
264
265         iniparser_dump(ini, stdout);
266         iniparser_freedict(ini);
267 }
268 END_TEST
269
270 static Suite *
271 configurator_suite(void)
272 {
273         Suite *s;
274         TCase *tc;
275
276         s = suite_create("configurator");
277
278         tc = tcase_create("compilation defaults");
279         tcase_add_test(tc, configurator_default_conf_file);
280         tcase_add_test(tc, configurator_default_module_dir);
281         tcase_add_test(tc, configurator_default_db_path);
282         tcase_add_test(tc, configurator_default_smack_load_file);
283         tcase_add_test(tc, configurator_default_buxton_socket);
284         suite_add_tcase(s, tc);
285
286         tc = tcase_create("env clobbers defaults");
287         tcase_add_test(tc, configurator_env_conf_file);
288         tcase_add_test(tc, configurator_env_module_dir);
289         tcase_add_test(tc, configurator_env_db_path);
290         tcase_add_test(tc, configurator_env_smack_load_file);
291         tcase_add_test(tc, configurator_env_buxton_socket);
292         suite_add_tcase(s, tc);
293
294         tc = tcase_create("command line clobbers all");
295         tcase_add_test(tc, configurator_cmd_conf_file);
296         tcase_add_test(tc, configurator_cmd_module_dir);
297         tcase_add_test(tc, configurator_cmd_db_path);
298         tcase_add_test(tc, configurator_cmd_smack_load_file);
299         tcase_add_test(tc, configurator_cmd_buxton_socket);
300         suite_add_tcase(s, tc);
301
302         tc = tcase_create("config file works");
303         tcase_add_test(tc, configurator_conf_module_dir);
304         tcase_add_test(tc, configurator_conf_db_path);
305         tcase_add_test(tc, configurator_conf_smack_load_file);
306         tcase_add_test(tc, configurator_conf_buxton_socket);
307         suite_add_tcase(s, tc);
308
309         tc = tcase_create("config file works");
310         tcase_add_test(tc, configurator_get_layers);
311         suite_add_tcase(s, tc);
312
313         tc = tcase_create("ini_functions");
314         tcase_add_test(tc, ini_parse_check);
315         suite_add_tcase(s, tc);
316
317         return s;
318 }
319
320 int main(void)
321 {
322         int number_failed;
323         Suite *s;
324         SRunner *sr;
325
326         s = configurator_suite();
327         sr = srunner_create(s);
328         srunner_run_all(sr, CK_VERBOSE);
329         number_failed = srunner_ntests_failed(sr);
330         srunner_free(sr);
331
332         return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
333 }
334
335 /*
336  * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
337  *
338  * Local variables:
339  * c-basic-offset: 8
340  * tab-width: 8
341  * indent-tabs-mode: t
342  * End:
343  *
344  * vi: set shiftwidth=8 tabstop=8 noexpandtab:
345  * :indentSize=8:tabSize=8:noTabs=false:
346  */