test PDB get w/ filter

This commit is contained in:
Michael Davidsaver
2021-03-17 12:22:09 -07:00
parent 1ac2e6c809
commit 67e668795e
2 changed files with 47 additions and 6 deletions

View File

@ -292,6 +292,45 @@ void testGroupMonitorTriggers(pvac::ClientProvider& client)
#endif #endif
} }
void testFilters(pvac::ClientProvider& client)
{
testDiag("test w/ server side filters");
pvd::shared_vector<const pvd::int16> expected;
{
pvd::shared_vector<pvd::int16> scratch(9);
scratch[0] = 9;
scratch[1] = 8;
scratch[2] = 7;
scratch[3] = 6;
scratch[4] = 5;
scratch[5] = 4;
scratch[6] = 3;
scratch[7] = 2;
scratch[8] = 1;
expected = pvd::freeze(scratch);
}
client.connect("TEST").put().set("value", expected).exec();
pvd::PVStructure::const_shared_pointer root(client.connect("TEST").get());
testFieldEqual<pvd::PVShortArray>(root, "value", expected);
root = client.connect("TEST.{\"arr\":{\"i\":2}}").get();
{
pvd::shared_vector<pvd::int16> scratch(5);
scratch[0] = 9;
scratch[1] = 7;
scratch[2] = 5;
scratch[3] = 3;
scratch[4] = 1;
expected = pvd::freeze(scratch);
}
testFieldEqual<pvd::PVShortArray>(root, "value", expected);
}
} // namespace } // namespace
extern "C" extern "C"
@ -299,7 +338,7 @@ void p2pTestIoc_registerRecordDeviceDriver(struct dbBase *);
MAIN(testpdb) MAIN(testpdb)
{ {
testPlan(93); testPlan(95);
try{ try{
QSRVRegistrar_counters(); QSRVRegistrar_counters();
epics::RefSnapshot ref_before; epics::RefSnapshot ref_before;
@ -318,6 +357,7 @@ MAIN(testpdb)
#ifdef USE_MULTILOCK #ifdef USE_MULTILOCK
testdbReadDatabase("testpdb-groups.db", NULL, NULL); testdbReadDatabase("testpdb-groups.db", NULL, NULL);
#endif #endif
testdbReadDatabase("testfilters.db", NULL, NULL);
IOC.init(); IOC.init();
@ -333,6 +373,7 @@ MAIN(testpdb)
testSingleMonitor(client); testSingleMonitor(client);
testGroupMonitor(client); testGroupMonitor(client);
testGroupMonitorTriggers(client); testGroupMonitorTriggers(client);
testFilters(client);
testEqual(epics::atomic::get(PDBProvider::num_instances), 1u); testEqual(epics::atomic::get(PDBProvider::num_instances), 1u);
} }

View File

@ -562,15 +562,15 @@ void testFilters()
IOC.init(); IOC.init();
static epicsInt32 arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; static const epicsInt32 arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
testdbPutArrFieldOk("TEST", DBF_LONG, 9, arr); testdbPutArrFieldOk("TEST", DBF_LONG, 9, arr);
#if EPICS_VERSION_INT > VERSION_INT(7, 0, 5, 0) #if EPICS_VERSION_INT > VERSION_INT(7, 0, 5, 0)
testdbGetArrFieldEqual("TEST", DBF_LONG, 10, 9, arr); testdbGetArrFieldEqual("TEST", DBF_LONG, 10, 9, arr);
testdbGetArrFieldEqual("TEST.{arr:{s:5}}", DBF_LONG, 10, 4, arr+5); testdbGetArrFieldEqual("TEST.{\"arr\":{\"s\":5}}", DBF_LONG, 10, 4, arr+5);
static epicsInt32 arr2[] = {9, 7, 5, 3, 1}; static const epicsInt32 arr2[] = {9, 7, 5, 3, 1};
testdbGetArrFieldEqual("TEST.{arr:{i:2}}", DBF_LONG, 10, 5, arr2); testdbGetArrFieldEqual("TEST.{\"arr\":{\"i\":2}}", DBF_LONG, 10, 5, arr2);
#else #else
testSkip(3, "dbUnitTest doesn't use dbChannel"); testSkip(3, "dbUnitTest doesn't use dbChannel");
@ -579,7 +579,7 @@ void testFilters()
pvd::PVStructurePtr root; pvd::PVStructurePtr root;
p2p::auto_ptr<PVIF> pvif; p2p::auto_ptr<PVIF> pvif;
DBCH chan("TEST.{arr:{i:2}}"); DBCH chan("TEST.{\"arr\":{\"i\":2}}");
ScalarBuilder builder(chan); ScalarBuilder builder(chan);
root = pvd::FieldBuilder::begin() root = pvd::FieldBuilder::begin()