etsi-ttcn3-s1ap-tests/ttcn3/LibS1AP/LibS1AP_Steps.ttcn

432 lines
14 KiB
Plaintext
Raw Normal View History

/**
* @author ETSI / STF519
* @version $URL:$
* $Id:$
* @desc This module provides functions used in S1AP.
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
* @see ETSI TS 136 413 / 3GPP TS 36.413 version 13.4.0 Release 13
*/
module LibS1AP_Steps {
2017-01-18 11:32:36 +00:00
// LibCommon
import from LibCommon_Sync all;
import from LibCommon_VerdictControl all;
import from LibCommon_BasicTypesAndValues all;
// LibS1AP
import from S1AP_PDU_Descriptions language "ASN.1:1997" all;
2017-01-20 19:47:50 +00:00
import from LibS1AP_TypesAndValues all;
import from LibS1AP_Interface all;
import from LibS1AP_Pixits all;
import from LibS1AP_Templates all;
2017-01-18 11:32:36 +00:00
/**
* @desc Common functions description
*/
group commonFunctions {
/**
2017-01-18 11:32:36 +00:00
* @desc Indicate if the provided value is greather or equal to 0
* @return true if value of p_int greater than 0
* @param p_int - integer value
*/
function f_gtZero( // FIXME Do we really need a function for <= mathematical operation???
in integer p_int
) return boolean {
if (p_int > 0){
return true;
}
else{
return false;
}
} // End of function f_gtZero
/**
2017-01-18 11:32:36 +00:00
* @desc Increment the provided value by one
* @return incremented value of p_int 0
* @param p_int - integer value
*/
function f_inc(
inout UInt32 p_int
) return UInt32 {
2017-01-18 11:32:36 +00:00
p_int := p_int + 1;
return p_int;
} // End of function f_inc
2017-01-18 11:32:36 +00:00
} // End of group commonFunctions
2017-01-18 11:32:36 +00:00
/**
* @desc Receive functions description
*/
group receivePDU {
/**
* @desc This is a test step that assign common S1AP
2017-01-18 11:32:36 +00:00
* @param p_PDU Extract the message payload from the S1AP PDU
*/
function f_S1APPDU_Get(
inout S1AP_PDU p_PDU
) runs on S1APComponent {
vc_recvS1AP_PDU := p_PDU;
if (ischosen(p_PDU.initiatingMessage)) {
//TODO...
}
if (ischosen(p_PDU.successfulOutcome)) {
//TODO...
}
if (ischosen(p_PDU.unsuccessfulOutcome)) {
//TODO...
}
} // End of function f_S1APPDU_Get
/**
2017-01-18 11:32:36 +00:00
* @desc Receive S1AP PDU from protocol port
* @param p_PDU template of the message to be received
*/
function f_recv_S1AP_PDU(
in template S1AP_PDU p_PDU
) runs on S1APComponent {
var S1AP_PDU v_PDU;
tc_wait.start;
alt {
[] S1_MMEeNB_P.receive(p_PDU) -> value v_PDU {
tc_wait.stop;
f_S1APPDU_Get(v_PDU)
}
[] tc_wait.timeout {
setverdict(inconc,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***");
//Stop the component in case of timeout
all timer.stop;
f_componentStop();
}
}
} // End of function f_recv_S1AP_PDU
/**
2017-01-18 11:32:36 +00:00
* @desc Receive S1AP PDU with InitiatingMessage payload from protocol port
* @param p_initiatingMessage Receive template for InitiatingMessage message
*/
function f_recv_S1AP_initiatingMessage(
2017-01-18 11:32:36 +00:00
template (present) InitiatingMessage p_initiatingMessage := ?
) runs on S1APComponent {
2017-01-18 11:32:36 +00:00
f_recv_S1AP_PDU( { initiatingMessage := p_initiatingMessage })
} // End of function f_recv_S1AP_initiatingMessage
/**
2017-01-18 11:32:36 +00:00
* @desc Receive S1AP PDU with SuccessfulOutcome payload from protocol port
* @param p_successfulOutcome Receive template for SuccessfulOutcome message
*/
function f_recv_S1AP_successfulOutcome(
2017-01-18 11:32:36 +00:00
template (present) SuccessfulOutcome p_successfulOutcome := ?
) runs on S1APComponent {
f_recv_S1AP_PDU( {successfulOutcome := p_successfulOutcome})
} // End of f_recv_S1AP_successfulOutcome
/**
2017-01-18 11:32:36 +00:00
* @desc Receive S1AP PDU with UnsuccessfulOutcome payload from protocol port
* @param p_unsuccessfulOutcome Receive template for UnsuccessfulOutcome message
*/
function f_recv_S1AP_unsuccessfulOutcome(
2017-01-18 11:32:36 +00:00
template (present) UnsuccessfulOutcome p_unsuccessfulOutcome := ?
) runs on S1APComponent {
f_recv_S1AP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome})
} // End of function f_recv_S1AP_unsuccessfulOutcome
2017-01-20 19:47:50 +00:00
/**
* @desc Receive S1AP Message E_RABSetupResponse
* @param p_value Receive template for E_RABSetupResponse IEs
*/
function f_recv_E_RABSetupResponse( template (present) RecordOf_ProtocolIE p_value :=?
) runs on S1APComponent {
f_recv_S1AP_successfulOutcome(mw_E_RABSetupResponse(p_value))
} // End of f_recv_E_RABSetupResponse
2017-01-18 11:32:36 +00:00
} // End of group receivePDU
2017-01-18 11:32:36 +00:00
/**
* @desc Send functions description
*/
group sendPDU {
/**
* @desc This is a test step that assign common S1AP
2017-01-18 11:32:36 +00:00
* @param p_PDU The S1AP protocol message to set up
*/
function f_S1APPDU_Set(
inout template (value) S1AP_PDU p_PDU
) runs on S1APComponent {
if (ischosen(p_PDU.initiatingMessage)) {
//TODO...
vc_sendS1AP_PDU:=valueof(p_PDU);
}
if (ischosen(p_PDU.successfulOutcome)) {
//TODO...
vc_sendS1AP_PDU:=valueof(p_PDU);
}
if (ischosen(p_PDU.unsuccessfulOutcome)) {
//TODO...
vc_sendS1AP_PDU:=valueof(p_PDU);
}
} // End of function f_S1APPDU_Set
2017-01-18 11:32:36 +00:00
/**
2017-01-18 11:32:36 +00:00
* @desc Send S1AP PDU to protocol port
* @param p_PDU template value message to be send
*/
function f_send_S1AP_PDU(
in template (value) S1AP_PDU p_PDU
) runs on S1APComponent {
f_S1APPDU_Set(p_PDU);
S1_MMEeNB_P.send(p_PDU);
} // End of function f_send_S1APPDU
/**
2017-01-18 11:32:36 +00:00
* @desc Send S1AP PDU with InitiatingMessage payload from protocol port
* @param p_initiatingMessage Send value template for InitiatingMessage message
*/
function f_send_S1AP_initiatingMessage(
in template (value) InitiatingMessage p_initiatingMessage
) runs on S1APComponent {
f_send_S1AP_PDU( {initiatingMessage := p_initiatingMessage})
} // End of function f_send_S1AP_initiatingMessage
/**
2017-01-18 11:32:36 +00:00
* @desc Send S1AP PDU with SuccessfulOutcome payload from protocol port
* @param p_successfulOutcome Send value template for SuccessfulOutcome message
*/
function f_send_S1AP_successfulOutcome(
in template (value) SuccessfulOutcome p_successfulOutcome
2017-01-18 11:32:36 +00:00
) runs on S1APComponent {
f_send_S1AP_PDU( {successfulOutcome := p_successfulOutcome})
} // End of function f_send_S1AP_successfulOutcome
/**
2017-01-18 11:32:36 +00:00
* @desc Send S1AP PDU with UnsuccessfulOutcome payload from protocol port
* @param p_unsuccessfulOutcome Send value template for UnsuccessfulOutcome message
*/
function f_send_S1AP_unsuccessfulOutcome(
2017-01-18 11:32:36 +00:00
in template (value) UnsuccessfulOutcome p_unsuccessfulOutcome
) runs on S1APComponent {
f_send_S1AP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome})
} // End of function f_send_S1AP_unsuccessfulOutcome
2017-01-20 19:47:50 +00:00
/**
* @desc Send S1AP Message E-RAB_SetupRequest
* @param p_value Send template with IE for E-RAB_SetupRequest
*/
function f_send_E_RABSetupRequest(in template (value) RecordOf_ProtocolIE p_value
) runs on S1APComponent {
f_send_S1AP_initiatingMessage(m_E_RABSetupRequest(p_value))
} // End of function f_send_E_RABSetupRequest
2017-01-18 11:32:36 +00:00
} // End of group sendPDU
2017-01-18 11:32:36 +00:00
group preambles {
group preamble_S1AP{
/**
* @desc
* @verdict
*/
function f_preambleS1AP_MME()
runs on S1APComponent {
//TODO:...
} // End of function f_preambleS1AP_MME
/**
* @desc
* @verdict
*/
function f_preambleS1AP_eNB()
runs on S1APComponent {
//TODO:...
} // End of function f_preambleS1AP_eNB
} // End of group preamble_S1AP
2017-01-18 11:32:36 +00:00
} // End of group preambles
2017-01-18 11:32:36 +00:00
group postambles {
group postamble_S1AP{
/**
* @desc
* @verdict
*/
function f_postambleS1AP_MME()
runs on S1APComponent {
// TODO:...
} // End of function f_postambleS1AP_MME
/**
* @desc
* @verdict
*/
function f_postambleS1AP_eNB()
runs on S1APComponent {
// TODO:...
} // End of function f_postambleS1AP_eNB
} // End of group postamble_S1AP
2017-01-18 11:32:36 +00:00
} // End of group postambles
/**
* @desc Global 'altstep' statements description
*/
group globalSteps {
/**
* @desc This is a test step that init S1AP component
*/
function f_S1AP_Init_Component()
runs on S1APComponent {
} // End of function f_S1AP_Init_Component
/**
* @desc Component termination
*/
function f_S1AP_terminate_component()
runs on S1APComponent {
log("component terminated - forced!");
deactivate;
stop;
} // End of function f_S1AP_terminate_component
/**
* @desc Component termination
*/
function f_componentStop()
runs on S1APComponent {
syncPort.send(m_syncClientStop);
S1_MMEeNB_P.clear;
stop;
} // End of function f_componentStop
/**
* @desc Original copied from older LibCommon_VerdictControl
*/
function f_getVerdict() // FIXME Are you sure we really need it???
return FncRetCode {
var FncRetCode v_ret := e_error;
if (getverdict == pass or getverdict == none) {
v_ret := e_success;
}
return v_ret;
} // End of function
/**
*
* @desc Wait for particular time before next expected message
*/
function f_wait(float p_time) // FIXME To be replace by LibCommon.f_sleep!!!
runs on S1APComponent {
tc_wait.start(p_time);
alt {
[] tc_wait.timeout{ }
}
} // End of function f_wait
} // End of group globalSteps
2017-01-18 11:32:36 +00:00
/**
* @desc Default 'altstep' statements description
*/
group defaultsTestStep {
/**
* @desc
* @verdict
*/
altstep a_defaultS1AP()
runs on S1APComponent {
[] any timer.timeout {
all timer.stop;
if (vc_serverStop==false) {
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
else {
stop;
}
}
[] S1_MMEeNB_P.receive (S1AP_PDU:{initiatingMessage := ?}) -> value vc_recvS1AP_PDUDefault {
repeat;
}
[] S1_MMEeNB_P.receive (S1AP_PDU:{successfulOutcome := ?}) -> value vc_recvS1AP_PDUDefault {
repeat;
}
[] S1_MMEeNB_P.receive (S1AP_PDU:{unsuccessfulOutcome := ?}) -> value vc_recvS1AP_PDUDefault {
repeat;
}
[] S1_MMEeNB_P.receive (S1AP_PDU:?) -> value vc_recvS1AP_PDUDefault {
if (vc_serverStop==false) {
f_selfOrClientSyncAndVerdict("error", e_error);
}
else {
stop;
}
}
[] S1_MMEeNB_P.receive {
if (vc_serverStop==false) {
f_selfOrClientSyncAndVerdict("error", e_error);
}
else {
stop;
}
}
[] a_shutdown() {
// Process temination on error
log("*** a_defaultS1AP() : Process temination on error ***");
// Terminate component execution
stop;
}
} // End of altstep a_defaultS1AP
altstep a_defaultS1AP_MME()
runs on S1APComponent {
[] any timer.timeout {
all timer.stop;
if (vc_serverStop==false) {
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
else {
stop;
}
}
//TODO:...
} // End of altstep a_defaultS1AP_MME
altstep a_defaultS1AP_eNB()
runs on S1APComponent {
[] any timer.timeout {
all timer.stop;
if (vc_serverStop==false) {
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
else {
stop;
}
}
//TODO:...
} // End of altstep a_defaultS1AP_eNB
2017-01-18 11:32:36 +00:00
} // End of group defaultsTestStep
} // End of module LibS1AP_Steps