Add checks of freelist to dbndTest.c

This commit is contained in:
Andrew Johnson
2019-07-07 23:32:12 -05:00
parent 8ff6ce4821
commit cac3e2dc3b

View File

@@ -62,6 +62,7 @@ static void changeValue(db_field_log *pfl2, long val) {
}
static void mustPassOnce(dbChannel *pch, db_field_log *pfl2, char* m, double d, long val) {
int oldFree = db_available_logs(), newFree;
db_field_log *pfl;
changeValue(pfl2, val);
@@ -71,18 +72,26 @@ static void mustPassOnce(dbChannel *pch, db_field_log *pfl2, char* m, double d,
testOk(fl_equal(pfl, pfl2), "call 1 does not change field_log data");
pfl = dbChannelRunPreChain(pch, pfl2);
testOk(NULL == pfl, "call 2 drops field_log");
newFree = db_available_logs();
testOk(newFree == oldFree + 1, "field_log was freed - %d+1 => %d",
oldFree, newFree);
}
static void mustDrop(dbChannel *pch, db_field_log *pfl2, char* m, double d, long val) {
int oldFree = db_available_logs(), newFree;
db_field_log *pfl;
changeValue(pfl2, val);
testDiag("mode=%s delta=%g filter must drop", m, d);
pfl = dbChannelRunPreChain(pch, pfl2);
testOk(NULL == pfl, "call 1 drops field_log");
newFree = db_available_logs();
testOk(newFree == oldFree + 1, "field_log was freed - %d+1 => %d",
oldFree, newFree);
}
static void mustPassTwice(dbChannel *pch, db_field_log *pfl2, char* m, double d, long val) {
int oldFree = db_available_logs(), newFree;
db_field_log *pfl;
changeValue(pfl2, val);
@@ -93,6 +102,9 @@ static void mustPassTwice(dbChannel *pch, db_field_log *pfl2, char* m, double d,
pfl = dbChannelRunPreChain(pch, pfl2);
testOk(pfl2 == pfl, "call 2 does not drop or replace field_log");
testOk(fl_equal(pfl, pfl2), "call 2 does not change field_log data");
newFree = db_available_logs();
testOk(newFree == oldFree, "field_log was not freed - %d => %d",
oldFree, newFree);
}
static void testHead (char* title) {
@@ -113,8 +125,9 @@ MAIN(dbndTest)
db_field_log *pfl2;
db_field_log fl1;
dbEventCtx evtctx;
int logsFree, logsFinal;
testPlan(59);
testPlan(77);
testdbPrepare();
@@ -135,6 +148,11 @@ MAIN(dbndTest)
testOk(!!(pch = dbChannelCreate("x.VAL{\"dbnd\":{}}")), "dbChannel with plugin dbnd (delta=0) created");
testOk((ellCount(&pch->filters) == 1), "channel has one plugin");
/* Start the free-list */
db_delete_field_log(db_create_read_log(pch));
logsFree = db_available_logs();
testDiag("%d field_logs on free-list", logsFree);
memset(&fl, PATTERN, sizeof(fl));
fl1 = fl;
node = ellFirst(&pch->filters);
@@ -176,6 +194,8 @@ MAIN(dbndTest)
dbChannelDelete(pch);
testDiag("%d field_logs on free-list", db_available_logs());
/* Delta = -1: pass any update */
testHead("Delta = -1: pass any update");
@@ -192,6 +212,8 @@ MAIN(dbndTest)
db_delete_field_log(pfl2);
dbChannelDelete(pch);
testDiag("%d field_logs on free-list", db_available_logs());
/* Delta = absolute */
testHead("Delta = absolute");
@@ -224,6 +246,8 @@ MAIN(dbndTest)
dbChannelDelete(pch);
testDiag("%d field_logs on free-list", db_available_logs());
/* Delta = relative */
testHead("Delta = relative");
@@ -275,6 +299,9 @@ MAIN(dbndTest)
dbChannelDelete(pch);
logsFinal = db_available_logs();
testOk(logsFree == logsFinal, "%d field_logs on free-list", logsFinal);
db_close_events(evtctx);
testIocShutdownOk();