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