add test for plugin

This commit is contained in:
mrkraimer
2018-07-13 11:50:27 -04:00
parent 3e0282d956
commit a2a07a1d33
7 changed files with 282 additions and 13 deletions

View File

@ -13,6 +13,7 @@
/* src */ /* src */
int testExampleRecord(void); int testExampleRecord(void);
int testPVCopy(void); int testPVCopy(void);
int testPlugin(void);
int testPVRecord(void); int testPVRecord(void);
int testLocalProvider(void); int testLocalProvider(void);
int testPVAServer(void); int testPVAServer(void);
@ -24,6 +25,7 @@ void pvDatabaseAllTests(void)
/* src */ /* src */
runTest(testExampleRecord); runTest(testExampleRecord);
runTest(testPVCopy); runTest(testPVCopy);
runTest(testPlugin);
runTest(testPVRecord); runTest(testPVRecord);
runTest(testLocalProvider); runTest(testLocalProvider);
runTest(testPVAServer); runTest(testPVAServer);

View File

@ -3,6 +3,12 @@
SRC_DIRS += $(PVDATABASE_TEST)/src SRC_DIRS += $(PVDATABASE_TEST)/src
TESTPROD_HOST += testPlugin
testPlugin_SRCS += testPlugin.cpp
testHarness_SRCS += testPlugin.cpp
TESTS += testPlugin
TESTPROD_HOST += testPVCopy TESTPROD_HOST += testPVCopy
testPVCopy_SRCS += testPVCopy.cpp testPVCopy_SRCS += testPVCopy.cpp
testHarness_SRCS += testPVCopy.cpp testHarness_SRCS += testPVCopy.cpp
@ -23,7 +29,6 @@ testLocalProvider_SRCS += testLocalProvider.cpp
testHarness_SRCS += testLocalProvider.cpp testHarness_SRCS += testLocalProvider.cpp
TESTS += testLocalProvider TESTS += testLocalProvider
TESTPROD_HOST += testPVAServer TESTPROD_HOST += testPVAServer
testPVAServer_SRCS += testPVAServer.cpp testPVAServer_SRCS += testPVAServer.cpp
testHarness_SRCS += testPVAServer.cpp testHarness_SRCS += testPVAServer.cpp

View File

@ -68,7 +68,6 @@ static void test()
exampleRecord->unlock(); exampleRecord->unlock();
} }
if(debug) {cout << "processed exampleDouble " << endl; } if(debug) {cout << "processed exampleDouble " << endl; }
exampleRecord->destroy();
recordName = "powerSupplyExample"; recordName = "powerSupplyExample";
PowerSupplyPtr psr; PowerSupplyPtr psr;
pvStructure = createPowerSupply(); pvStructure = createPowerSupply();
@ -127,7 +126,6 @@ static void test()
testOk1(psr->getVoltage()==1.0); testOk1(psr->getVoltage()==1.0);
testOk1(psr->getPower()==1.0); testOk1(psr->getPower()==1.0);
testOk1(psr->getCurrent()==1.0); testOk1(psr->getCurrent()==1.0);
psr->destroy();
} }
MAIN(testExampleRecord) MAIN(testExampleRecord)

View File

@ -71,7 +71,6 @@ static void test()
pvRecord->unlock(); pvRecord->unlock();
} }
if(debug) {cout << "processed exampleDouble " << endl; } if(debug) {cout << "processed exampleDouble " << endl; }
channelProvider->destroy();
} }
MAIN(testLocalProvider) MAIN(testLocalProvider)

View File

