2 * This file is part of buxton.
4 * Copyright (C) 2013 Intel Corporation
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.
17 #include <iniparser.h>
18 #include <linux/limits.h>
24 #include "configurator.h"
27 #error "re-run configure with --enable-debug"
30 static void fail_strne(const char *value, char *correct_value, bool casecmp)
35 snprintf(buf, sizeof(buf), "%s was not %s", value, correct_value);
37 ret = strcasecmp(value, correct_value);
39 ret = strcmp(value, correct_value);
40 fail_unless(ret == 0, buf);
43 static void fail_ne(int a, int b)
45 fail_unless(a == b, "%d is not %d", a, b);
48 static void default_test(const char *value, char *correct_value, char *symbolname)
52 snprintf(buf, sizeof(buf), "%s returned null!", symbolname);
53 fail_if(value == NULL, buf);
55 snprintf(buf, sizeof(buf), "%s was not %s", value, correct_value);
56 fail_strne(value, correct_value, true);
59 START_TEST(configurator_default_module_dir)
61 default_test(buxton_module_dir(), (char*)_MODULE_DIRECTORY, "buxton_module_dir()");
65 START_TEST(configurator_default_conf_file)
67 default_test(buxton_conf_file(), (char*)_DEFAULT_CONFIGURATION_FILE, "buxton_conf_file()");
71 START_TEST(configurator_default_db_path)
73 default_test(buxton_db_path(), (char*)_DB_PATH, "buxton_db_path()");
77 START_TEST(configurator_default_smack_load_file)
79 default_test(buxton_smack_load_file(), (char*)_SMACK_LOAD_FILE, "buxton_smack_load_file()");
83 START_TEST(configurator_default_buxton_socket)
85 default_test(buxton_socket(), (char*)_BUXTON_SOCKET, "buxton_socket()");
90 START_TEST(configurator_env_conf_file)
92 putenv("BUXTON_CONF_FILE=/nonexistant/buxton.conf");
93 default_test(buxton_conf_file(), "/nonexistant/buxton.conf", "buxton_conf_file()");
97 START_TEST(configurator_env_module_dir)
99 putenv("BUXTON_MODULE_DIR=/nonexistant/buxton/plugins");
100 default_test(buxton_module_dir(), "/nonexistant/buxton/plugins", "buxton_module_dir()");
104 START_TEST(configurator_env_db_path)
106 putenv("BUXTON_DB_PATH=/nonexistant/buxton.db");
107 default_test(buxton_db_path(), "/nonexistant/buxton.db", "buxton_db_path()");
111 START_TEST(configurator_env_smack_load_file)
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()");
118 START_TEST(configurator_env_buxton_socket)
120 putenv("BUXTON_BUXTON_SOCKET=/nonexistant/buxton_socket");
121 default_test(buxton_socket(), "/nonexistant/buxton_socket", "buxton_socket()");
126 START_TEST(configurator_cmd_conf_file)
128 char *correct = "herpyderpy";
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()");
136 START_TEST(configurator_cmd_module_dir)
138 char *correct = "herpyderpy";
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()");
146 START_TEST(configurator_cmd_db_path)
148 char *correct = "herpyderpy";
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()");
156 START_TEST(configurator_cmd_smack_load_file)
158 char *correct = "herpyderpy";
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()");
166 START_TEST(configurator_cmd_buxton_socket)
168 char *correct = "herpyderpy";
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()");
177 START_TEST(configurator_conf_db_path)
179 char *correct = "/you/are/so/suck";
181 putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
182 default_test(buxton_db_path(), correct, "buxton_db_path()");
186 START_TEST(configurator_conf_smack_load_file)
188 char *correct = "/smack/smack/smack";
190 putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
191 default_test(buxton_smack_load_file(), correct, "smack_load_file()");
195 START_TEST(configurator_conf_buxton_socket)
197 char *correct = "/hurp/durp/durp";
199 putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
200 default_test(buxton_socket(), correct, "buxton_socket()");
204 START_TEST(configurator_conf_module_dir)
206 char *correct = "/shut/your/mouth";
208 putenv("BUXTON_CONF_FILE=" ABS_TOP_SRCDIR "/test/test-configurator.conf");
209 default_test(buxton_module_dir(), correct, "buxton_module_dir()");
213 START_TEST(configurator_get_layers)
215 ConfigLayer *layers = NULL;
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);
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);
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);
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);
248 START_TEST(ini_parse_check)
250 char ini_good[] = "test/test-pass.ini";
251 char ini_bad[] = "test/test-fail.ini";
252 dictionary *ini = NULL;
254 ini = iniparser_load(ini_good);
256 "Failed to parse ini file");
258 iniparser_dump(ini, stdout);
259 iniparser_freedict(ini);
261 ini = iniparser_load(ini_bad);
263 "Failed to catch bad ini file");
265 iniparser_dump(ini, stdout);
266 iniparser_freedict(ini);
271 configurator_suite(void)
276 s = suite_create("configurator");
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);
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);
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);
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);
309 tc = tcase_create("config file works");
310 tcase_add_test(tc, configurator_get_layers);
311 suite_add_tcase(s, tc);
313 tc = tcase_create("ini_functions");
314 tcase_add_test(tc, ini_parse_check);
315 suite_add_tcase(s, tc);
326 s = configurator_suite();
327 sr = srunner_create(s);
328 srunner_run_all(sr, CK_VERBOSE);
329 number_failed = srunner_ntests_failed(sr);
332 return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
336 * Editor modelines - http://www.wireshark.org/tools/modelines.html
341 * indent-tabs-mode: t
344 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
345 * :indentSize=8:tabSize=8:noTabs=false: