]> granicus.if.org Git - vnstat/commitdiff
move testdbdir to testdir/database, add /proc/net/dev simulation with fileand add...
authorTeemu Toivola <git@humdi.net>
Wed, 6 Aug 2014 16:36:33 +0000 (19:36 +0300)
committerTeemu Toivola <git@humdi.net>
Wed, 6 Aug 2014 16:36:33 +0000 (19:36 +0300)
.gitignore
tests/Makefile
tests/ifinfo_tests.c
tests/vnstat_tests.c
tests/vnstat_tests.h

index b0a3d990099f26eb0285bb12f1a838ddb6fc008b..db4d0c8ba511e17bd8784199c28a65d7c4dd9505 100644 (file)
@@ -10,4 +10,4 @@ tests/*.log
 tests/*.xml
 tests/coverage
 tests/vnstat_tests
-tests/testdbdir
+tests/testdir
index 87b36d99fd62cae68d5c67222719698045ae1eb2..b1dc10cb930279a1bc75aaf54ea9a2e7552af99c 100644 (file)
@@ -2,6 +2,7 @@ ifeq "$(origin CC)" "default"
 CC = gcc
 endif
 CFLAGS ?= -Wall -Wextra -g
+CFLAGS += -DPROCNETDEV=\"testdir/proc/dev\" -DSYSCLASSNET=\"testdir/proc\"
 LDLIBS = -lm -lcheck -lrt -lpthread
 OBJS = vnstat_tests.o common_tests.o database_tests.o config_tests.o ifinfo_tests.o misc_tests.o daemon_tests.o
 OBJS += common.o ifinfo.o dbaccess.o dbcache.o cfg.o misc.o daemon.o
@@ -41,4 +42,4 @@ misc.o: misc.c misc.h common.h
 daemon.o: daemon.c daemon.h common.h ifinfo.h dbaccess.h cfg.h
 
 clean:
-       rm -fr *.o *~ core *.i *.gc* test.log test.xml *.lcov coverage vnstat_tests testdbdir
+       rm -fr *.o *~ core *.i *.gc* test.log test.xml *.lcov coverage vnstat_tests testdir
index c6671080b0650a2680efbcf2709d0db641c28895..c3784d8a4f8138618ab68bb49e96a438110fcc43 100644 (file)
@@ -354,6 +354,110 @@ START_TEST(parseifinfo_multiple_parses)
 }
 END_TEST
 
+START_TEST(getiflist_no_source)
+{
+       char *ifacelist;
+
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       ck_assert_int_eq(getiflist(&ifacelist), 0);
+       ck_assert_str_eq(ifacelist, "");
+
+       free(ifacelist);
+}
+END_TEST
+
+START_TEST(getiflist_one_interface)
+{
+       char *ifacelist;
+
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "ethunusual", 0, 0, 0, 0);
+
+       ck_assert_int_eq(getiflist(&ifacelist), 1);
+       ck_assert_str_eq(ifacelist, "lo ethunusual ");
+
+       free(ifacelist);
+}
+END_TEST
+
+START_TEST(getiflist_multiple_interfaces)
+{
+       char *ifacelist;
+
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "random", 0, 0, 0, 0);
+       fake_proc_net_dev("a", "interfaces", 0, 0, 0, 0);
+       fake_proc_net_dev("a", "having", 0, 0, 0, 0);
+       fake_proc_net_dev("a", "fun", 0, 0, 0, 0);
+       fake_proc_net_dev("a", "i", 0, 0, 0, 0);
+
+       ck_assert_int_eq(getiflist(&ifacelist), 1);
+       ck_assert_str_eq(ifacelist, "lo random interfaces having fun i ");
+
+       free(ifacelist);
+}
+END_TEST
+
+START_TEST(readproc_no_file)
+{
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       ck_assert_int_eq(readproc("ethunusual"), 0);
+}
+END_TEST
+
+START_TEST(readproc_not_found)
+{
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "ethwrong", 10, 20, 30, 40);
+
+       ck_assert_int_eq(readproc("ethunusual"), 0);
+}
+END_TEST
+
+START_TEST(readproc_success)
+{
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "ethwrong", 10, 20, 30, 40);
+       fake_proc_net_dev("a", "ethunusual", 1, 2, 3, 4);
+
+       ck_assert_int_eq(readproc("ethunusual"), 1);
+       ck_assert_str_eq(ifinfo.name, "ethunusual");
+       ck_assert_int_eq(ifinfo.filled, 1);
+       ck_assert_int_eq(ifinfo.rx, 1);
+       ck_assert_int_eq(ifinfo.tx, 2);
+       ck_assert_int_eq(ifinfo.rxp, 3);
+       ck_assert_int_eq(ifinfo.txp, 4);
+}
+END_TEST
+
+START_TEST(getifinfo_not_found)
+{
+       suppress_output();
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "ethwrong", 10, 20, 30, 40);
+
+       ck_assert_int_eq(getifinfo("ethunusual"), 0);
+}
+END_TEST
+
+START_TEST(getifinfo_success)
+{
+       suppress_output();
+
+       ck_assert_int_eq(remove_directory(TESTDIR), 1);
+       fake_proc_net_dev("w", "ethwrong", 10, 20, 30, 40);
+       fake_proc_net_dev("a", "ethunusual", 1, 2, 3, 4);
+
+       ck_assert_int_eq(getifinfo("ethunusual"), 1);
+       ck_assert_str_eq(ifinfo.name, "ethunusual");
+       ck_assert_int_eq(ifinfo.filled, 1);
+       ck_assert_int_eq(ifinfo.rx, 1);
+       ck_assert_int_eq(ifinfo.tx, 2);
+       ck_assert_int_eq(ifinfo.rxp, 3);
+       ck_assert_int_eq(ifinfo.txp, 4);
+}
+END_TEST
+
 void add_ifinfo_tests(Suite *s)
 {
        /* Ifinfo test cases */
