dbServer: Only call client() and report() methods when running

Also adjusts the tests to confirm that behaviour.
This commit is contained in:
Andrew Johnson
2017-10-26 13:02:20 -05:00
parent 11d2a64507
commit 77de87cfb0
2 changed files with 25 additions and 13 deletions

View File

@@ -98,8 +98,8 @@ void dbsr(unsigned level)
printf("Server state: %s\n", stateNames[state]);
while (psrv) {
printf("Server '%s':\n", psrv->name);
if (psrv->report)
printf("Server '%s'\n", psrv->name);
if (state == running && psrv->report)
psrv->report(level);
psrv = (dbServer *)ellNext(&psrv->node);
}
@@ -109,6 +109,9 @@ int dbServerClient(char *pBuf, size_t bufSize)
{
dbServer *psrv = (dbServer *)ellFirst(&serverList);
if (state != running)
return -1;
while (psrv) {
if (psrv->client &&
psrv->client(pBuf, bufSize) == 0)

View File

@@ -123,7 +123,7 @@ MAIN(dbServerTest)
char *theName = "The One";
int status;
testPlan(20);
testPlan(24);
/* Prove that we handle substring names properly */
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones");
@@ -144,6 +144,7 @@ MAIN(dbServerTest)
testDiag("Registering dbServer 'disabled'");
testOk(dbRegisterServer(&disabled) == 0, "Registration accepted");
testDiag("Changing server state");
dbInitServers();
testOk(oneState == INIT_CALLED, "dbInitServers");
testOk(disInitialized == 0, "Disabled server not initialized");
@@ -153,29 +154,37 @@ MAIN(dbServerTest)
testOk(oneState == RUN_CALLED, "dbRunServers");
testOk(dbUnregisterServer(&one) != 0, "No unregistration while active");
dbPauseServers();
testOk(oneState == PAUSE_CALLED, "dbPauseServers");
dbStopServers();
testOk(oneState == STOP_CALLED, "dbStopServers");
testOk(dbUnregisterServer(&toolate) != 0, "No unreg' if not reg'ed");
testOk(dbUnregisterServer(&no_routines) != 0, "No unreg' of 'no-routines'");
testDiag("Printing server report");
testDiag("Checking server methods called");
dbsr(0);
testOk(oneState == REPORT_CALLED, "dbsr");
testOk(oneState == REPORT_CALLED, "dbsr called report()");
oneSim = NULL;
name[0] = 0;
status = dbServerClient(name, sizeof(name));
testOk(oneState == CLIENT_CALLED_UNKNOWN, "Client unknown");
testOk(status == -1 && name[0] == 0,
"dbServerClient mismatch");
oneSim = theName;
name[0] = 0;
status = dbServerClient(name, sizeof(name));
testOk(oneState == CLIENT_CALLED_KNOWN, "Client known");
testOk(status == 0 && strcmp(name, theName) == 0,
"dbServerClient match");
dbPauseServers();
testOk(oneState == PAUSE_CALLED, "dbPauseServers");
dbsr(0);
testOk(oneState != REPORT_CALLED, "No call to report() when paused");
status = dbServerClient(name, sizeof(name));
testOk(oneState != CLIENT_CALLED_KNOWN, "No call to client() when paused");
dbStopServers();
testOk(oneState == STOP_CALLED, "dbStopServers");
testOk(dbUnregisterServer(&toolate) != 0, "No unreg' if not reg'ed");
testOk(dbUnregisterServer(&no_routines) != 0, "No unreg' of 'no-routines'");
return testDone();
}