Newer
Older
* @desc Module containing functions for DENM
*
*/
// LibIts
import from LibIts_TestSystem all;
import from LibIts_Interface all;
import from LibItsCommon_Functions all;
import from LibItsDenm_TypesAndValues all;
import from LibItsDenm_Templates all;
import from CAM_PDU_Descriptions language "ASN.1:1997" all;
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
/**
* @desc Create Facility component and connects DENM port
* @param p_ptcDenm returned Facility component variable
*/
// map ports
map(p_ptcDenm:denmPort, system:denmPort);
map(p_ptcDenm:utPort, system:utPort);
/**
* @desc Wait for component to finish and unmap DENM ports
function f_ptcDenmDown(in ItsFa p_ptcDenm) runs on ItsMtc {
tc_guard.start;
alt {
[] p_ptcDenm.done {
tc_guard.stop;
}
[] tc_guard.timeout {
log("*** f_ptcDenmDown: ERROR: Timeout while waiting for component ***");
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
group altsteps {
/**
* @desc The base default.
*/
altstep a_default() runs on ItsFa {
[] denmPort.receive {
setverdict (inconc, "Received an unexpected message");
//TODO shall stop be called here?
stop;
}
[] tc_wait.timeout {
setverdict (inconc, "Timeout while awaiting reaction of the IUT prior to Upper Tester action");
//TODO shall stop be called here?
stop;
}
[] tc_ac.timeout {
setverdict (inconc, "Timeout while awaiting the reception of a message");
//TODO shall stop be called here?
stop;
}
}
} // end group altsteps
group preambles {
/**
* @desc The default preamble.
*/
function f_prDefault() runs on ItsFa {
vc_default := activate(a_default());
}
/**
* @desc Brings the IUT into an initial state.
* @return
*/
function f_prInitialState() runs on ItsFa return FncRetCode {
var FncRetCode v_ret := e_success;
f_prDefault();
f_setVerdictPreOrPostamble(v_ret);
return v_ret;
}
} // end group preambles
group postambles {
/**
* @desc The default postamble.
*/
function f_poDefault() runs on ItsFa {
var FncRetCode v_ret := e_success;
//empty
f_setVerdictPreOrPostamble(v_ret);
}
/**
* @desc Postamble including cancellation of an event.
berge
committed
* @param p_trigger Indicates if the cancellation have to be raised by the test system(e_ets)
* or at the application layer of the IUT(e_iut).
* @param p_event The event to cancel.
* @verdict
*/
function f_poCancelEvent(template (value) Trigger p_trigger, template (value) Situation p_event) runs on ItsFa {
var FncRetCode v_ret := e_success;
m_denmWithCause(c_dataVersionCancellation, p_event, m_eventPosition(f_getTsCurrentPosition()), f_getTsStationId())
v_ret := f_utTriggerEvent(m_utEventCancellation(p_event, c_dataVersionCancellation));
}
f_setVerdictPreOrPostamble(v_ret);
f_poDefault();
}
} // end group postambles
group upperTester {
/**
* @desc Requests to bring the IUT in an initial state
* @return
*/
utPort.send(UtDenmInitialize:{});
tc_ac.start;
alt {
[] utPort.receive(UtDenmResult:true) {
setverdict (pass, "IUT initialized");
}
[] utPort.receive {
setverdict (inconc, "IUT could not be initialized");
stop;
}
[] tc_ac.timeout {
setverdict (inconc, "IUT could not be initialized in time");
stop;
}
}
}
/**
* @desc Triggers event from the application layer
* @param p_event The event to trigger.
function f_utTriggerEvent(template (value) UtDenmEvent p_event) runs on ItsFa return FncRetCode {
var template (value) UtDenmTrigger v_utMsg := { p_event };
* @desc Checks that the event was indicated at the application layer
* @param p_event The event to check.
function f_utCheckEvent(template (value) UtDenmEvent p_event) runs on ItsFa return FncRetCode {
var template (value) UtDenmCheck v_utMsg := { p_event };
utPort.send(v_utMsg);
tc_ac.start;
alt {
[] utPort.receive(UtDenmResult:true) {
setverdict (pass, "Event correctly indicated at application layer");
v_ret := e_success;
}
[] utPort.receive {
setverdict (fail, "Event not correctly indicated at application layer");
v_ret := e_error;
}
[] tc_ac.timeout {
setverdict (inconc, "Timeout while waiting for event check result");
v_ret := e_timeout;
}
}
group sendFunctions {
/**
* @desc Sends a DEN message
* @param p_sendMsg The DEN message to send.
* @return
*/
function f_sendDenMessage(template (value) DenmReq p_sendMsg) runs on ItsFa {
p_sendMsg.msgOut.denm.management.actionID.sequenceNo := vc_sequenceNo;
denmPort.send(p_sendMsg);
}
} // end sendFunctions
group receiveFunctions {
/**
* @desc Awaits a DEN message
* @param p_rcvMsg The expected message to be received.
* @return
*/
function f_awaitDenMessage(template (present) DenmInd p_rcvMsg) runs on ItsFa return FncRetCode {
return f_awaitDenMessageOut(p_rcvMsg, v_denmInd);
}
/**
* @desc Awaits a DEN message
* @param p_rcvMsg The expected message to be received.
* @param p_rcvdMsg The received message - OUT.
* @return
*/
function f_awaitDenMessageOut(in template (present) DenmInd p_rcvMsg, out DenmInd p_rcvdMsg) runs on ItsFa return FncRetCode {
[] tc_ac.timeout {
log("Timeout while awaiting the reception of a message");
v_ret := e_timeout;
}
}
return v_ret;
}
} // end receiveFunctions
group getFunctions {
* @return
*/
function f_getIutDefaultEventDuration() return TimeStamp {
//TODO get the value from PIXIT or MIB
return v_iutDefaultEventDuration;
}