@ -281,7 +281,6 @@ static void scalarTest()
string request; string request;
PVStructurePtr pvRequest; PVStructurePtr pvRequest;
PVCopyPtr pvCopy; PVCopyPtr pvCopy;
string builder;
string valueNameRecord; string valueNameRecord;
string valueNameCopy; string valueNameCopy;
@ -313,7 +312,6 @@ static void scalarTest()
pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,""); pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,"");
valueNameCopy = "value"; valueNameCopy = "value";
testPVScalar(valueNameRecord,valueNameCopy,pvRecord,pvCopy); testPVScalar(valueNameRecord,valueNameCopy,pvRecord,pvCopy);
pvRecord->destroy();
} }
static void arrayTest() static void arrayTest()
@ -324,7 +322,6 @@ static void arrayTest()
string request; string request;
PVStructurePtr pvRequest; PVStructurePtr pvRequest;
PVCopyPtr pvCopy; PVCopyPtr pvCopy;
string builder;
string valueNameRecord; string valueNameRecord;
string valueNameCopy; string valueNameCopy;
@ -350,7 +347,6 @@ static void arrayTest()
pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,""); pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,"");
valueNameCopy = "value"; valueNameCopy = "value";
testPVScalarArray(valueNameRecord,valueNameCopy,pvRecord,pvCopy); testPVScalarArray(valueNameRecord,valueNameCopy,pvRecord,pvCopy);
pvRecord->destroy();
} }
static void powerSupplyTest() static void powerSupplyTest()
@ -361,7 +357,6 @@ static void powerSupplyTest()
string request; string request;
PVStructurePtr pvRequest; PVStructurePtr pvRequest;
PVCopyPtr pvCopy; PVCopyPtr pvCopy;
string builder;
string valueNameRecord; string valueNameRecord;
string valueNameCopy; string valueNameCopy;
@ -395,7 +390,6 @@ static void powerSupplyTest()
pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,""); pvCopy = PVCopy::create(pvRecord->getPVRecordStructure()->getPVStructure(),pvRequest,"");
valueNameCopy = "power.value"; valueNameCopy = "power.value";
testPVScalar(valueNameRecord,valueNameCopy,pvRecord,pvCopy); testPVScalar(valueNameRecord,valueNameCopy,pvRecord,pvCopy);
pvRecord->destroy();
} }
MAIN(testPVCopy) MAIN(testPVCopy)

View File

@ -69,7 +69,6 @@ static void scalarTest()
if(pvRecord && debug) { if(pvRecord && debug) {
cout << pvRecord << endl; cout << pvRecord << endl;
} }
pvRecord->destroy();
} }
static void arrayTest() static void arrayTest()
@ -81,7 +80,6 @@ static void arrayTest()
if(pvRecord && debug) { if(pvRecord && debug) {
cout << pvRecord << endl; cout << pvRecord << endl;
} }
pvRecord->destroy();
} }
static void powerSupplyTest() static void powerSupplyTest()
@ -94,7 +92,6 @@ static void powerSupplyTest()
if(pvRecord && debug) { if(pvRecord && debug) {
cout << pvRecord << endl; cout << pvRecord << endl;
} }
pvRecord->destroy();
} }
MAIN(testPVRecord) MAIN(testPVRecord)

274
test/src/testPlugin.cpp Normal file
View File

