📄 sipxtapitesttransfer.cpp
字号:
//// Copyright (C) 2004, 2005 Pingtel Corp.// //// $$//////////////////////////////////////////////////////////////////////////////#include <cppunit/CompilerOutputter.h>#include <cppunit/extensions/TestFactoryRegistry.h>#include <cppunit/ui/text/TestRunner.h>#include "sipXtapiTest.h"#include "EventValidator.h"#include "callbacks.h"extern SIPX_INST g_hInst;extern SIPX_INST g_hInst2;extern SIPX_INST g_hInst3;void sipXtapiTestSuite::testBlindTransferSuccess() { EventValidator validatorTransferController("testBlindTransferSuccess.validatorTransferController") ; EventValidator validatorTransferee("testBlindTransferSuccess.validatorTransferee") ; EventValidator validatorTransferTarget("testBlindTransferSuccess.validatorTransferTarget") ; SIPX_CALL hTransferee ; SIPX_LINE hLine ; SIPX_LINE hReceivingLine1 ; SIPX_LINE hReceivingLine2 ; SIPX_RESULT sipxRC ; bool bRC ; for (int iStressFactor = 0; iStressFactor<STRESS_FACTOR; iStressFactor++) { printf("\ntestBlindTransferSuccess (%2d of %2d)", iStressFactor+1, STRESS_FACTOR); validatorTransferController.reset() ; validatorTransferee.reset() ; validatorTransferTarget.reset() ; resetAutoAnswerCallback() ; resetAutoAnswerCallback2() ; sipxRC = sipxEventListenerAdd(g_hInst, UniversalEventValidatorCallback, &validatorTransferController) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst2, UniversalEventValidatorCallback, &validatorTransferee) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst2, AutoAnswerCallback, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst3, UniversalEventValidatorCallback, &validatorTransferTarget) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst3, AutoAnswerCallback2, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Create Lines sipxRC = sipxLineAdd(g_hInst, "sip:foo@127.0.0.1:8000", &hLine) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorTransferController.waitForLineEvent(hLine, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; sipxRC = sipxLineAdd(g_hInst2, "sip:foo@127.0.0.1:9100", &hReceivingLine1, CONTACT_AUTO) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorTransferee.waitForLineEvent(hReceivingLine1, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; sipxRC = sipxLineAdd(g_hInst3, "sip:foo@127.0.0.1:10000", &hReceivingLine2, CONTACT_AUTO) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorTransferTarget.waitForLineEvent(hReceivingLine2, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Setup call to transfer source (transferee) sipxRC = sipxCallCreate(g_hInst, hLine, &hTransferee) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxCallConnect(hTransferee, "foo:foo@127.0.0.1:9100") ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; validatorTransferController.addMarker("Validate Calling Side: Transferee") ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_DIALTONE, CALLSTATE_DIALTONE_UNKNOWN) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_REMOTE_OFFERING, CALLSTATE_REMOTE_OFFERING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_REMOTE_ALERTING, CALLSTATE_REMOTE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; validatorTransferee.addMarker("Validated Called Side: Transferee") ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_OFFERING, CALLSTATE_OFFERING_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_ALERTING, CALLSTATE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Make sure we don't have any unexpected events CPPUNIT_ASSERT(!validatorTransferController.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorTransferee.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorTransferTarget.validateNoWaitingEvent()) ; sipxRC = sipxCallBlindTransfer(hTransferee, "sip:foo@127.0.0.1:10000") ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Validate Calling Side: Transfer Target bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_INITIATED) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_INACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_ACCEPTED) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_RINGING) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_SUCCESS) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Validate Calling Side: Transferee bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD) ; CPPUNIT_ASSERT(bRC) ; // BUG:: Why is line 0???? bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_TRANSFER) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_REMOTE_OFFERING, CALLSTATE_REMOTE_OFFERING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_REMOTE_ALERTING, CALLSTATE_REMOTE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Validated Called Side: Transfer Target bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_OFFERING, CALLSTATE_OFFERING_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_ALERTING, CALLSTATE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Drop Original Call SIPX_CALL hDestroy = hTransferee ; sipxRC = sipxCallDestroy(hDestroy) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorTransferController.waitForCallEvent(hLine, hTransferee, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Drop Calls hDestroy = g_hAutoAnswerCallbackCallOther ; sipxRC = sipxCallDestroy(hDestroy) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferee.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorTransferTarget.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; CPPUNIT_ASSERT(!validatorTransferController.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorTransferee.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorTransferTarget.validateNoWaitingEvent()) ; // Remove Listeners sipxRC = sipxEventListenerRemove(g_hInst, UniversalEventValidatorCallback, &validatorTransferController) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst2, UniversalEventValidatorCallback, &validatorTransferee) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst2, AutoAnswerCallback, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst3, UniversalEventValidatorCallback, &validatorTransferTarget) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst3, AutoAnswerCallback2, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hLine) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hReceivingLine1) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hReceivingLine2) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; } OsTask::delay(TEST_DELAY) ; checkForLeaks() ;}void sipXtapiTestSuite::testBlindTransferFailureBusy() { EventValidator validatorTransferController("testBlindTransferFailureBusy.validatorTransferController") ; EventValidator validatorTransferee("testBlindTransferFailureBusy.validatorTransferee") ; EventValidator validatorTransferTarget("testBlindTransferFailureBusy.validatorTransferTarget") ; SIPX_CALL hTransferee ; SIPX_LINE hLine ; SIPX_LINE hReceivingLine1 ; SIPX_LINE hReceivingLine2 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -