exit(EXIT_FAILURE);
}
+#ifndef CHECK_VNSTAT
if (!db_close() || !db_open_rw(0)) {
printf("Error: Handling database \"%s/%s\" failing: %s\n", cfg.dbdir, DATABASEFILE, strerror(errno));
exit(EXIT_FAILURE);
}
+#endif
if (db_removeinterface(p->interface)) {
printf("Interface \"%s\" removed from database.\n", p->interface);
printf("The interface will no longer be monitored. Use --add\n");
printf("if monitoring the interface is again needed.\n");
+ db_close();
exit(EXIT_SUCCESS);
} else {
printf("Error: Removing interface \"%s\" from database failed.\n", p->interface);
exit(EXIT_FAILURE);
}
+#ifndef CHECK_VNSTAT
if (!db_close() || !db_open_rw(0)) {
printf("Error: Handling database \"%s/%s\" failing: %s\n", cfg.dbdir, DATABASEFILE, strerror(errno));
exit(EXIT_FAILURE);
}
+#endif
if (db_renameinterface(p->interface, p->newifname)) {
printf("Interface \"%s\" has been renamed \"%s\".\n", p->interface, p->newifname);
+ db_close();
exit(EXIT_SUCCESS);
} else {
printf("Error: Renaming interface \"%s\" -> \"%s\" failed.\n", p->interface, p->newifname);
exit(EXIT_FAILURE);
}
+#ifndef CHECK_VNSTAT
if (!db_close() || !db_open_rw(0)) {
printf("Error: Handling database \"%s/%s\" failing: %s\n", cfg.dbdir, DATABASEFILE, strerror(errno));
exit(EXIT_FAILURE);
}
+#endif
printf("Adding interface \"%s\" for monitoring to database...\n", p->interface);
if (db_addinterface(p->interface)) {
printf("\nRestart the vnStat daemon if it is currently running in order to start monitoring \"%s\".\n", p->interface);
+ db_close();
exit(EXIT_SUCCESS);
} else {
printf("Error: Adding interface \"%s\" to database failed.\n", p->interface);
exit(EXIT_FAILURE);
}
+#ifndef CHECK_VNSTAT
if (!db_close() || !db_open_rw(0)) {
printf("Error: Handling database \"%s/%s\" failing: %s\n", cfg.dbdir, DATABASEFILE, strerror(errno));
exit(EXIT_FAILURE);
}
+#endif
if (db_setalias(p->interface, p->alias)) {
printf("Alias of interface \"%s\" set to \"%s\".\n", p->interface, p->alias);
+ db_close();
exit(EXIT_SUCCESS);
} else {
printf("Error: Setting interface \"%s\" alias failed.\n", p->interface);
#include "vnstat_tests.h"
#include "vnstat_func.h"
#include "cfg.h"
+#include "dbsql.h"
#include "cli_tests.h"
START_TEST(vnstat_can_init_params)
}
END_TEST
+START_TEST(vnstat_handleremoveinterface_does_nothing_when_nothing_needs_to_be_removed)
+{
+ PARAMS p;
+ initparams(&p);
+
+ handleremoveinterface(&p);
+}
+END_TEST
+
+START_TEST(vnstat_handleremoveinterface_exits_if_no_interface_has_been_specified)
+{
+ PARAMS p;
+ initparams(&p);
+ p.removeiface = 1;
+
+ handleremoveinterface(&p);
+}
+END_TEST
+
+START_TEST(vnstat_handleremoveinterface_exits_if_given_interface_does_not_exist)
+{
+ int ret;
+ PARAMS p;
+
+ defaultcfg();
+ initparams(&p);
+ p.removeiface = 1;
+ p.defaultiface = 0;
+ strncpy_nt(p.interface, "unknown", 32);
+
+ ret = db_open_rw(1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addinterface("known");
+ ck_assert_int_eq(ret, 1);
+
+ handleremoveinterface(&p);
+}
+END_TEST
+
+START_TEST(vnstat_handleremoveinterface_exits_if_force_is_not_used)
+{
+ int ret;
+ PARAMS p;
+
+ defaultcfg();
+ initparams(&p);
+ p.removeiface = 1;
+ p.defaultiface = 0;
+ p.force = 0;
+ strncpy_nt(p.interface, "known", 32);
+
+ ret = db_open_rw(1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addinterface("known");
+ ck_assert_int_eq(ret, 1);
+
+ handleremoveinterface(&p);
+}
+END_TEST
+
+START_TEST(vnstat_handleremoveinterface_exits_after_interface_removal)
+{
+ int ret;
+ PARAMS p;
+
+ defaultcfg();
+ initparams(&p);
+ p.removeiface = 1;
+ p.defaultiface = 0;
+ p.force = 1;
+ strncpy_nt(p.interface, "known", 32);
+
+ ret = db_open_rw(1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addinterface("known");
+ ck_assert_int_eq(ret, 1);
+
+ handleremoveinterface(&p);
+}
+END_TEST
+
void add_cli_tests(Suite *s)
{
TCase *tc_cli = tcase_create("CLI");
tcase_add_exit_test(tc_cli, vnstat_parseargs_locale_requires_parameter, 1);
tcase_add_exit_test(tc_cli, vnstat_parseargs_setalias_requires_parameter, 1);
tcase_add_exit_test(tc_cli, vnstat_parseargs_rename_requires_parameter, 1);
+ tcase_add_test(tc_cli, vnstat_handleremoveinterface_does_nothing_when_nothing_needs_to_be_removed);
+ tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_no_interface_has_been_specified, 1);
+ tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_given_interface_does_not_exist, 1);
+ tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_force_is_not_used, 1);
+ tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_after_interface_removal, 0);
suite_add_tcase(s, tc_cli);
}