END_TEST START_TEST(ibwflush_success) { cfg.maxbw = 0; ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); ck_assert_int_eq(ibwget("name1"), 1); ck_assert_int_eq(ibwget("name2"), 2); ck_assert_int_eq(ibwget("does_not_exist"), -1); ibwflush(); ck_assert_int_eq(ibwget("name1"), -1); ck_assert_int_eq(ibwget("name2"), -1); ck_assert_int_eq(ibwget("does_not_exist"), -1); ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); ck_assert_int_eq(ibwget("name1"), 1); ck_assert_int_eq(ibwget("name2"), 2); ck_assert_int_eq(ibwget("does_not_exist"), -1); }
END_TEST START_TEST(ibwlist_filled) { cfg.maxbw = 0; ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); suppress_output(); ibwlist(); }
END_TEST START_TEST(printcfgfile_default) { defaultcfg(); ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); suppress_output(); printcfgfile(); }
END_TEST START_TEST(ibwadd_single_success) { cfg.maxbw = 0; ck_assert_int_eq(ibwadd("newinterface", 1), 1); ck_assert_int_eq(ibwget("does_not_exist"), -1); ck_assert_int_eq(ibwget("newinterface"), 1); }
END_TEST START_TEST(ibwadd_update_success) { cfg.maxbw = 0; ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); ck_assert_int_eq(ibwget("does_not_exist"), -1); ck_assert_int_eq(ibwget("name1"), 1); ck_assert_int_eq(ibwget("name2"), 2); ck_assert_int_eq(ibwget("does_not_exist"), -1); ck_assert_int_eq(ibwadd("name2", 5), 1); ck_assert_int_eq(ibwadd("name1", 4), 1); ck_assert_int_eq(ibwget("name1"), 4); ck_assert_int_eq(ibwget("name2"), 5); ck_assert_int_eq(ibwget("does_not_exist"), -1); }
END_TEST START_TEST(cachestatus_full) { int i; char buffer[8]; initdb(); defaultcfg(); disable_logprints(); ck_assert_int_eq(cachecount(), 0); for (i=1; i<=50; i++) { snprintf(buffer, 8, "name%d", i); ck_assert_int_eq(cacheadd(buffer, 0), 1); ck_assert_int_eq(ibwadd(buffer, 50-i), 1); } ck_assert_int_eq(cachecount(), 50); cachestatus(); }
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); }
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); }
END_TEST START_TEST(ibwadd_multi_success) { cfg.maxbw = 0; ck_assert_int_eq(ibwadd("name1", 1), 1); ck_assert_int_eq(ibwadd("name2", 2), 1); ck_assert_int_eq(ibwadd("name3", 3), 1); ck_assert_int_eq(ibwadd("name4", 2), 1); ck_assert_int_eq(ibwadd("name5", 1), 1); ck_assert_int_eq(ibwadd("name6", 10), 1); ck_assert_int_eq(ibwget("does_not_exist"), -1); ck_assert_int_eq(ibwget("name1"), 1); ck_assert_int_eq(ibwget("name3"), 3); ck_assert_int_eq(ibwget("name4"), 2); ck_assert_int_eq(ibwget("name6"), 10); ck_assert_int_eq(ibwget("name2"), 2); ck_assert_int_eq(ibwget("name5"), 1); ck_assert_int_eq(ibwget("name1"), 1); ck_assert_int_eq(ibwget("does_not_exist"), -1); }
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); }
int ibwcfgread(FILE *fd) { char cfgline[512], name[512], value[512]; int i, j, linelen, count = 0, ivalue; /* start from value search from first line */ rewind(fd); /* cycle all lines */ while (!feof(fd)) { cfgline[0] = '\0'; /* get current line */ if (fgets(cfgline, 512, fd)==NULL) { break; } linelen = (int)strlen(cfgline); if (linelen>8 && cfgline[0]!='#') { if (strncasecmp(cfgline, "MaxBW", 5)==0) { /* clear name and value buffers */ for (j=0; j<512; j++) { name[j]=value[j]='\0'; } /* get interface name */ j=0; for (i=5; i<linelen; i++) { if (cfgline[i]==' ' || cfgline[i]=='=' || cfgline[i]=='\t' || cfgline[i]=='\n' || cfgline[i]=='\r') { break; } else { name[j]=cfgline[i]; j++; } } /* get new line if no usable name was found */ if (strlen(name)==0) { continue; } /* search value */ j=0; for (i++; i<linelen; i++) { if (cfgline[i]=='\n' || cfgline[i]=='\r') { break; } else if (cfgline[i]=='\"') { if (j==0) { continue; } else { break; } } else { if (j==0 && (cfgline[i]==' ' || cfgline[i]=='=' || cfgline[i]=='\t')) { continue; } else { value[j]=cfgline[i]; j++; } } } /* get new line if no usable value was found */ if ((strlen(value)==0) || (!isdigit(value[0])) ) { continue; } /* add interface and limit to list if value is within limits */ ivalue = atoi(value); if (ivalue<0 || ivalue>10000) { snprintf(errorstring, 512, "Invalid value \"%d\" for MaxBW%s, ignoring parameter.", ivalue, name); printe(PT_Config); } else { ibwadd(name, ivalue); } } } } return count; }