cdev-1.7.2n

This commit is contained in:
2022-12-13 12:44:04 +01:00
commit b3b88fc333
1357 changed files with 338883 additions and 0 deletions
@@ -0,0 +1,30 @@
service Gateway
{
tags {server}
}
class Tests
{
verbs {get, set}
attributes
{
default Gateway;
clientID Gateway;
servers Gateway;
connections Gateway;
attrib Gateway {server=Gateway1};
ClientInfo Gateway {server=Gateway1};
ServerInfo Gateway {server=Gateway1};
}
messages
{
shutdown Gateway;
}
}
Tests :
device1,
device2,
device3
;
@@ -0,0 +1,4 @@
all commit clean purge:
@$(MAKE) $@ -f Makefile.service
@$(MAKE) $@ -f Makefile.server
@@ -0,0 +1,16 @@
ARCH = OS
SHOBJ = YES
include ../../include/makeinclude/Makefile.$(ARCH)
APPNAME = "Transmission Test Server"
OUTPUTDIR = $(BASEBIN)
CXXINCLUDES = -I./
LIBS = -L$(CDEVLIB) -lcdevGenericServer $(CDEVLIBS) $(OSLIBS)
TARGETS = $(OUTPUTDIR)/TestServer
targets : $(TARGETS)
$(OUTPUTDIR)/TestServer : $(OBJDIR)/TestServer.o
$(LINK.cc) $^ $(LIBS) -o $@
@@ -0,0 +1,37 @@
ARCH = OS
SHOBJ = YES
include ../../include/makeinclude/Makefile.$(ARCH)
APPNAME = "Transmission Test Client"
CXXINCLUDES = -I./
# ******************************************************************************
# * The BINARIES definition names all of the binary files that should be deleted
# * whenever "make clean" is executed.
# ******************************************************************************
BINARIES = $(BASELIB)/libTestService.a \
$(BASELIB)/TestService.so \
$(BASEBIN)/TestProgram
ifeq ($(SHOBJ), YES)
LIBS = -L$(CDEVLIB) -lcdevGenericServer $(CDEVLIBS) $(OSLIBS)
TARGETS = $(BASELIB)/TestService.so $(BASEBIN)/TestProgram
else
LIBS = -L$(CDEVLIB) -lcdevGenericServer $(CDEVLIBS) $(OSLIBS)
TARGETS = $(BASELIB)/libTestService.a $(BASEBIN)/TestProgram
endif
targets : $(TARGETS)
$(BASELIB)/TestService.so : $(OBJDIR)/TestService.o
$(LINK.so) -o $@ $^ -L$(CDEVLIB) -lcdevGenericServer $(NETLIBS)
@mkdir -p $(CDEVSHOBJ)/$(CDEVVERSION)
@cp $@ $(CDEVSHOBJ)/$(CDEVVERSION)/$(@F)
$(BASELIB)/libTestService.a : $(OBJDIR)/TestService.o
$(LINK.a) $@ $^
@$(RANLIB) $@ > /dev/null
$(BASEBIN)/TestProgram : $(OBJDIR)/TestProgram.o
$(LINK.cc) $^ -o $@ $(LIBS)
@@ -0,0 +1,6 @@
notarget : all
all clean purge:
@$(MAKE) /NOLOGO $@ -f NMakefile.service
@$(MAKE) /NOLOGO $@ -f NMakefile.server
@@ -0,0 +1,20 @@
.SUFFIXES: .cc .obj
APPNAME = Transmission Test Server
ARCH = WINNT-4.0
SHOBJ = YES
BINARIES = $(BASEBIN)\TestServer.exe
include ..\..\include\makeinclude\Makefile.WINNT-4.0
CXXINCLUDES = /I .\\
targets : $(BINARIES)
$(BASEBIN)\TestServer.exe : .exec\$(TARGETDIR)\TestServer.obj
-@if exist $@ erase $@
@echo ^ ^ ^ ^ ^ ^ =^> Linking $(@F)
$(LINK) $(CDEVLIB)\cdev.lib $(CDEVLIB)\cdevGenericServer.lib \
$(LINK_EXE_FLAGS) /out:$@ $?
@echo ^ ^ ^ ^ ^ ^ ^ ^ ^ Done...
@@ -0,0 +1,49 @@
.SUFFIXES: .cc .obj
APPNAME = Transmission Test Client
ARCH = WINNT-4.0
SHOBJ = YES
BINARIES = $(CDEVLIB)\TestService.lib \
$(CDEVLIB)\TestService.dll \
$(BASEBIN)\TestProgram.exe
include ..\..\include\makeinclude\Makefile.WINNT-4.0
CXXINCLUDES = /I .\\
CXXEXTRA_DLL = /D "TEST_SERVICE_API=__declspec(dllexport)"
CXXEXTRA_LIB = /D "TEST_SERVICE_API="
!IF "$(SHOBJ)" == "YES"
TARGETS = $(CDEVLIB)\TestService.dll $(BASEBIN)\TestProgram.exe
!ELSE
TARGETS = $(CDEVLIB)\TestService.lib $(BASEBIN)\TestProgram.exe
!ENDIF
targets : $(TARGETS)
$(CDEVLIB)\TestService.dll : $(OBJDIR)\TestService.obj
@echo ^ ^ ^ =^> Linking $(@F)
-@if exist $@ erase $@
-@if not exist $(@D) mkdir $(@D)
@$(LIB32) $(CDEVLIB)\cdev.lib $(CDEVLIB)\cdevGenericServer.lib\
$(LINK_DLL_FLAGS) /out:$@ /implib:$(@D)\$(@B).lib $?
-@copy $@ $(CDEVSHOBJ)\$(CDEVVERSION)\$(@F) > nul
@echo ^ ^ ^ ^ ^ ^ Done...
$(CDEVLIB)\TestService.lib : $(OBJDIR)\TestService.obj
@echo ^ ^ ^ =^> Linking $(@F)
-@if exist $@ erase $@
-@if not exist $(@D) mkdir $(@D)
@$(LIB32) $(CDEVLIB)\cdev.lib $(CDEVLIB)\cdevGenericServer.lib\
$(LINK_LIB_FLAGS) /out:$@ $?
@echo ^ ^ ^ ^ ^ ^ Done...
$(BASEBIN)\TestProgram.exe : .exec\$(TARGETDIR)\TestProgram.obj
-@if exist $@ erase $@
@echo ^ ^ ^ ^ ^ ^ =^> Linking $(@F)
$(LINK) $(CDEVLIB)\cdev.lib $(CDEVLIB)\cdevGenericServer.lib\
$(LINK_EXE_FLAGS) /out:$@ $?
@echo ^ ^ ^ ^ ^ ^ ^ ^ ^ Done...
@@ -0,0 +1,179 @@
#include <ctype.h>
#include <signal.h>
#include <cdevSystem.h>
#include <cdevRequestObject.h>
#include <cdevDevice.h>
#include <cdevGroup.h>
#include <cdevCommon.h>
#include <testMessages.cc>
int fouled = 0;
int expectedHits = 0;
int hits = 0;
unsigned totalCount = 0;
void callback ( int status, void * arg, cdevRequestObject &, cdevData & data)
{
hits++;
if(status!=CDEV_SUCCESS)
{
printf("ERROR: Transmission failure of %i\n", (int)arg);
}
else
{
if(data!=*TestMessage[(int)arg].getData())
{
fouled = 1;
printf("ERROR: Mismatch on entry %i - Inbound data differs from expected\n",
(int)arg);
printf("----------------------------- INBOUND DATA -----------------------------\n");
data.asciiDump();
printf("----------------------------- EXPECTED DATA ----------------------------\n");
TestMessage[(int)arg].getData()->asciiDump();
}
else
{
totalCount++;
if(totalCount%100==0)
{
printf("Transmission %i still matches correctly\n", totalCount);
}
}
}
}
int main(int argc, char ** argv)
{
createTestMessages();
int maxCount = 0;
int group1 = TestMessageCount/3;
int group2 = group1+group1;
cdevRequestObject &tReq = cdevRequestObject::attachRef(TestMessage[TestMessageIndex].getDeviceList()[0], TestMessage[TestMessageIndex].getMessage());
tReq.setContext(*TestMessage[0].getContext());
if(argc>1) maxCount = atoi(argv[1]);
while(!fouled && (!maxCount || maxCount<totalCount))
{
hits = 0;
expectedHits = 0;
for(TestMessageIndex = 0; TestMessageIndex<group1; TestMessageIndex++)
{
int mismatch = 0;
cdevData data;
cdevRequestObject * req = cdevRequestObject::attachPtr(TestMessage[TestMessageIndex].getDeviceList()[0], TestMessage[TestMessageIndex].getMessage());
req->setContext(*TestMessage[TestMessageIndex].getContext());
if(req->send(TestMessage[TestMessageIndex].getData(), &data)==CDEV_SUCCESS)
{
if(data!=*TestMessage[TestMessageIndex].getData())
{
fouled = -1;
printf("ERROR: Mismatch on entry %i - Inbound data differs from expected\n",
TestMessageIndex);
printf("----------------------------- INBOUND DATA -----------------------------\n");
data.asciiDump();
printf("----------------------------- EXPECTED DATA ----------------------------\n");
TestMessage[TestMessageIndex].getData()->asciiDump();
}
else
{
totalCount++;
if(totalCount%100==0)
{
printf("Transmission %i still matches correctly\n", totalCount);
}
}
}
else {
printf("ERROR: Transmission failure of %i\n",
TestMessageIndex);
}
}
for( ; TestMessageIndex<group2; TestMessageIndex++)
{
cdevCallback cb(callback, (void *)TestMessageIndex);
int mismatch = 0;
cdevData data;
cdevRequestObject * req = cdevRequestObject::attachPtr(TestMessage[TestMessageIndex].getDeviceList()[0], TestMessage[TestMessageIndex].getMessage());
req->setContext(*TestMessage[TestMessageIndex].getContext());
if(req->sendCallback(TestMessage[TestMessageIndex].getData(), cb)!=CDEV_SUCCESS)
{
fouled = -1;
printf("ERROR: Transmission failure of %i\n",
TestMessageIndex);
}
else expectedHits++;
}
for(int retryCnt=0; hits<expectedHits && retryCnt<1000; retryCnt++)
{
cdevSystem::defaultSystem().poll();
}
if(hits<expectedHits)
{
printf("ERROR: Processed only %i of %i callback requests after %i attempts\n", hits, expectedHits, retryCnt);
}
cdevData * outputData = new cdevData[TestMessageCount - (group2)];
cdevGroup group;
group.start();
for(int dataIdx=0; TestMessageIndex<TestMessageCount; TestMessageIndex++, dataIdx++)
{
int mismatch = 0;
cdevData data;
cdevRequestObject * req = cdevRequestObject::attachPtr(TestMessage[TestMessageIndex].getDeviceList()[0], TestMessage[TestMessageIndex].getMessage());
req->setContext(*TestMessage[TestMessageIndex].getContext());
if(req->sendNoBlock(TestMessage[TestMessageIndex].getData(), outputData[dataIdx])!=CDEV_SUCCESS)
{
fouled = -1;
printf("ERROR: Transmission failure of %i\n",
TestMessageIndex);
}
}
group.end();
for(int grpRetryCnt=0; !group.allFinished() && grpRetryCnt<1000; grpRetryCnt++)
{
group.poll();
}
if(!group.allFinished())
{
printf("ERROR: Failed to process all group requests after %i attempts\n", grpRetryCnt);
}
for(dataIdx=0, TestMessageIndex=group2; TestMessageIndex<TestMessageCount; TestMessageIndex++, dataIdx++)
{
if(outputData[dataIdx]!=*TestMessage[TestMessageIndex].getData())
{
fouled = -1;
printf("ERROR: Mismatch on entry %i - Inbound data differs from expected\n",
TestMessageIndex);
printf("----------------------------- INBOUND DATA -----------------------------\n");
outputData[dataIdx].asciiDump();
printf("----------------------------- EXPECTED DATA ----------------------------\n");
TestMessage[TestMessageIndex].getData()->asciiDump();
}
else
{
totalCount++;
if(totalCount%100==0)
{
printf("Transmission %i still matches correctly\n", totalCount);
}
}
}
delete [] outputData;
}
return 1;
}
@@ -0,0 +1,160 @@
#include <cdevServer.h>
#include <testMessages.cc>
class myServer : public cdevServer
{
private:
IntHash TestIndexes;
unsigned totalCount;
public:
myServer ( void )
: cdevServer(), totalCount(0)
{
}
myServer ( char * domain, char * server, unsigned int port, double pulse )
: cdevServer(domain, server, port, pulse), totalCount(0)
{
}
virtual void processMessages ( void )
{
cdevMessage * message;
while(dequeue(message)==0)
{
if(!strcmp(message->getMessage(), "register"))
{
int * ptr = new int;
TestIndexes.insert((int)message->getClientID(), (void *)ptr);
printf("Starting Testing on Client %i\n", message->getClientID());
}
else if(!strcmp(message->getMessage(), "unregister"))
{
int * ptr = NULL;
if((ptr = (int *)TestIndexes.find((int)message->getClientID()))!=NULL)
{
TestIndexes.remove((int)message->getClientID());
delete ptr;
}
printf("Finishing Testing on Client %i\n", message->getClientID());
}
else
{
int ptr = 0;
int *idxPtr = (int *)TestIndexes.find((int)message->getClientID());
int curPtr = 0;
if(idxPtr == NULL)
{
printf("ERROR: Failed to retrieve the index for client %i\n", message->getClientID());
idxPtr = &ptr;
}
if(*idxPtr >= TestMessageCount) *idxPtr = 0;
if(message->getData()==NULL)
{
printf("ERROR: NULL data received from client %i\n", message->getClientID());
}
else
{
message->getData()->get("packetNumber", &curPtr);
if(curPtr!=*idxPtr)
{
printf("Mismatch between packet number %i and expected %i\n", curPtr, *idxPtr);
*idxPtr = curPtr;
}
int mismatch = 0;
if(strcmp(message->getDeviceList()[0], TestMessage[*idxPtr].getDeviceList()[0]))
{
printf("ERROR: Client %i mismatch on entry %i - Device \"%s\" not equal to \"%s\"\n",
message->getClientID(),
*idxPtr,
message->getDeviceList()[0],
TestMessage[*idxPtr].getDeviceList()[0]);
mismatch++;
}
if(strcmp(message->getMessage(), TestMessage[*idxPtr].getMessage()))
{
printf("ERROR: Client %i mismatch on entry %i - Message \"%s\" not equal to \"%s\"\n",
message->getClientID(),
*idxPtr,
message->getMessage(),
TestMessage[*idxPtr].getMessage());
mismatch++;
}
if(message->getData()==NULL)
{
printf("ERROR: Client %i mismatch on entry %i - Inbound data is NULL\n",
message->getClientID(),
*idxPtr);
mismatch++;
}
else if(*message->getData()!=*TestMessage[*idxPtr].getData())
{
printf("ERROR: Client %i mismatch on entry %i - Inbound data differs from expected\n",
message->getClientID(),
*idxPtr);
printf("----------------------------- INBOUND DATA -----------------------------\n");
message->getData()->asciiDump();
printf("----------------------------- EXPECTED DATA ----------------------------\n");
TestMessage[*idxPtr].getData()->asciiDump();
mismatch++;
}
if(message->getContext()==NULL && TestMessage[*idxPtr].getContext()!=NULL)
{
printf("ERROR: Client %i mismatch on entry %i - Inbound context is NULL\n",
message->getClientID(),
*idxPtr);
mismatch++;
}
else if(TestMessage[*idxPtr].getContext()==NULL)
{
}
else if(*message->getContext()!=*TestMessage[*idxPtr].getContext())
{
printf("ERROR: Client %i mismatch on entry %i - Inbound context differs from expected\n",
message->getClientID(),
*idxPtr);
printf("---------------------------- INBOUND CONTEXT ---------------------------\n");
message->getContext()->asciiDump();
printf("---------------------------- EXPECTED CONTEXT --------------------------\n");
TestMessage[*idxPtr].getContext()->asciiDump();
mismatch++;
}
if(mismatch) printf("\n\n");
else {
totalCount++;
if(totalCount%1000==0) printf("Transmission %i still matches correctly\n", totalCount);
}
(*idxPtr)++;
}
}
enqueue(message);
delete message;
}
}
};
int main(int argc, char ** argv)
{
char * name;
short port;
name = (argc>1)?argv[1]:(char *)"TestServer1";
port = 0;
cdevSystem::defaultSystem().setThreshold(CDEV_SEVERITY_INFO);
myServer *server = new myServer();
server->startServer("TEST", name, port, 60.0, 1);
createTestMessages();
cdevServer::runServer();
delete server;
return 0;
}
@@ -0,0 +1,17 @@
#include <TestService.h>
extern "C" cdevService * newTestService ( char * name, cdevSystem * system )
{
return new TestService(name, *system);
}
TestService::TestService ( char * name, cdevSystem & system)
: cdevClientService("TEST", name, system)
{
system.reportError(CDEV_SEVERITY_INFO, "TestService", NULL,
"Constructing a new TestService");
}
TestService::~TestService ( void )
{
}
@@ -0,0 +1,30 @@
service Test
{
tags {server}
}
class Tests
{
verbs {get, set}
attributes
{
default Test;
clientID Test;
servers Test;
connections Test;
attrib Test {server=TestServer1};
ClientInfo Test {server=TestServer1};
ServerInfo Test {server=TestServer1};
}
messages
{
shutdown Test;
}
}
Tests :
device1,
device2,
device3
;
@@ -0,0 +1,17 @@
#include <cdevClientService.h>
#ifndef TEST_SERVICE_API
#define TEST_SERVICE_API
#endif
extern "C" TEST_SERVICE_API cdevService * newTestService ( char * name, cdevSystem * system );
class TestService : public cdevClientService
{
public:
TestService ( char * name, cdevSystem & system = cdevSystem::defaultSystem());
protected:
virtual ~TestService ( void );
};
@@ -0,0 +1,21 @@
21 value
20 status
19 severity
18 time
17 units
16 displayHigh
15 displayLow
14 alarmHigh
13 alarmLow
12 warningHigh
11 warningLow
10 controlHigh
9 controlLow
8 bitMask
7 file
6 class
5 device
4 message
3 verb
2 attribute
1 collection
@@ -0,0 +1,45 @@
#include <IntHash.h>
#include <cdevMessage.h>
const size_t TestMessageCount = 1000;
cdevMessage TestMessage[TestMessageCount];
char *TestDeviceName = "device1";
int TestMessageIndex = 0;
void createTestMessages ( void )
{
cdevData data;
cdevData context;
for(int i=0; i<TestMessageCount; i++)
{
data.addTag("packetNumber");
data.insert("packetNumber", i);
data.insert("value", i*18+0);
data.insert("status", i*18+1);
data.insert("time", i*18+2);
data.insert("controlHigh", i*18+3);
data.insert("controlLow", i*18+4);
data.insert("alarmHigh", i*18+5);
data.insert("alarmLow", i*18+6);
data.insert("displayHigh", i*18+7);
data.insert("displayLow", i*18+8);
data.insert("resultCode", 0);
context.insert("value", i*18+9);
context.insert("status", i*18+10);
context.insert("time", i*18+11);
context.insert("controlHigh", i*18+12);
context.insert("controlLow", i*18+13);
context.insert("alarmHigh", i*18+14);
context.insert("alarmLow", i*18+15);
context.insert("displayHigh", i*18+16);
context.insert("displayLow", i*18+17);
TestMessage[i].setClientID (1);
TestMessage[i].setDeviceList (&TestDeviceName, 1, 1);
TestMessage[i].setMessage ("get attrib", 1);
TestMessage[i].setData (new cdevData(data));
TestMessage[i].setContext (new cdevData(context));
}
}