@ -0,0 +1,274 @@
/*testPluginMain.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvData is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
/**
* @author mrk
*/
/* Author: Marty Kraimer */
#include <epicsUnitTest.h>
#include <testMain.h>
#include <cstddef>
#include <cstdlib>
#include <cstddef>
#include <string>
#include <cstdio>
#include <memory>
#include <iostream>
#include <epicsStdio.h>
#include <epicsMutex.h>
#include <epicsEvent.h>
#include <epicsThread.h>
#include <pv/standardField.h>
#include <pv/standardPVField.h>
#include <pv/channelProviderLocal.h>
#include <pv/convert.h>
#define epicsExportSharedSymbols
#include "powerSupply.h"
using namespace std;
using std::tr1::static_pointer_cast;
using namespace epics::pvData;
using namespace epics::pvAccess;
using namespace epics::pvDatabase;
static bool debug = true;
static void deadbandTest()
{
if(debug) {cout << endl << endl << "****deadbandTest****" << endl;}
bool result = false;
uint32 nset = 0;
PVStructurePtr pvRecordStructure(getStandardPVField()->scalar(pvDouble,""));
PVRecordPtr pvRecord(PVRecord::create("doubleRecord",pvRecordStructure));
PVStructurePtr pvRequest(CreateRequest::create()->createRequest("value[deadband=abs:1.0]"));
PVCopyPtr pvCopy(PVCopy::create(pvRecordStructure,pvRequest,""));
PVStructurePtr pvStructureCopy(pvCopy->createPVStructure());
BitSetPtr bitSet(new BitSet(pvStructureCopy->getNumberFields()));
PVDoublePtr pvValue(pvRecordStructure->getSubField<PVDouble>("value"));
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "initial"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==true);
testOk1(nset==1);
pvValue->put(.1);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvValue"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==false);
testOk1(nset==0);
pvValue->put(1.0);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvValue"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==true);
testOk1(nset==1);
}
static void arrayTest()
{
if(debug) {cout << endl << endl << "****arrayTest****" << endl;}
bool result = false;
uint32 nset = 0;
size_t n = 10;
shared_vector<double> values(n);
PVStructurePtr pvRecordStructure(getStandardPVField()->scalarArray(pvDouble,""));
PVRecordPtr pvRecord(PVRecord::create("doubleArrayRecord",pvRecordStructure));
PVStructurePtr pvRequest(CreateRequest::create()->createRequest("value[array=1:3]"));
PVCopyPtr pvCopy(PVCopy::create(pvRecordStructure,pvRequest,""));
PVStructurePtr pvStructureCopy(pvCopy->createPVStructure());
BitSetPtr bitSet(new BitSet(pvStructureCopy->getNumberFields()));
PVDoubleArrayPtr pvValue(pvRecordStructure->getSubField<PVDoubleArray>("value"));
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "initial"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< "\n";
}
testOk1(result==false);
testOk1(nset==0);
for(size_t i=0; i<n; i++) values[i] = i + .06;
const shared_vector<const double> yyy(freeze(values));
pvValue->putFrom(yyy);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvValue"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==true);
testOk1(nset==1);
}
static void timeStampTest()
{
if(debug) {cout << endl << endl << "****timeStampTest****" << endl;}
bool result = false;
uint32 nset = 0;
PVStructurePtr pvRecordStructure(getStandardPVField()->scalar(pvDouble,"timeStamp"));
PVRecordPtr pvRecord(PVRecord::create("doubleRecord",pvRecordStructure));
PVStructurePtr pvRequest(CreateRequest::create()->createRequest("value,timeStamp[timestamp=current]"));
PVCopyPtr pvCopy(PVCopy::create(pvRecordStructure,pvRequest,""));
PVStructurePtr pvStructureCopy(pvCopy->createPVStructure());
BitSetPtr bitSet(new BitSet(pvStructureCopy->getNumberFields()));
PVDoublePtr pvValue(pvRecordStructure->getSubField<PVDouble>("value"));
if(debug) {
cout << "initial"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after update"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==true);
testOk1(nset==1);
pvRecord->process();
pvValue->put(1.0);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvValue"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< " pvRecordStructure\n" << pvRecordStructure
<< "\n";
}
testOk1(result==true);
testOk1(nset==2);
}
static void ignoreTest()
{
if(debug) {cout << endl << endl << "****ignoreTest****" << endl;}
bool result = false;
uint32 nset = 0;
PVStructurePtr pvRecordStructure(getStandardPVField()->scalar(pvDouble,"alarm,timeStamp"));
PVRecordPtr pvRecord(PVRecord::create("doubleRecord",pvRecordStructure));
PVStructurePtr pvRequest(CreateRequest::create()->createRequest("value,alarm[ignore=true],timeStamp[ignore=true]"));
PVCopyPtr pvCopy(PVCopy::create(pvRecordStructure,pvRequest,""));
PVStructurePtr pvStructureCopy(pvCopy->createPVStructure());
BitSetPtr bitSet(new BitSet(pvStructureCopy->getNumberFields()));
PVDoublePtr pvValue(pvRecordStructure->getSubField<PVDouble>("value"));
PVStringPtr pvMessage(pvRecordStructure->getSubField<PVString>("alarm.message"));
PVIntPtr pvUserTag(pvRecordStructure->getSubField<PVInt>("timeStamp.userTag"));
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "initial"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< "\n";
}
testOk1(result==false);
testOk1(nset==0);
pvMessage->put("test message");
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvMessage"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< "\n";
}
testOk1(result==false);
testOk1(nset==1);
pvUserTag->put(50);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvMessage"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< "\n";
}
testOk1(result==false);
testOk1(nset==2);
pvValue->put(1.0);
result = pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet);
nset = bitSet->cardinality();
if(debug) {
cout << "after pvValue"
<< " result " << (result ? "true" : "false")
<< " nset " << nset
<< " bitSet " << *bitSet
<< " pvStructureCopy\n" << pvStructureCopy
<< "\n";
}
testOk1(result==true);
testOk1(nset==3);
}
MAIN(testPlugin)
{
testPlan(22);
deadbandTest();
arrayTest();
timeStampTest();
ignoreTest();
return 0;
}