From e66768314f86c33b29b50e45411ff132643e88bd Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 13 Nov 2006 20:21:05 +0000 Subject: [PATCH] Converted to use epicsUntiTest.h. --- src/libCom/test/Makefile | 15 +++--- src/libCom/test/blockingSockTest.cpp | 68 ++++++++++++++++------------ 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/src/libCom/test/Makefile b/src/libCom/test/Makefile index eba97a129..58d62f46d 100644 --- a/src/libCom/test/Makefile +++ b/src/libCom/test/Makefile @@ -103,6 +103,14 @@ macEnvExpandTest_SRCS += macEnvExpandTest.c testHarness_SRCS += macEnvExpandTest.c TESTS += macEnvExpandTest +TESTPROD_HOST += blockingSockTest +blockingSockTest_SRCS += blockingSockTest.cpp +testHarness_SRCS += blockingSockTest.cpp +# needed when its an object library build +blockingSockTest_SYS_LIBS_WIN32 = ws2_32 advapi32 user32 +blockingSockTest_SYS_LIBS_solaris = socket +TESTS += blockingSockTest + # The testHarness runs all the test programs in a known working order. testHarness_SRCS += epicsRunLibComTests.c @@ -129,13 +137,6 @@ TESTPROD_HOST += epicsMaxThreads epicsMaxThreads_SRCS += epicsMaxThreads.c testHarness_SRCS += epicsMaxThreads.c -TESTPROD_HOST += blockingSockTest -blockingSockTest_SRCS += blockingSockTest.cpp -testHarness_SRCS += blockingSockTest.cpp -# needed when its an object library build -blockingSockTest_SYS_LIBS_WIN32 = ws2_32 advapi32 user32 -blockingSockTest_SYS_LIBS_solaris = socket - TESTPROD_HOST += buckTest buckTest_SRCS += buckTest.c testHarness_SRCS += buckTest.c diff --git a/src/libCom/test/blockingSockTest.cpp b/src/libCom/test/blockingSockTest.cpp index 14b20cbff..d182e638f 100644 --- a/src/libCom/test/blockingSockTest.cpp +++ b/src/libCom/test/blockingSockTest.cpp @@ -15,10 +15,11 @@ #include "osiWireFormat.h" #include "epicsThread.h" #include "epicsSignal.h" +#include "epicsUnitTest.h" #include "testMain.h" union address { - struct sockaddr_in ia; + struct sockaddr_in ia; struct sockaddr sa; }; @@ -107,21 +108,19 @@ void circuit::recvTest () int status = recv ( this->sock, buf, (int) sizeof ( buf ), 0 ); if ( status == 0 ) { - printf ( "%s: %s was disconnected\n", - __FILE__, this->pName () ); + testDiag ( "%s was disconnected", this->pName () ); this->recvWakeup = true; break; } else if ( status > 0 ) { - printf ( "%s: client received %i characters\n", - __FILE__, status ); + testDiag ( "client received %i characters", status ); } else { char sockErrBuf[64]; epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) ); - printf ( "%s: %s socket recv() error was \"%s\"\n", - __FILE__, this->pName (), sockErrBuf ); + testDiag ( "%s socket recv() error was \"%s\"\n", + this->pName (), sockErrBuf ); this->recvWakeup = true; break; } @@ -215,8 +214,29 @@ const char * serverCircuit::pName () return "server circuit"; } +static const char *mechName(int mech) +{ + static const struct { + int mech; + const char *name; + } mechs[] = { + {-1, "Unknown shutdown mechanism" }, + {esscimqi_socketCloseRequired, "esscimqi_socketCloseRequired" }, + {esscimqi_socketBothShutdownRequired, "esscimqi_socketBothShutdownRequired" }, + {esscimqi_socketSigAlarmRequired, "esscimqi_socketSigAlarmRequired" } + }; + + for (unsigned i=0; i < (sizeof(mechs) / sizeof(mechs[0])); ++i) { + if (mech == mechs[i].mech) + return mechs[i].name; + } + return "Unknown shutdown mechanism value"; +} + MAIN(blockingSockTest) { + testPlan(1); + address addr; memset ( (char *) & addr, 0, sizeof ( addr ) ); addr.ia.sin_family = AF_INET; @@ -232,43 +252,31 @@ MAIN(blockingSockTest) client.shutdown (); epicsThreadSleep ( 1.0 ); - const char * pStr = "esscimqi_?????"; + int mech = -1; if ( client.recvWakeupDetected () ) { - pStr = "esscimqi_socketBothShutdownRequired"; + mech = esscimqi_socketBothShutdownRequired; } else { client.signal (); epicsThreadSleep ( 1.0 ); if ( client.recvWakeupDetected () ) { - pStr = "esscimqi_socketSigAlarmRequired"; + mech = esscimqi_socketSigAlarmRequired; } else { client.close (); epicsThreadSleep ( 1.0 ); if ( client.recvWakeupDetected () ) { - pStr = "esscimqi_socketCloseRequired"; - } - else { - pStr = "esscimqi_?????"; + mech = esscimqi_socketCloseRequired; } } } + testDiag("This OS behaves like \"%s\".", mechName(mech)); - printf ( "The local OS behaves like \"%s\".\n", pStr ); - pStr = "esscimqi_?????"; - switch ( epicsSocketSystemCallInterruptMechanismQuery() ) { - case esscimqi_socketCloseRequired: - pStr = "esscimqi_socketCloseRequired"; - break; - case esscimqi_socketBothShutdownRequired: - pStr = "esscimqi_socketBothShutdownRequired"; - break; - case esscimqi_socketSigAlarmRequired: - pStr = "esscimqi_socketSigAlarmRequired"; - break; - } - printf ( "The epicsSocketSystemCallInterruptMechanismQuery() function returns\n\"%s\".\n", - pStr ); - return 0; + if (! testOk(mech = epicsSocketSystemCallInterruptMechanismQuery (), + "Socket shutdown mechanism") ) + testDiag("epicsSocketSystemCallInterruptMechanismQuery returned \"%s\"", + mechName(epicsSocketSystemCallInterruptMechanismQuery () ) ); + + return testDone(); }