diff --git a/sflphone-common/test/sippxml/test_2.xml b/sflphone-common/test/sippxml/test_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..003b0adac85c72ddfd91c7eac08fe39389037cc8 --- /dev/null +++ b/sflphone-common/test/sippxml/test_2.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<!-- This program is free software; you can redistribute it and/or --> +<!-- modify it under the terms of the GNU General Public License as --> +<!-- published by the Free Software Foundation; either version 2 of the --> +<!-- License, or (at your option) any later version. --> +<!-- --> +<!-- This program is distributed in the hope that it will be useful, --> +<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --> +<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> +<!-- GNU General Public License for more details. --> +<!-- --> +<!-- You should have received a copy of the GNU General Public License --> +<!-- along with this program; if not, write to the --> +<!-- Free Software Foundation, Inc., --> +<!-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> +<!-- --> +<!-- Sipp default 'uac' scenario. --> +<!-- --> + +<scenario name="Two simultaneous outgoing call Sipstone UAC"> + <!-- In client mode (sipp placing calls), the Call-ID MUST be --> + <!-- generated by sipp. To do so, use [call_id] keyword. --> + <send retrans="500"> + <![CDATA[ + + INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]> + Call-ID: [call_id] + CSeq: 1 INVITE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + 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 response="100" optional="true"> + </recv> + + <recv response="180" optional="true"> + </recv> + + <recv response="183" optional="true"> + </recv> + + <!-- By adding rrs="true" (Record Route Sets), the route sets --> + <!-- are saved and used for following messages sent. Useful to test --> + <!-- against stateful SIP proxies/B2BUAs. --> + <recv response="200" rtd="true"> + </recv> + + <!-- Packet lost can be simulated in any send/recv message by --> + <!-- by adding the 'lost = "10"'. Value can be [1-100] percent. --> + <send> + <![CDATA[ + + ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 1 ACK + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + </send> + + <!-- Here is where the call is put on hold --> + <recv request="INVITE" crlf="true"> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 100 Trying + [last_Via:] + [last_From:] + [last_To:];tag=[pid]SIPpTag01[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=[pid]SIPpTag01[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" + rtd="true" + crlf="true"> + </recv> + + <!-- The 'crlf' option inserts a blank line in the statistics report. --> + <send retrans="500"> + <![CDATA[ + + BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 2 BYE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + </send> + + <recv response="200" crlf="true"> + </recv> + + <!-- definition of the response time repartition table (unit is ms) --> + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <!-- definition of the call length repartition table (unit is ms) --> + <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 2a32a84c86ad867b7cc7f5003c172d2a50e8c6d0..fed8c7fec5addf831e95cf1d1d51b054a675d7bf 100644 --- a/sflphone-common/test/siptest.cpp +++ b/sflphone-common/test/siptest.cpp @@ -254,13 +254,18 @@ void SIPTest::testTwoIncomingIpCall () pthread_t firstCallThread, secondCallThread; void *status; + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + // the first call is supposed to be put on hold when answering teh second incoming call std::string firstCallCommand("sipp -sf sippxml/test_2.xml 127.0.0.1 -i 127.0.0.1 -p 5064 -m 1"); // command to be executed by the thread, user agent client which initiate a call and hangup std::string secondCallCommand("sipp -sn uac 127.0.0.1 -i 127.0.0.1 -p 5062 -m 1 -d 1000"); - int rc = pthread_create(&firstCallThread, NULL, sippThread, (void *)(&firstCallCommand)); + int rc = pthread_create(&firstCallThread, &attr, sippThread, (void *)(&firstCallCommand)); if (rc) { std::cout << "SIPTest: ERROR; return code from pthread_create()" << std::endl; } @@ -282,7 +287,7 @@ void SIPTest::testTwoIncomingIpCall () sleep(1); - rc = pthread_create(&secondCallThread, NULL, sippThread, (void *)(&secondCallCommand)); + rc = pthread_create(&secondCallThread, &attr, sippThread, (void *)(&secondCallCommand)); if(rc) { std::cout << "SIPTest: Error; return code from pthread_create()" << std::endl; } @@ -313,7 +318,5 @@ void SIPTest::testTwoIncomingIpCall () std::cout << "SIPTest: completed join with thread 2" << std::endl; - - std::cout << "---------------------------" << std::endl; } diff --git a/sflphone-common/test/siptest.h b/sflphone-common/test/siptest.h index b1da9e762e5d0effab2b956448133f7a3348eb08..7f0c94f0f1e92d10c2d437cc237ecc396a13db9b 100644 --- a/sflphone-common/test/siptest.h +++ b/sflphone-common/test/siptest.h @@ -53,10 +53,10 @@ class SIPTest : public CppUnit::TestCase { * Use cppunit library macros to add unit test the factory */ CPPUNIT_TEST_SUITE( SIPTest ); - // CPPUNIT_TEST ( testSimpleOutgoingIpCall ); - // CPPUNIT_TEST ( testSimpleIncomingIpCall ); - // CPPUNIT_TEST ( testTwoOutgoingIpCall ); - CPPUNIT_TEST ( testTwoIncomingIpCall ); + CPPUNIT_TEST ( testSimpleOutgoingIpCall ); + CPPUNIT_TEST ( testSimpleIncomingIpCall ); + CPPUNIT_TEST ( testTwoOutgoingIpCall ); + // CPPUNIT_TEST ( testTwoIncomingIpCall ); CPPUNIT_TEST_SUITE_END(); public: