Loading CONF/CONF_Steps.ttcn3 +219 −1 Original line number Diff line number Diff line Loading @@ -269,6 +269,48 @@ module CONF_Steps { } /** * @desc This function invites a user to join a conference by sending a REFER request to the user * @param p_cSeq CSeq number * @param p_to_user user * @param p_conferenceUri conference uri */ function f_referUser( inout CSeq p_cSeq, in integer p_to_user, in SipUrl p_conferenceUri ) runs on ImsComponent { LibIms_Steps.f_setHeadersREFER(p_cSeq, p_to_user); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(p_conferenceUri, "INVITE"), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_cSeq )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") )); } /** * @desc This function invites a user to join a conference by sending a REFER request to a conference FOKUS * @param p_cSeq CSeq number Loading Loading @@ -306,7 +348,183 @@ module CONF_Steps { "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") m_MBody_sipfrag("SIP/2.0 200 Trying") )); } /** * * @desc This function sends a re-INVITE request to put on hold a active call * @param p_originating booleana indicator if user is originating party of the call */ function f_holdCall(in boolean p_orginatingSide) runs on ImsComponent { // change SDP to sendonly f_SIP_modMediaDirection(0,m_attribute_sendonly); // prepare and send INVITE LibIms_Steps.f_setHeadersReINVITE(vc_cSeq, p_orginatingSide); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 200 OK Response f_awaitingResponse(mw_Response_Base( c_statusLine200,vc_callId, vc_cSeq )); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // check SDP f_SIP_checkSDPrespDirection(mw_attribute_recvonly); } /** * @desc This function establishes a new call to given user profile. * @param p_cSeq_s CSeq number * @param p_to_user user profile */ function f_establishCall(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent { // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_to_user ); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 180 response f_awaitingResponse(mw_Response_Base( c_statusLine180, vc_callId, vc_cSeq )); // await 200 OK response f_awaitingOkResponse(p_cSeq_s); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_createConference(integer p_profile) runs on ImsComponent { LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_profile); f_SendINVITE(m_INVITE_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact )); //receive 200 OK f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, vc_cSeq, mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_enterConference(integer p_conf, integer p_user) runs on ImsComponent { LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_conf); f_SendINVITE(m_INVITE_Request_CONF( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_ReferredBy_SipUrl( f_initSipUrl(p_user) ) )); //receive 200 OK f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, vc_cSeq, mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_terminateSession(integer p_profile) runs on ImsComponent { // UE#1 sends BYE LibIms_Steps.f_setHeadersBYE(vc_cSeq, p_profile); f_SendBYE(m_BYE_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); f_awaitingResponse(mw_Response_Base( c_statusLine200, vc_callId, vc_cSeq )); } } No newline at end of file CONF/CONF_TC_Functions.ttcn3 +334 −0 Original line number Diff line number Diff line Loading @@ -513,11 +513,345 @@ module CONF_TC_Functions { * )); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_002(CSeq p_CSeq) runs on ImsComponent { f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- create conference -----> LibIms_Steps.f_setHeadersINVITE(vc_cSeq, c_conferenceProfile_factoryURI); f_SendINVITE(m_INVITE_Request_ResourceList( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_MBody_XML(mw_XmlBody_ResourceLists(m_ResourceList_1User( m_EntryUser(f_initSipUrl(c_userProfile_UE2atSUThome)) ))) )); f_awaitingINVITE(mw_INVITE_Request_CONF( f_initSipUrl(c_userProfile_UE2atSUThome), mw_PAssertedID(mw_AddrUnion_Nameaddr(*,PX_IMS_SUT_UE2_PUBLIC_USER, *)), mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // ---- UE#2 get INVITE -----> f_awaitingINVITE(mw_INVITE_Request_CONF_OIR( f_initSipUrl(c_userProfile_UE2atSUThome), *, * )); f_sendResponse(m_Response_2xxonINVITE( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); f_awaitingACK(mw_ACK_Request_Base(vc_callId)); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_003(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // UE#2 join f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // UE#3 join f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome); v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_004(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // invite UE#2 f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); v_s3 := f_saveSession(); // UE#2 accept f_acceptConference(); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // invite UE#3 f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_005(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // invite UE#2 f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace v_s3 := f_saveSession(); // UE#2 accept f_acceptConference(); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // invite UE#3 f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_006(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); // invite UE#2 LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI)); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_UE2atSUThome), "INVITE"), m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_UE3atSUThome)) )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, vc_cSeq )); // UE#2 accept f_acceptConference(); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_007(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); // invite UE#2 LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI)); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_UE2atSUThome), "INVITE"), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, vc_cSeq )); // UE#2 accept f_acceptConference(); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N04_001(CSeq p_CSeq) runs on ImsComponent { f_init_ics_scscf(p_CSeq); Loading CONF/CONF_Templates.ttcn3 +31 −0 Original line number Diff line number Diff line Loading @@ -228,4 +228,35 @@ template Resource_lists mw_Resource_lists( msgHeader := {privacy := p_privacy} } template Resource_lists m_ResourceList_1User( EntryType p_user1 ) := { sequence := { { list := { name := omit, anyAttributes := omit, display_name := omit, sequence_list := { { choice := { entry := p_user1 } } }, elem := omit } } } } template INVITE_Request m_INVITE_Request_CONF (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact, ReferredBy p_referredBy) modifies m_INVITE_Dummy := { msgHeader := { referredBy := p_referredBy } } } No newline at end of file CONF/CONF_TestCases.ttcn3 +136 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,142 @@ module CONF_TestCases { // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Inviting participant by sending a participant list to the focus. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_002(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_002(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. REFER is sent to the participants. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_003(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_003(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. REFER is sent to the focus. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_004(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_004(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. Replace header included in the REFER. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_005(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_005(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Referred-By value does not contain a valid identity of the requesting user. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_006(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_006(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Referred-By header not present. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_007(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_007(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } } group leavingConference { Loading Loading
CONF/CONF_Steps.ttcn3 +219 −1 Original line number Diff line number Diff line Loading @@ -269,6 +269,48 @@ module CONF_Steps { } /** * @desc This function invites a user to join a conference by sending a REFER request to the user * @param p_cSeq CSeq number * @param p_to_user user * @param p_conferenceUri conference uri */ function f_referUser( inout CSeq p_cSeq, in integer p_to_user, in SipUrl p_conferenceUri ) runs on ImsComponent { LibIms_Steps.f_setHeadersREFER(p_cSeq, p_to_user); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(p_conferenceUri, "INVITE"), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_cSeq )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") )); } /** * @desc This function invites a user to join a conference by sending a REFER request to a conference FOKUS * @param p_cSeq CSeq number Loading Loading @@ -306,7 +348,183 @@ module CONF_Steps { "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") m_MBody_sipfrag("SIP/2.0 200 Trying") )); } /** * * @desc This function sends a re-INVITE request to put on hold a active call * @param p_originating booleana indicator if user is originating party of the call */ function f_holdCall(in boolean p_orginatingSide) runs on ImsComponent { // change SDP to sendonly f_SIP_modMediaDirection(0,m_attribute_sendonly); // prepare and send INVITE LibIms_Steps.f_setHeadersReINVITE(vc_cSeq, p_orginatingSide); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 200 OK Response f_awaitingResponse(mw_Response_Base( c_statusLine200,vc_callId, vc_cSeq )); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // check SDP f_SIP_checkSDPrespDirection(mw_attribute_recvonly); } /** * @desc This function establishes a new call to given user profile. * @param p_cSeq_s CSeq number * @param p_to_user user profile */ function f_establishCall(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent { // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_to_user ); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 180 response f_awaitingResponse(mw_Response_Base( c_statusLine180, vc_callId, vc_cSeq )); // await 200 OK response f_awaitingOkResponse(p_cSeq_s); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_createConference(integer p_profile) runs on ImsComponent { LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_profile); f_SendINVITE(m_INVITE_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact )); //receive 200 OK f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, vc_cSeq, mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_enterConference(integer p_conf, integer p_user) runs on ImsComponent { LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_conf); f_SendINVITE(m_INVITE_Request_CONF( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_ReferredBy_SipUrl( f_initSipUrl(p_user) ) )); //receive 200 OK f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, vc_cSeq, mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } function f_terminateSession(integer p_profile) runs on ImsComponent { // UE#1 sends BYE LibIms_Steps.f_setHeadersBYE(vc_cSeq, p_profile); f_SendBYE(m_BYE_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); f_awaitingResponse(mw_Response_Base( c_statusLine200, vc_callId, vc_cSeq )); } } No newline at end of file
CONF/CONF_TC_Functions.ttcn3 +334 −0 Original line number Diff line number Diff line Loading @@ -513,11 +513,345 @@ module CONF_TC_Functions { * )); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_002(CSeq p_CSeq) runs on ImsComponent { f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- create conference -----> LibIms_Steps.f_setHeadersINVITE(vc_cSeq, c_conferenceProfile_factoryURI); f_SendINVITE(m_INVITE_Request_ResourceList( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_MBody_XML(mw_XmlBody_ResourceLists(m_ResourceList_1User( m_EntryUser(f_initSipUrl(c_userProfile_UE2atSUThome)) ))) )); f_awaitingINVITE(mw_INVITE_Request_CONF( f_initSipUrl(c_userProfile_UE2atSUThome), mw_PAssertedID(mw_AddrUnion_Nameaddr(*,PX_IMS_SUT_UE2_PUBLIC_USER, *)), mw_Contact_conference )); f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // ---- UE#2 get INVITE -----> f_awaitingINVITE(mw_INVITE_Request_CONF_OIR( f_initSipUrl(c_userProfile_UE2atSUThome), *, * )); f_sendResponse(m_Response_2xxonINVITE( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); f_awaitingACK(mw_ACK_Request_Base(vc_callId)); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_003(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // UE#2 join f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // UE#3 join f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome); v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_004(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // invite UE#2 f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); v_s3 := f_saveSession(); // UE#2 accept f_acceptConference(); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // invite UE#3 f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_005(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); // create session with ue2 f_establishCall(p_CSeq, c_userProfile_UE2atSUThome); f_holdCall(true); v_s1 := f_saveSession(); // create session with ue3 f_establishCall(p_CSeq, c_userProfile_UE3atSUThome); f_holdCall(true); v_s2 := f_saveSession(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); v_s3 := f_saveSession(); // invite UE#2 f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace v_s3 := f_saveSession(); // UE#2 accept f_acceptConference(); // terminate session 1 f_loadSession(v_s1); f_terminateSession(c_userProfile_UE2atSUThome); // load conference f_loadSession(v_s3); // invite UE#3 f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace v_s3 := f_saveSession(); // terminate session 2 f_loadSession(v_s2); f_terminateSession(c_userProfile_UE3atSUThome); // load conference f_loadSession(v_s3); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); // await BYE and send 200OK UE#3 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_006(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); // invite UE#2 LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI)); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_UE2atSUThome), "INVITE"), m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_UE3atSUThome)) )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, vc_cSeq )); // UE#2 accept f_acceptConference(); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N03_007(CSeq p_CSeq) runs on ImsComponent { var SessionDialog v_s1; var SessionDialog v_s2; var SessionDialog v_s3; f_init_ics_scscf(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // create conference f_createConference(c_conferenceProfile_factoryURI); // invite UE#2 LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI)); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_UE2atSUThome), "INVITE"), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, vc_cSeq )); // UE#2 accept f_acceptConference(); // terminate conference f_terminateSession(c_conferenceProfile_factoryURI); // await BYE and send 200OK UE#2 f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_N04_001(CSeq p_CSeq) runs on ImsComponent { f_init_ics_scscf(p_CSeq); Loading
CONF/CONF_Templates.ttcn3 +31 −0 Original line number Diff line number Diff line Loading @@ -228,4 +228,35 @@ template Resource_lists mw_Resource_lists( msgHeader := {privacy := p_privacy} } template Resource_lists m_ResourceList_1User( EntryType p_user1 ) := { sequence := { { list := { name := omit, anyAttributes := omit, display_name := omit, sequence_list := { { choice := { entry := p_user1 } } }, elem := omit } } } } template INVITE_Request m_INVITE_Request_CONF (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact, ReferredBy p_referredBy) modifies m_INVITE_Dummy := { msgHeader := { referredBy := p_referredBy } } } No newline at end of file
CONF/CONF_TestCases.ttcn3 +136 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,142 @@ module CONF_TestCases { // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Inviting participant by sending a participant list to the focus. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_002(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_002(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. REFER is sent to the participants. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_003(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_003(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. REFER is sent to the focus. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_004(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_004(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Three-way session creation. Replace header included in the REFER. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_005(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_005(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Referred-By value does not contain a valid identity of the requesting user. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_006(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_006(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } /** * @desc * Referred-By header not present. * @param p_cSeq Transaction Id */ testcase TC_CONF_N03_007(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter { // variable declaration var ImsComponent v_scscf; // setup test configuration f_cf_as_up(v_scscf); // start component v_scscf.start(f_TC_CONF_N03_007(p_cSeq)); // synchronize component f_serverSync1Client({c_prDone, c_tbDone}); // tear down test configuration f_cf_as_down(v_scscf); } } group leavingConference { Loading