void testSupportedAndRequiredFields() { SipUserAgent sipUA( 5090, 5090, 5091, NULL, NULL, // default publicAddress and defaultUser "127.0.0.1" ); // Supported CPPUNIT_ASSERT( ! sipUA.isExtensionAllowed( "nope" ) ); UtlString supported( "supported-1" ); sipUA.allowExtension( supported ); UtlString tmp; sipUA.getSupportedExtensions( tmp ); CPPUNIT_ASSERT( supported == tmp ); supported.toUpper(); CPPUNIT_ASSERT( sipUA.isExtensionAllowed( supported ) ); CPPUNIT_ASSERT( ! sipUA.isExtensionAllowed( "nope" ) ); // Required CPPUNIT_ASSERT( ! sipUA.isExtensionRequired( "nope" ) ); UtlString required( "required-1, required-2, required-3" ); UtlString copy_required( required ); copy_required += ','; ssize_t prev = 0; ssize_t index = copy_required.index( ',', prev ); while( UTL_NOT_FOUND != index ) { UtlString field = copy_required( prev, index - prev ); field.strip( UtlString::both ); sipUA.requireExtension( field ); prev = index + 1; index = copy_required.index( ',', prev ); } sipUA.getRequiredExtensions( tmp ); CPPUNIT_ASSERT( required == tmp ); index = copy_required.index( ',', prev ); while( UTL_NOT_FOUND != index ) { UtlString field = copy_required( prev, index - prev ); field.strip( UtlString::both ); field.toUpper(); CPPUNIT_ASSERT( sipUA.isExtensionRequired( field ) ); prev = index + 1; index = copy_required.index( ',', prev ); } CPPUNIT_ASSERT( ! sipUA.isExtensionRequired( "nope" ) ); }
void testShutdownNonBlocking() { int myPID = OsProcess::getCurrentPID(); int startingThreads; // Stop TimerTask and NatAgentTask before counting threads. // Some tests do not bother stopping them, so they may come started. OsTimerTask::destroyTimerTask(); OsNatAgentTask::releaseInstance(); // Count number of threads now. startingThreads = getNumThreads(myPID); // Simple invite message from siptest/src/siptest/invite.txt const char* SimpleMessage = "INVITE sip:[email protected] SIP/2.0\r\n" "Route: <sip:[email protected]:5064;lr>\r\n" "From: <sip:[email protected];user=phone>;tag=bbb\r\n" "To: <sip:[email protected]:3000;user=phone>\r\n" "Call-Id: 8\r\n" "Cseq: 1 INVITE\r\n" "Content-Length: 0\r\n" "\r\n"; SipMessage testMsg( SimpleMessage, strlen( SimpleMessage ) ); for(int i = 0; i < SHUTDOWN_TEST_ITERATIONS; ++i) { // Limit life time of lineMgr and refreshMgr. They should be freed // before releasing OsNatAgentTask instance, or we will crash. { SipLineMgr lineMgr; SipRefreshMgr refreshMgr; lineMgr.StartLineMgr(); lineMgr.initializeRefreshMgr( &refreshMgr ); SipUserAgent sipUA( 5090 ,5090 ,5091 ,NULL // default publicAddress ,NULL // default defaultUser ,"127.0.0.1" // default defaultSipAddress ,NULL // default sipProxyServers ,NULL // default sipDirectoryServers ,NULL // default sipRegistryServers ,NULL // default authenticationScheme ,NULL // default authenicateRealm ,NULL // default authenticateDb ,NULL // default authorizeUserIds ,NULL // default authorizePasswords ,&lineMgr ); sipUA.start(); refreshMgr.init(&sipUA); sipUA.send(testMsg); // Wait long enough for some stack timeouts/retransmits to occur OsTask::delay(10000); // 10 seconds sipUA.shutdown(FALSE); lineMgr.requestShutdown(); refreshMgr.requestShutdown(); while(!sipUA.isShutdownDone()) { ; } CPPUNIT_ASSERT(sipUA.isShutdownDone()); } // Stop TimerTask and NatAgentTask again before counting threads. // They were started while testing. OsTimerTask::destroyTimerTask(); OsNatAgentTask::releaseInstance(); // Test to see that all the threads created by the above operations // get properly shut down. // Since the threads do not shut down synchronously with the above // calls, we have to wait before we know they will be cleared. OsTask::delay(1000); // 1 second int numThreads = getNumThreads(myPID); CPPUNIT_ASSERT_EQUAL(startingThreads,numThreads); } };
void testShutdownBlocking() { pid_t myPID = OsProcess::getCurrentPID(); int startingThreads = getNumThreads(myPID); // Simple invite message from siptest/src/siptest/invite.txt const char* SimpleMessage = "INVITE sip:[email protected] SIP/2.0\r\n" "Route: <sip:[email protected]:5064;lr>\r\n" "From: <sip:[email protected];user=phone>;tag=bbb\r\n" "To: <sip:[email protected]:3000;user=phone>\r\n" "Call-Id: 8\r\n" "Cseq: 1 INVITE\r\n" "Content-Length: 0\r\n" "\r\n"; SipMessage testMsg( SimpleMessage, strlen( SimpleMessage ) ); for(int i = 0; i < SHUTDOWN_TEST_ITERATIONS; ++i) { { SipLineMgr lineMgr; SipRefreshMgr refreshMgr; lineMgr.StartLineMgr(); lineMgr.initializeRefreshMgr( &refreshMgr ); SipUserAgent sipUA( 5090 ,5090 ,5091 ,NULL // default publicAddress ,NULL // default defaultUser ,"127.0.0.1" // default defaultSipAddress ,NULL // default sipProxyServers ,NULL // default sipDirectoryServers ,NULL // default sipRegistryServers ,NULL // default authenticationScheme ,NULL // default authenicateRealm ,NULL // default authenticateDb ,NULL // default authorizeUserIds ,NULL // default authorizePasswords ,&lineMgr ); sipUA.start(); refreshMgr.init(&sipUA); sipUA.send(testMsg); // Wait long enough for some stack timeouts/retansmits to occur OsTask::delay(10000); // 10 seconds // Shut down the tasks in reverse order. refreshMgr.requestShutdown(); sipUA.shutdown(TRUE); lineMgr.requestShutdown(); CPPUNIT_ASSERT(sipUA.isShutdownDone()); OsTimerTask::destroyTimerTask(); OsStunAgentTask::releaseInstance(); } // Test to see that all the threads created by the above operations // get properly shut down. int numThreads = getNumThreads(myPID); OsSysLog::add(FAC_SIP, PRI_NOTICE, "SipUserAgentTest::testShutdownBlocking " "numThreads=%d startingThreads=%d", numThreads, startingThreads); KNOWN_BUG("XECS-48", "Some threads are not cleaned up?"); CPPUNIT_ASSERT(numThreads <= startingThreads); } };