Give dbRegisterServer a return value (0/-1)
Add tests to check registration failures.
This commit is contained in:
@@ -22,17 +22,17 @@
|
||||
static ELLLIST serverList = ELLLIST_INIT;
|
||||
|
||||
|
||||
void dbRegisterServer(dbServer *psrv)
|
||||
int dbRegisterServer(dbServer *psrv)
|
||||
{
|
||||
const char * ignore = envGetConfigParamPtr(&EPICS_IOC_IGNORE_SERVERS);
|
||||
|
||||
if (!psrv || !psrv->name)
|
||||
return;
|
||||
return -1;
|
||||
|
||||
if (strchr(psrv->name, ' ')) {
|
||||
fprintf(stderr, "dbRegisterServer: Bad server name '%s'\n",
|
||||
psrv->name);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ignore) {
|
||||
@@ -44,7 +44,7 @@ void dbRegisterServer(dbServer *psrv)
|
||||
(found[len] == 0 || found[len] == ' ')) {
|
||||
fprintf(stderr, "dbRegisterServer: Ignoring '%s', per environment\n",
|
||||
psrv->name);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
/* It was, try again further down */
|
||||
ignore = found + len;
|
||||
@@ -54,10 +54,11 @@ void dbRegisterServer(dbServer *psrv)
|
||||
if (ellNext(&psrv->node) || ellLast(&serverList) == &psrv->node) {
|
||||
fprintf(stderr, "dbRegisterServer: '%s' registered twice?\n",
|
||||
psrv->name);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
ellAdd(&serverList, &psrv->node);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dbsr(unsigned level)
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
* the servers together, and to provide status and debugging information
|
||||
* to the IOC user/developer through a common set of commands.
|
||||
*
|
||||
* @todo Should dbRegisterServer() return an error status value?
|
||||
* No API is provided yet for calling stats() methods.
|
||||
* @todo No API is provided yet for calling stats() methods.
|
||||
* Nothing in the IOC calls dbStopServers(), not sure where it should go.
|
||||
*/
|
||||
|
||||
@@ -118,7 +117,7 @@ typedef struct dbServer {
|
||||
* This should only be called once for each server layer.
|
||||
* @param psrv Server information structure for the server
|
||||
*/
|
||||
epicsShareFunc void dbRegisterServer(dbServer *psrv);
|
||||
epicsShareFunc int dbRegisterServer(dbServer *psrv);
|
||||
|
||||
/** @brief Print dbServer Reports.
|
||||
*
|
||||
|
||||
@@ -104,6 +104,12 @@ dbServer disabled = {
|
||||
disInit, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
dbServer illegal = {
|
||||
ELLNODE_INIT, "bad name",
|
||||
NULL, NULL, NULL,
|
||||
disInit, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
|
||||
MAIN(dbServerTest)
|
||||
{
|
||||
@@ -111,24 +117,24 @@ MAIN(dbServerTest)
|
||||
char *theName = "The One";
|
||||
int status;
|
||||
|
||||
testPlan(9);
|
||||
testPlan(14);
|
||||
|
||||
/* Prove that we handle substring names properly */
|
||||
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones");
|
||||
|
||||
testDiag("Registering dbServer 'one'");
|
||||
dbRegisterServer(&one);
|
||||
testOk(dbRegisterServer(&one) == 0, "Registered 'one'");
|
||||
testOk1(oneState == NOTHING_CALLED);
|
||||
|
||||
testDiag("Expect double-registration warning for 'one':");
|
||||
dbRegisterServer(&one);
|
||||
testOk(dbRegisterServer(&one) != 0, "Duplicate registration rejected");
|
||||
testOk(dbRegisterServer(&illegal) != 0, "Illegal registration rejected");
|
||||
|
||||
testDiag("Registering dbServer 'no-routines'");
|
||||
dbRegisterServer(&no_routines);
|
||||
testOk(dbRegisterServer(&no_routines) == 0, "Registered 'no-routines'");
|
||||
|
||||
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "disabled nonexistent");
|
||||
testDiag("Registering dbServer 'disabled'");
|
||||
dbRegisterServer(&disabled);
|
||||
testOk(dbRegisterServer(&disabled) == 0, "Registration accepted");
|
||||
|
||||
dbInitServers();
|
||||
testOk(oneState == INIT_CALLED, "dbInitServers");
|
||||
@@ -143,6 +149,7 @@ MAIN(dbServerTest)
|
||||
dbStopServers();
|
||||
testOk(oneState == STOP_CALLED, "dbStopServers");
|
||||
|
||||
testDiag("Printing server report");
|
||||
dbsr(0);
|
||||
testOk(oneState == REPORT_CALLED, "dbsr");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user