@@ -365,5 +469,13 @@ void add_ifinfo_tests(Suite *s)
        tcase_add_test(tc_ifinfo, parseifinfo_long_update_interval_causes_sync);
        tcase_add_test(tc_ifinfo, parseifinfo_hitting_maxbw_limit_causes_sync);
        tcase_add_test(tc_ifinfo, parseifinfo_multiple_parses);
+       tcase_add_test(tc_ifinfo, getiflist_no_source);
+       tcase_add_test(tc_ifinfo, getiflist_one_interface);
+       tcase_add_test(tc_ifinfo, getiflist_multiple_interfaces);
+       tcase_add_test(tc_ifinfo, readproc_no_file);
+       tcase_add_test(tc_ifinfo, readproc_not_found);
+       tcase_add_test(tc_ifinfo, readproc_success);
+       tcase_add_test(tc_ifinfo, getifinfo_not_found);
+       tcase_add_test(tc_ifinfo, getifinfo_success);
        suite_add_tcase(s, tc_ifinfo);
 }
index f86536f9e0a2310f099b31c29970739829a6a491..e07026a3909f87b64f43adaa67034289cae7f2ad 100644 (file)
@@ -10,6 +10,7 @@
 int main(void)
 {
        int number_failed = 0;
+       debug = 0;
 
        Suite *s = test_suite();
        SRunner *sr = srunner_create(s);
@@ -19,7 +20,9 @@ int main(void)
        number_failed = srunner_ntests_failed(sr);
        srunner_free(sr);
 
-       remove_directory(TESTDBDIR);
+       if (number_failed == 0) {
+               remove_directory(TESTDIR);
+       }
 
        return number_failed;
 }
