]> granicus.if.org Git - vnstat/commitdiff
improve test coverage
authorTeemu Toivola <git@humdi.net>
Wed, 11 Sep 2019 17:21:06 +0000 (20:21 +0300)
committerTeemu Toivola <git@humdi.net>
Wed, 11 Sep 2019 17:21:06 +0000 (20:21 +0300)
src/vnstat_func.c
tests/cli_tests.c

index 00f25b239feb16eafe5afacb34cab142b6205274..5c669903243fed19c8d8df7056242b4afa91ab60 100644 (file)
@@ -506,15 +506,18 @@ void handleremoveinterface(PARAMS *p)
                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);
@@ -554,13 +557,16 @@ void handlerenameinterface(PARAMS *p)
                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);
@@ -601,14 +607,17 @@ void handleaddinterface(PARAMS *p)
                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);
@@ -632,13 +641,16 @@ void handlesetalias(PARAMS *p)
                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);
index 71b3c98f519a2c08a5ae2a70ea27733177c79170..1731348cb01b2307a1811f29248f4280a0598372 100644 (file)
@@ -2,6 +2,7 @@
 #include "vnstat_tests.h"
 #include "vnstat_func.h"
 #include "cfg.h"
+#include "dbsql.h"
 #include "cli_tests.h"
 
 START_TEST(vnstat_can_init_params)
@@ -398,6 +399,90 @@ START_TEST(vnstat_parseargs_rename_requires_parameter)
 }
 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");
@@ -433,5 +518,10 @@ void add_cli_tests(Suite *s)
     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);
 }