From f571af201faccf2b474f4ede28c94fcb002dd60b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 1 Oct 2010 18:15:56 -0400 Subject: [PATCH] [#4233] Test for call on/off hold --- sflphone-common/test/sippxml/test_3.xml | 187 ++++++++++++++++++++++++ sflphone-common/test/siptest.cpp | 41 ++++++ sflphone-common/test/siptest.h | 5 +- 3 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 sflphone-common/test/sippxml/test_3.xml diff --git a/sflphone-common/test/sippxml/test_3.xml b/sflphone-common/test/sippxml/test_3.xml new file mode 100644 index 0000000000..568a97a9e6 --- /dev/null +++ b/sflphone-common/test/sippxml/test_3.xml @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> + + +<scenario name="UAS HOLD/OFFHOLD"> + + <!-- Receive a new call --> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp="sendrecv" search_in="body" check_it="true" assign_to="1"/> + <log message="Media is [$1]"/> + </action> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <send retrans="500"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=audio [media_port] RTP/AVP 0 + a=rtpmap:0 PCMU/8000 + + ]]> +</send> + + <recv request="ACK" optional="true" rtd="true" crlf="true"> + </recv> + + <!-- This call is now on HOLD: sendonly tell to PBX to send music on hold--> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp="sendonly" search_in="body" check_it="true" assign_to="2"/> + <log message="Media is [$2]"/> + </action> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <send retrans="500"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=audio [media_port] RTP/AVP 0 + a=rtpmap:0 PCMU/8000 + + ]]> + </send> + + <recv request="ACK" optional="true" rtd="true" crlf="true"> + </recv> + + <!-- OFFHOLD this call --> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp="sendrecv" search_in="body" check_it="true" assign_to="3"/> + <log message="Media is [$3]"/> + </action> + </recv> + + + <send> + <![CDATA[ + + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <send retrans="500"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=audio [media_port] RTP/AVP 0 + a=rtpmap:0 PCMU/8000 + + ]]> + </send> + + <recv request="ACK" optional="true" rtd="true" crlf="true"> + </recv> + + <!-- Hangup this call --> + + <recv request="BYE"> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <pause milliseconds="4000"/> + + + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> + +</scenario> diff --git a/sflphone-common/test/siptest.cpp b/sflphone-common/test/siptest.cpp index fed8c7fec5..025a09e09c 100644 --- a/sflphone-common/test/siptest.cpp +++ b/sflphone-common/test/siptest.cpp @@ -320,3 +320,44 @@ void SIPTest::testTwoIncomingIpCall () } + +void SIPTest::testHoldIpCall() +{ + pthread_t callThread; + void *status; + + // pthread_attr_t attr; + + // pthread_attr_init(&attr); + // pthreaq_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + + std::string callCommand("sipp -sf sippxml/test_3.xml -i 127.0.0.1 -p 5062 -m 1"); +/* + int rc = pthread_create(&callThread, NULL, sippThread, (void *)(&callCommand)); + if(rc) { + std::cout << "SIPTest: ERROR; return code from pthread_create(): " << rc << std::endl; + } + else + std::cout << "SIPTest: completed thread creation" << std::endl; +*/ + + std::string testAccount("IP2IP"); + + std::string testCallID("callid1234"); + std::string testCallNumber("sip:test@127.0.0.1:5062"); + + Manager::instance().outgoingCall(testAccount, testCallID, testCallNumber); + + sleep(1); + + Manager::instance().onHoldCall(testCallID); + + sleep(1); + + Manager::instance().offHoldCall(testCallID); + + sleep(1); + + Manager::instance().hangupCall(testCallID); +} + diff --git a/sflphone-common/test/siptest.h b/sflphone-common/test/siptest.h index 7f0c94f0f1..2f4706ed96 100644 --- a/sflphone-common/test/siptest.h +++ b/sflphone-common/test/siptest.h @@ -55,8 +55,9 @@ class SIPTest : public CppUnit::TestCase { CPPUNIT_TEST_SUITE( SIPTest ); CPPUNIT_TEST ( testSimpleOutgoingIpCall ); CPPUNIT_TEST ( testSimpleIncomingIpCall ); - CPPUNIT_TEST ( testTwoOutgoingIpCall ); + // CPPUNIT_TEST ( testTwoOutgoingIpCall ); // CPPUNIT_TEST ( testTwoIncomingIpCall ); + // CPPUNIT_TEST ( testHoldIpCall); CPPUNIT_TEST_SUITE_END(); public: @@ -83,6 +84,8 @@ class SIPTest : public CppUnit::TestCase { void testTwoIncomingIpCall(void); + void testHoldIpCall(void); + private: }; -- GitLab