std/rec/test: test dbGet() and dbPut() for array field
test with waveform record to check that DBADDR modifications aren't seen by the caller.
This commit is contained in:
@@ -12,6 +12,19 @@ include $(TOP)/configure/CONFIG
|
||||
|
||||
PROD_LIBS = dbRecStd dbCore ca Com
|
||||
|
||||
TARGETS += $(COMMON_DIR)/recTestIoc.dbd
|
||||
recTestIoc_DBD = base.dbd
|
||||
TESTFILES += $(COMMON_DIR)/recTestIoc.dbd
|
||||
|
||||
testHarness_SRCS += recTestIoc_registerRecordDeviceDriver.cpp
|
||||
|
||||
TESTPROD_HOST += arrayOpTest
|
||||
arrayOpTest_SRCS += arrayOpTest.c
|
||||
arrayOpTest_SRCS += recTestIoc_registerRecordDeviceDriver.cpp
|
||||
testHarness_SRCS += arrayOpTest.c
|
||||
TESTFILES += ../arrayOpTest.db
|
||||
TESTS += arrayOpTest
|
||||
|
||||
TARGETS += $(COMMON_DIR)/analogMonitorTest.dbd
|
||||
analogMonitorTest_DBD += base.dbd
|
||||
TESTPROD_HOST += analogMonitorTest
|
||||
|
||||
105
src/std/rec/test/arrayOpTest.c
Normal file
105
src/std/rec/test/arrayOpTest.c
Normal file
@@ -0,0 +1,105 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2014 Brookhaven Science Assoc. as operator of Brookhaven
|
||||
* National Laboratory.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "dbAccess.h"
|
||||
|
||||
#include "dbUnitTest.h"
|
||||
#include "errlog.h"
|
||||
|
||||
#include "waveformRecord.h"
|
||||
|
||||
#include "testMain.h"
|
||||
|
||||
void recTestIoc_registerRecordDeviceDriver(struct dbBase *);
|
||||
|
||||
static void testGetPutArray(void)
|
||||
{
|
||||
double data[4] = {1, 2, 3, 4};
|
||||
DBADDR addr, save;
|
||||
long nreq;
|
||||
epicsInt32 *pbtr;
|
||||
waveformRecord *prec;
|
||||
|
||||
testDiag("Test dbGet() and dbPut() of an array");
|
||||
|
||||
testdbReadDatabase("recTestIoc.dbd", NULL, NULL);
|
||||
|
||||
recTestIoc_registerRecordDeviceDriver(pdbbase);
|
||||
|
||||
testdbReadDatabase("arrayOpTest.db", NULL, NULL);
|
||||
|
||||
eltc(0);
|
||||
testIocInitOk();
|
||||
eltc(1);
|
||||
|
||||
prec = (waveformRecord*)testdbRecordPtr("wfrec");
|
||||
if(!prec || dbNameToAddr("wfrec", &addr))
|
||||
testAbort("Failed to find record wfrec");
|
||||
memcpy(&save, &addr, sizeof(save));
|
||||
|
||||
testDiag("Fetch initial value");
|
||||
|
||||
dbScanLock(addr.precord);
|
||||
testOk1(prec->nord==0);
|
||||
|
||||
nreq = NELEMENTS(data);
|
||||
if(dbGet(&addr, DBF_DOUBLE, &data, NULL, &nreq, NULL))
|
||||
testFail("dbGet fails");
|
||||
else {
|
||||
testOk1(nreq==0);
|
||||
}
|
||||
dbScanUnlock(addr.precord);
|
||||
|
||||
testOk1(memcmp(&addr, &save, sizeof(save))==0);
|
||||
addr=save;
|
||||
|
||||
testDiag("Write a new value");
|
||||
|
||||
data[0] = 4.0;
|
||||
data[1] = 5.0;
|
||||
data[2] = 6.0;
|
||||
data[3] = 7.0;
|
||||
|
||||
dbScanLock(addr.precord);
|
||||
testOk1(dbPut(&addr, DBF_DOUBLE, &data, NELEMENTS(data))==0);
|
||||
pbtr = prec->bptr;
|
||||
testOk1(prec->nord==4);
|
||||
testOk1(pbtr[0]==4 && pbtr[1]==5 && pbtr[2]==6 && pbtr[3]==7);
|
||||
dbScanUnlock(addr.precord);
|
||||
|
||||
testOk1(memcmp(&addr, &save, sizeof(save))==0);
|
||||
addr=save;
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
testDiag("reread the value");
|
||||
|
||||
dbScanLock(addr.precord);
|
||||
nreq = NELEMENTS(data);
|
||||
if(dbGet(&addr, DBF_DOUBLE, &data, NULL, &nreq, NULL))
|
||||
testFail("dbGet fails");
|
||||
else {
|
||||
testOk1(nreq==NELEMENTS(data));
|
||||
testOk1(data[0]==4.0 && data[1]==5.0 && data[2]==6.0 && data[3]==7.0);
|
||||
}
|
||||
dbScanUnlock(addr.precord);
|
||||
|
||||
testOk1(memcmp(&addr, &save, sizeof(save))==0);
|
||||
|
||||
testIocShutdownOk();
|
||||
|
||||
testdbCleanup();
|
||||
}
|
||||
|
||||
MAIN(arrayOpTest)
|
||||
{
|
||||
testPlan(10);
|
||||
testGetPutArray();
|
||||
return testDone();
|
||||
}
|
||||
4
src/std/rec/test/arrayOpTest.db
Normal file
4
src/std/rec/test/arrayOpTest.db
Normal file
@@ -0,0 +1,4 @@
|
||||
record(waveform, "wfrec") {
|
||||
field(NELM, "10")
|
||||
field(FTVL, "LONG")
|
||||
}
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "epicsExit.h"
|
||||
|
||||
int analogMonitorTest(void);
|
||||
int arrayOpTest(void);
|
||||
|
||||
void epicsRunTests(void)
|
||||
{
|
||||
@@ -20,5 +21,7 @@ void epicsRunTests(void)
|
||||
|
||||
runTest(analogMonitorTest);
|
||||
|
||||
runTest(arrayOpTest);
|
||||
|
||||
epicsExit(0); /* Trigger test harness */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user