Give dbRegisterServer a return value (0/-1)

Add tests to check registration failures.
This commit is contained in:
Andrew Johnson
2017-09-19 22:24:06 -05:00
parent d1018d27a4
commit a861760dbb
3 changed files with 21 additions and 14 deletions
+6 -5
View File
@@ -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)
+2 -3
View File
@@ -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.
*
+13 -6
View File
@@ -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");