END_TEST START_TEST(parseifinfo_1kb_change) { initdb(); data.btime = getbtime(); data.lastupdated -= 100; data.currx = 1024; data.curtx = 1024; strcpy(data.interface, "eth0"); ck_assert_int_eq(ibwadd("eth0", 10), 1); strcpy(ifinfo.name, "eth0"); ifinfo.filled = 1; ifinfo.rx = 2048; ifinfo.tx = 2048; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 2048); ck_assert_int_eq(ifinfo.tx, 2048); ck_assert_int_eq(ifinfo.rxp, 0); ck_assert_int_eq(ifinfo.txp, 0); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 1); ck_assert_int_eq(data.day[0].txk, 1); ck_assert_int_eq(data.month[0].rx, 0); ck_assert_int_eq(data.month[0].tx, 0); ck_assert_int_eq(data.month[0].rxk, 1); ck_assert_int_eq(data.month[0].txk, 1); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 1); ck_assert_int_eq(data.totaltxk, 1); ck_assert_int_eq(data.currx, 2048); ck_assert_int_eq(data.curtx, 2048); }
END_TEST START_TEST(parseifinfo_hitting_maxbw_limit_causes_sync) { initdb(); data.btime = getbtime(); data.lastupdated -= 1; data.currx = 1024; data.curtx = 1024; strcpy(data.interface, "eth0"); ck_assert_int_eq(ibwadd("eth0", 10), 1); strcpy(ifinfo.name, "eth0"); ifinfo.filled = 1; ifinfo.rx = 123456789; ifinfo.tx = 123456789; ifinfo.rxp = ifinfo.txp = 0; debug = 1; suppress_output(); parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 123456789); ck_assert_int_eq(ifinfo.tx, 123456789); ck_assert_int_eq(ifinfo.rxp, 0); ck_assert_int_eq(ifinfo.txp, 0); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 0); ck_assert_int_eq(data.day[0].txk, 0); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 0); ck_assert_int_eq(data.totaltxk, 0); ck_assert_int_eq(data.currx, 123456789); ck_assert_int_eq(data.curtx, 123456789); }
void datalist_getifinfo(DSTATE *s) { if (!data.active) { if (debug) printf("d: interface is disabled\n"); return; } if (!getifinfo(data.interface)) { /* disable interface since we can't access its data */ data.active = 0; snprintf(errorstring, 512, "Interface \"%s\" not available, disabling.", data.interface); printe(PT_Info); return; } if (s->datalist->sync) { /* if --sync was used during startup */ data.currx = ifinfo.rx; data.curtx = ifinfo.tx; s->datalist->sync = 0; } else { parseifinfo(0); } }
END_TEST START_TEST(parseifinfo_long_update_interval_causes_sync) { initdb(); data.btime = getbtime(); data.lastupdated -= (60*MAXUPDATEINTERVAL + 10); strcpy(data.interface, "eth0"); ck_assert_int_eq(ibwadd("eth0", 10), 1); strcpy(ifinfo.name, "eth0"); ifinfo.filled = 1; ifinfo.rx = 1024; ifinfo.tx = 1024; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 1024); ck_assert_int_eq(ifinfo.tx, 1024); ck_assert_int_eq(ifinfo.rxp, 0); ck_assert_int_eq(ifinfo.txp, 0); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 0); ck_assert_int_eq(data.day[0].txk, 0); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 0); ck_assert_int_eq(data.totaltxk, 0); ck_assert_int_eq(data.currx, 1024); ck_assert_int_eq(data.curtx, 1024); }
int addinterfaces(const char *dirname) { char *ifacelist, interface[32]; int index = 0, count = 0, bwlimit = 0; /* get list of currently visible interfaces */ if (getiflist(&ifacelist)==0) { free(ifacelist); return 0; } if (strlen(ifacelist)<2) { free(ifacelist); return 0; } if (debug) printf("Interface list: \"%s\"\n", ifacelist); while (sscanf(ifacelist+index, "%31s", interface)!=EOF) { if (debug) printf("Processing: \"%s\"\n", interface); index += strlen(interface)+1; /* skip local interfaces */ if ((strcmp(interface,"lo")==0) || (strcmp(interface,"lo0")==0) || (strcmp(interface,"sit0")==0)) { if (debug) printf("skip\n"); continue; } /* create database for interface */ initdb(); strncpy_nt(data.interface, interface, 32); strncpy_nt(data.nick, data.interface, 32); if (!getifinfo(interface)) { if (debug) printf("getifinfo failed, skip\n"); continue; } parseifinfo(1); if (!writedb(interface, dirname, 1)) { continue; } count++; bwlimit = ibwget(interface); if (bwlimit > 0) { printf("\"%s\" added with %d Mbit bandwidth limit.\n", interface, bwlimit); } else { printf("\"%s\" added. Warning: no bandwidth limit has been set.\n", interface); } } if (count==1) { printf("-> %d interface added.", count); } else { printf("-> %d interfaces added.", count); } if (count) { printf("\nLimits can be modified using the configuration file. See \"man vnstat.conf\".\n"); printf("Unwanted interfaces can be removed from monitoring with \"vnstat --delete\"."); } printf("\n"); free(ifacelist); return count; }
END_TEST START_TEST(parseifinfo_multiple_parses) { initdb(); data.btime = getbtime(); data.lastupdated -= 20; data.currx = 0; data.curtx = 0; strcpy(data.interface, "eth0"); ck_assert_int_eq(ibwadd("eth0", 10), 1); strcpy(ifinfo.name, "eth0"); ifinfo.filled = 1; ifinfo.rx = 2049; ifinfo.tx = 2049; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 2049); ck_assert_int_eq(ifinfo.tx, 2049); ck_assert_int_eq(ifinfo.rxp, 1); ck_assert_int_eq(ifinfo.txp, 1); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 2); ck_assert_int_eq(data.day[0].txk, 2); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 2); ck_assert_int_eq(data.totaltxk, 2); ck_assert_int_eq(data.currx, 2048); ck_assert_int_eq(data.curtx, 2048); data.lastupdated -= 15; ifinfo.rx = 4098; ifinfo.tx = 4098; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 4098); ck_assert_int_eq(ifinfo.tx, 4098); ck_assert_int_eq(ifinfo.rxp, 2); ck_assert_int_eq(ifinfo.txp, 2); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 4); ck_assert_int_eq(data.day[0].txk, 4); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 4); ck_assert_int_eq(data.totaltxk, 4); ck_assert_int_eq(data.currx, 4096); ck_assert_int_eq(data.curtx, 4096); data.lastupdated -= 10; ifinfo.rx = 8192; ifinfo.tx = 8192; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 8192); ck_assert_int_eq(ifinfo.tx, 8192); ck_assert_int_eq(ifinfo.rxp, 0); ck_assert_int_eq(ifinfo.txp, 0); ck_assert_int_eq(data.day[0].rx, 0); ck_assert_int_eq(data.day[0].tx, 0); ck_assert_int_eq(data.day[0].rxk, 8); ck_assert_int_eq(data.day[0].txk, 8); ck_assert_int_eq(data.totalrx, 0); ck_assert_int_eq(data.totaltx, 0); ck_assert_int_eq(data.totalrxk, 8); ck_assert_int_eq(data.totaltxk, 8); ck_assert_int_eq(data.currx, 8192); ck_assert_int_eq(data.curtx, 8192); data.lastupdated -= 5; ifinfo.rx = 1048576; ifinfo.tx = 1048576; ifinfo.rxp = ifinfo.txp = 0; parseifinfo(0); ck_assert_int_eq(ifinfo.rx, 1048576); ck_assert_int_eq(ifinfo.tx, 1048576); ck_assert_int_eq(ifinfo.rxp, 0); ck_assert_int_eq(ifinfo.txp, 0); ck_assert_int_eq(data.day[0].rx, 1); ck_assert_int_eq(data.day[0].tx, 1); ck_assert_int_eq(data.day[0].rxk, 0); ck_assert_int_eq(data.day[0].txk, 0); ck_assert_int_eq(data.totalrx, 1); ck_assert_int_eq(data.totaltx, 1); ck_assert_int_eq(data.totalrxk, 0); ck_assert_int_eq(data.totaltxk, 0); ck_assert_int_eq(data.currx, 1048576); ck_assert_int_eq(data.curtx, 1048576); }