Add checks of freelist to dbndTest.c
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user