Commit 67fe47fc authored by garciay's avatar garciay
Browse files

Start validation of TD_AUTO_IOT_DENM_RWW_BV_01

parent d6f50550
......@@ -6,12 +6,21 @@ module ItsAutoInterop_Functions {
import from LibCommon_VerdictControl all;
import from LibCommon_Sync all;
// LibIts
import from ITS_Container language "ASN.1:1997" all;
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
import from CAM_PDU_Descriptions language "ASN.1:1997" all;
import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
import from IEEE1609dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
// LibItsCommon
import from LibItsCommon_TypesAndValues all;
import from LibItsCommon_Templates all;
import from LibItsCommon_Functions all;
import from LibItsCommon_Pixits all;
import from LibItsCommon_TestSystem all;
import from LibItsCommon_ASN1_NamedNumbers all;
// LibItsGeoNetworking
import from LibItsGeoNetworking_TypesAndValues all;
......@@ -20,6 +29,9 @@ module ItsAutoInterop_Functions {
import from LibItsGeoNetworking_Functions all;
import from LibItsGeoNetworking_TestSystem all;
// LibItsBtp
import from LibItsBtp_TypesAndValues all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
import from LibItsSecurity_Templates all;
......@@ -416,6 +428,74 @@ module ItsAutoInterop_Functions {
} // End of group postambles
group checkFunctions {
function f_payload_template(
in BtpPortId p_dst_port,
in BtpPortId p_src_port,
in ItsPduHeader.messageID p_messageID,
in integer p_stationID
) return template octetstring {
/*var template (present) Oct2 v_t1 := int2oct(p_dst_port, 2);
var template (present) Oct2 v_t2 := int2oct(p_src_port, 2);
var template (present) Oct1 v_t3 := int2oct(LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_protocolVersion_currentVersion_, 1);
var template (present) Oct1 v_t4 := int2oct(p_messageID, 1);
var template (present) Oct4 v_t5 := int2oct(p_stationID, 4);
var template (present) octetstring v_t6 := ? length (5 .. 65535);
var template (present) octetstring v_out := v_t1 & v_t2 & v_t3 & v_t4 & v_t5 & v_t6;*/
var octetstring v_t1 := int2oct(p_dst_port, 2) & int2oct(p_src_port, 2) & int2oct(LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_protocolVersion_currentVersion_, 1) & int2oct(p_messageID, 1) & int2oct(p_stationID, 4);
var template octetstring v_out := v_t1; // FIXME How to sepcify an octetstring template such as '07D200'O followed by one or more bytes
return v_out;
}
function f_check_payload_cam(
in GeoNetworkingInd v_gnInd,
template (present) CAM p_cam
) return boolean {
var bitstring v_btp_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 0, 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
var bitstring v_cam_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 4, lengthof(v_gnInd.msgIn.gnPacket.packet.payload) - 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
var CAM v_decoded_cam;
// TODO Check BTP
// Check Btp paylod
if (decvalue(v_cam_payload, v_decoded_cam) == 0) {
if (match(valueof(v_decoded_cam), p_cam) == true) {
return true;
}
}
return false;
} // End of function f_check_payload_cam
function f_check_payload_denm(
in GeoNetworkingInd v_gnInd,
template (present) DENM p_denm
) return boolean {
var bitstring v_btp_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload,0, 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
var bitstring v_denm_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 4, lengthof(v_gnInd.msgIn.gnPacket.packet.payload) - 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
var DENM v_decoded_denm;
// TODO Check BTP
// Check Btp paylod
log(">>> f_check_payload_denm");
if (decvalue(v_denm_payload, v_decoded_denm) == 0) {
log("f_check_payload_denm: checking ", v_decoded_denm);
if (match(valueof(v_decoded_denm), p_denm) == true) {
log("<<< f_check_payload_denm: true");
return true;
}
} else {
log("f_check_payload_denm: decvalue failed: ", bit2oct(v_denm_payload));
}
log("<<< f_check_payload_denm: false");
return false;
} // End of function f_check_payload_denm
} // End of group checkFunctions
group autoInteropPosition {
/**
......
......@@ -49,8 +49,8 @@ module ItsAutoInterop_Templates {
) := {
msg := valueof(p_geoNetworkingInd.msgIn),
macDestinationAddress := valueof(p_geoNetworkingInd.macDestinationAddress),
ssp := valueof(p_geoNetworkingInd.ssp),
its_aid := valueof(p_geoNetworkingInd.its_aid)
ssp := omit,
its_aid := omit
} // End of template m_forward_geoNetworkingInd
/**
......
......@@ -12,7 +12,7 @@ module ItsAutoInterop_TestCases {
import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
import from IEEE1609dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
import from DENM_PDU_Descriptions language "ASN.1:1997" all; // TODO To be removed
// LibItsCommon
import from LibItsCommon_TestSystem all;
......@@ -1405,6 +1405,7 @@ module ItsAutoInterop_TestCases {
// Local variables
var GeoNetworkingInd v_gnInd;
var integer v_states := 0;
// Test component configuration
f_cfPtcUp(p_eut);
......@@ -1412,50 +1413,64 @@ module ItsAutoInterop_TestCases {
// Preamble
f_prDefault();
// Wait for DENM1
tc_wait.start;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
[v_states == 0] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
?,
?,
e_btpB,
'07D2000101000027BB?'O /*mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
?,
LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
-,
-,
-,
-,
-,
-,
mw_referencePosition(PICS_Z1_D1_EP)
),
mw_situation(
LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_,
?
)))*/)))) -> value v_gnInd { // Receive a DEN message
?/*f_payload_template(
PICS_DENM_BTP_DESTINATION_PORT,
PICS_DENM_BTP_SOURCE_PORT,
LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_messageID_denm_,
10171
)*/
)))) -> value v_gnInd { // Receive a DEN message
tc_ac.stop;
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
// Check DENM paylod
if (f_check_payload_denm(
v_gnInd,
mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
?,
LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
-,
-,
-,
-,
-,
-,
mw_referencePosition(PICS_Z1_D1_EP)
),
mw_situation(
LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_,
?
)))) == true) {
v_states := v_states + 1;
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
}
tc_ac.start;
repeat;
}
[] geoNetworkingPort.receive(
[v_states == 1] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
?,
?,
e_btpB,
'07D2000101000027BB?'O /*mw_denm_stationId(
?/*'07D200000101000027BB?'O*/ /*mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
......@@ -1474,22 +1489,46 @@ module ItsAutoInterop_TestCases {
?
)))*/)))) -> value v_gnInd { // Receive a DEN message
tc_ac.stop;
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
// Check DENM paylod
if (f_check_payload_denm(
v_gnInd,
mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
?,
LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
-,
-,
-,
-,
-,
-,
mw_referencePosition(PICS_Z1_D2_EP)
),
mw_situation(
LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_,
?
)))) == true) {
v_states := v_states + 1;
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
}
tc_ac.start;
repeat;
}
[] geoNetworkingPort.receive(
[v_states == 2] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
?,
?,
e_btpB,
'07D2000101000027BB?'O /*mw_denm_stationId(
?/*'07D200000101000027BB?'O*/ /*mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
......@@ -1508,16 +1547,44 @@ module ItsAutoInterop_TestCases {
?
)))*/)))) -> value v_gnInd { // Receive a DEN message
tc_ac.stop;
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
log("*** " & testcasename() & ": PASS: The three expected DEN messages were received ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Check DENM paylod
if (f_check_payload_denm(
v_gnInd,
mw_denm_stationId(
PX_EUT_DESC[p_eut_id].stationId,
mw_denm(
mw_denmMgmtCon_with_relevances(
?,
LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
-,
-,
-,
-,
-,
-,
mw_referencePosition(PICS_Z1_D3_EP)
),
mw_situation(
LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_,
?
)))) == true) {
// Re-send DEN message to the other EUTs
eutGeoNetworkingPort.send(
m_forward_geoNetworkingInd(
v_gnInd
));
log("*** " & testcasename() & ": PASS: The three expected DEN messages were received ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
tc_wait.stop;
} else {
tc_ac.start;
repeat;
}
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: The three expected DEN messages were not received in time ***");
tc_wait.stop;
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
} // End of 'alt' statement
......@@ -1555,6 +1622,7 @@ module ItsAutoInterop_TestCases {
f_prDefault();
// Wait for EUT_1 DEN messages
v_counter := 0;
tc_wait.start;
tc_ac.start;
alt {
[] eutGeoNetworkingPort.receive(
......@@ -1583,11 +1651,14 @@ module ItsAutoInterop_TestCases {
)))*/)))) -> value v_eutGeoNw { // Receive a DEN message
tc_ac.stop;
v_counter := v_counter + 1;
log("v_counter = ", v_counter);
if (v_counter < 3) {
tc_ac.start;
tc_ac.start;
repeat;
} else {
log("*** " & testcasename() & ": INFO: EUT2 (vehicle) receives RWW DENMs D1, D2 and D3 ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
log("*** " & testcasename() & ": INFO: EUT2 (vehicle) receives RWW DENMs D1, D2 and D3 ***");
tc_wait.stop;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
}
}
[] tc_ac.timeout {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment