}
sqlite3_snprintf(512, sql, "select name, alias, active, strftime('%%s', created, 'utc'), strftime('%%s', updated, 'utc'), rxcounter, txcounter, rxtotal, txtotal from interface where id=%"PRId64";", (int64_t)ifaceid);
} else {
- /* TODO: tests */
ifaceidin = db_getinterfaceidin(iface);
if (ifaceidin == NULL || strlen(ifaceidin) < 1) {
return 0;
/* note that using the linked list reverses the order */
/* most recent last in the linked list is considered the normal order */
if (strcmp(table, "top") == 0) {
+ /* 'top' entries, requires different query due to rx+tx ordering */
if (strlen(dbegin)) {
if (resultlimit > 0) {
snprintf(limit, 64, "limit %"PRIu32"", resultlimit);
}
END_TEST
+START_TEST(db_getinterfaceinfo_can_handle_interface_merges)
+{
+ int ret;
+ interfaceinfo info;
+
+ defaultcfg();
+
+ ret = db_open_rw(1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth0", 1, 1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth1", 2, 2);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth2", 5, 5);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_getinterfaceinfo("eth0+ethnone", &info);
+ ck_assert_int_eq(ret, 1);
+ ck_assert_int_eq(info.rxtotal, 1);
+ ck_assert_int_eq(info.txtotal, 1);
+ ck_assert_int_gt(info.updated, 1000);
+ ck_assert_int_lt(info.updated, 2100000000);
+
+ ret = db_getinterfaceinfo("eth0+eth1", &info);
+ ck_assert_int_eq(ret, 1);
+ ck_assert_int_eq(info.rxtotal, 3);
+ ck_assert_int_eq(info.txtotal, 3);
+ ck_assert_int_gt(info.updated, 1000);
+ ck_assert_int_lt(info.updated, 2100000000);
+
+ ret = db_getinterfaceinfo("eth1+eth2", &info);
+ ck_assert_int_eq(ret, 1);
+ ck_assert_int_eq(info.rxtotal, 7);
+ ck_assert_int_eq(info.txtotal, 7);
+ ck_assert_int_gt(info.updated, 1000);
+ ck_assert_int_lt(info.updated, 2100000000);
+
+ ret = db_getinterfaceinfo("eth0+eth1+eth2", &info);
+ ck_assert_int_eq(ret, 1);
+ ck_assert_int_eq(info.rxtotal, 8);
+ ck_assert_int_eq(info.txtotal, 8);
+ ck_assert_int_gt(info.updated, 1000);
+ ck_assert_int_lt(info.updated, 2100000000);
+
+ ret = db_close();
+ ck_assert_int_eq(ret, 1);
+}
+END_TEST
+
+START_TEST(db_getinterfaceinfo_can_handle_invalid_input)
+{
+ int ret;
+ interfaceinfo info;
+
+ defaultcfg();
+
+ ret = db_open_rw(1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth0", 1, 1);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth1", 2, 2);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_addtraffic("eth2", 5, 5);
+ ck_assert_int_eq(ret, 1);
+
+ ret = db_getinterfaceinfo("eth0+", &info);
+ ck_assert_int_eq(ret, 0);
+
+ ret = db_getinterfaceinfo("+", &info);
+ ck_assert_int_eq(ret, 0);
+
+ ret = db_getinterfaceinfo("++", &info);
+ ck_assert_int_eq(ret, 0);
+
+ ret = db_getinterfaceinfo("", &info);
+ ck_assert_int_eq(ret, 0);
+
+ ret = db_getinterfaceinfo("ethunknown", &info);
+ ck_assert_int_eq(ret, 0);
+
+ ret = db_close();
+ ck_assert_int_eq(ret, 1);
+}
+END_TEST
+
void add_dbsql_tests(Suite *s)
{
TCase *tc_dbsql = tcase_create("DB SQL");
tcase_add_test(tc_dbsql, db_getinterfaceid_can_get_ids);
tcase_add_test(tc_dbsql, db_getinterfaceidin_can_get_in_groups);
tcase_add_test(tc_dbsql, db_getinterfaceidin_can_handle_error_situations);
+ tcase_add_test(tc_dbsql, db_getinterfaceinfo_can_handle_interface_merges);
+ tcase_add_test(tc_dbsql, db_getinterfaceinfo_can_handle_invalid_input);
suite_add_tcase(s, tc_dbsql);
}