@@ -53,13 +56,15 @@ int clean_testdbdir(void)
 {
        struct stat statbuf;
 
+       create_testdir();
+
        if (stat(TESTDBDIR, &statbuf)!=0) {
                if (errno==ENOENT) {
                        if (mkdir(TESTDBDIR, 0755)==0) {
                                return 1;
                        }
-                       ck_abort_msg("error \"%s\" while creating directory \"%s\", please remove it manually", strerror(errno), TESTDBDIR);
                }
+               ck_abort_msg("error \"%s\" while creating directory \"%s\"", strerror(errno), TESTDBDIR);
        }
 
        if (!remove_directory(TESTDBDIR)) {
@@ -67,7 +72,23 @@ int clean_testdbdir(void)
        }
 
        if (mkdir(TESTDBDIR, 0755)!=0) {
-               ck_abort_msg("error \"%s\" while creating directory \"%s\", please remove it manually", strerror(errno), TESTDBDIR);
+               ck_abort_msg("error \"%s\" while creating directory \"%s\"", strerror(errno), TESTDBDIR);
+       }
+
+       return 1;
+}
+
+int create_testdir(void)
+{
+       struct stat statbuf;
+
+       if (stat(TESTDIR, &statbuf)!=0) {
+               if (errno==ENOENT) {
+                       if (mkdir(TESTDIR, 0755)==0) {
+                               return 1;
+                       }
+               }
+               ck_abort_msg("error \"%s\" while creating directory \"%s\"", strerror(errno), TESTDIR);
        }
 
        return 1;
@@ -148,3 +169,42 @@ int check_dbfile_exists(const char *iface, const int minsize)
 
        return 1;
 }
+
+int fake_proc_net_dev(const char *mode, const char *iface, const int rx, const int tx, const int rxp, const int txp)
+{
+       FILE *devfp;
+       char filename[512];
+       struct stat statbuf;
+
+       if (strcmp(mode, "w") != 0  && strcmp(mode, "a") != 0) {
+               ck_abort_msg("error: only w and a modes are supported");
+       }
+
+       create_testdir();
+
+       if (stat(TESTPROCDIR, &statbuf)!=0) {
+               if (errno==ENOENT) {
+                       if (mkdir(TESTPROCDIR, 0755) != 0) {
+                               ck_abort_msg("error \"%s\" while creating directory \"%s\"", strerror(errno), TESTPROCDIR);
+                       }
+               } else {
+                       ck_abort_msg("error \"%s\" while creating directory \"%s\"", strerror(errno), TESTPROCDIR);
+               }
+       }
+
+       snprintf(filename, 512, "%s/dev", TESTPROCDIR);
+       if ((devfp=fopen(filename, mode))==NULL) {
+               ck_abort_msg("error \"%s\" while opening file \"%s\" for writing", strerror(errno), filename);
+       }
+
+       if (strcmp(mode, "w") == 0) {
+               fprintf(devfp, "Inter-|   Receive                                                |  Transmit\n");
+               fprintf(devfp, " face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed\n");
+               fprintf(devfp, "    lo:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0\n");
+       }
+       fprintf(devfp, "%6s: %7d %7d    0    0    0     0          0         0  %7d %7d    0    0    0     0       0          0\n", iface, rx, rxp, tx, txp);
+
+       fclose(devfp);
+
+       return 1;
+}
index e639768950c825f6413a528fa1a844a8f2466beb..f788832d8c702d8734fc117b3b0d1a3e3559b912 100644 (file)
@@ -7,11 +7,15 @@ Suite *test_suite(void);
 void suppress_output(void);
 void disable_logprints(void);
 int clean_testdbdir(void);
+int create_testdir(void);
 int remove_directory(const char *directory);
 int create_zerosize_dbfile(const char *iface);
 int check_dbfile_exists(const char *iface, const int minsize);
+int fake_proc_net_dev(const char *mode, const char *iface, const int rx, const int tx, const int rxp, const int txp);
 
-#define TESTDBDIR "testdbdir"
+#define TESTDIR     "testdir"
+#define TESTDBDIR   "testdir/database"
+#define TESTPROCDIR "testdir/proc"
 
 /* for compatibility with older check framework versions */
 #ifndef ck_assert_int_ge