Newer
Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_update request associated with ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVUP/BV-02, ETSI EN 302 637-3, clauses 6.1.2.2, 8.1.1.1
*/
testcase TC_DEN_EVUP_BV_02() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
f_utTriggerEvent(m_utTriggerEvent(v_situation, m_denmLocation_zeroDelta));
f_awaitDenMessage(mw_denmInd(mw_anyDenmPdu), v_denmInd);
v_actionId := v_denmInd.msgIn.denm.management.actionID;
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
v_situation.eventType.subCauseCode := c_vehicleBreakDownSubCauseCode_engineProblem;
f_utUpdateEvent(m_utUpdateEvent(v_actionId, v_situation));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_anyDenmPdu(
mw_itsPduHeader,
mw_denm (
mw_denmMgmtConWithActionID(
v_actionId
)
)
)
)
) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
}
// Postamble
f_poCancelEvent(e_iut, v_actionId);
f_cfDown();
} // end TC_DEN_EVUP_BV_02
/**
* @desc Check that referenceTime is set to the current time when generating a DENM for an updated eventCheck
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* containing referenceTime
* indicating REFERENCETIME1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_update request associated with ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing referenceTime
* indicating CLT > REFERENCETIME1
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVUP/BV-03, ETSI EN 302 637-3, clause 6.1.2.2
*/
testcase TC_DEN_EVUP_BV_03() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var TimestampIts v_referenceTime1 , v_timestampIts , v_msgtimestamp;
var Int16 v_diff;
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
f_utTriggerEvent(m_utTriggerEvent(v_situation, m_denmLocation_zeroDelta));
f_awaitDenMessage(mw_denmInd(mw_anyDenmPdu), v_denmInd);
v_actionId := v_denmInd.msgIn.denm.management.actionID;
v_referenceTime1 := v_denmInd.msgIn.denm.management.referenceTime;
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
v_situation.eventType.subCauseCode := c_vehicleBreakDownSubCauseCode_engineProblem;
f_utUpdateEvent(m_utUpdateEvent(v_actionId, v_situation));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_anyDenmPdu(
mw_itsPduHeader,
mw_denm (
mw_denmMgmtCon(
v_actionId
)
)
)
)
) -> value v_denmInd {
tc_ac.stop;
v_timestampIts := f_getCurrentTime();
v_msgtimestamp := v_denmInd.msgIn.denm.management.referenceTime;
if ( ( ( v_timestampIts + v_diff ) > v_msgtimestamp ) and ( v_msgtimestamp > v_referenceTime1 ) ) {
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: ReferenceTime not updated correctly ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
}
// Postamble
f_poCancelEvent(e_iut, v_actionId);
f_cfDown();
} // end TC_DEN_EVUP_BV_03
/**
* @desc Check that DEN Basic Service does not send any update DENM if actionID is not in originating ITS-S message table
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated an event
* and the IUT not having sent an event being associated with actionID ACTION_ID1
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
* containing originatorStationID
* indicating its own stationID
* and containing sequenceNumber
* indicating SEQ1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT is requested to update an event associated to ACTION_ID1
* }
* then {
* the IUT does not send send any DENM for this event
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVUP/BV-05, ETSI EN 302 637-3, clause 8.1.2
*/
testcase TC_DEN_EVUP_BV_04() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
f_utTriggerEvent(m_utTriggerEvent(v_situation, m_denmLocation_zeroDelta));
f_awaitDenMessage(mw_denmInd(mw_anyDenmPdu), v_denmInd);
v_actionId := v_denmInd.msgIn.denm.management.actionID;
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
v_situation.eventType.subCauseCode := c_vehicleBreakDownSubCauseCode_engineProblem;
f_utUpdateEvent(m_utUpdateEvent(m_actionId(f_increaseSequenceNumber(v_actionId.sequenceNumber), f_getIutStationId()), v_situation));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_anyDenmPdu(
mw_itsPduHeader,
mw_denm (
mw_denmMgmtCon(
m_actionId(
f_increaseSequenceNumber(v_actionId.sequenceNumber),
f_getIutStationId()
)
)
)
)
)
) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received updated DENM for the actionId which is not in originator ITS-S message table. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": PASS: No DENM was sent. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
}
}
// Postamble
f_poCancelEvent(e_iut, v_actionId);
f_cfDown();
} // end TC_DEN_EVUP_BV_05
} // end denEventUpdate
// 5.2.1.4
group denEventTermination {
/**
* @desc Check that DEN Basic Service generates a cancellation DENM when application indicates the
* premature termination of an event for which it is the originator
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing validityDuration
* indicating DURATION_1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated to ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing termination
* indicating value isCancellation
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-01, ETSI EN 302 637-3, clauses 6.1.2.4, 8.2.1.3
*/
testcase TC_DEN_EVTR_BV_01() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
f_utTriggerEvent(m_utTriggerEvent(v_situation, m_denmLocation_zeroDelta, c_duration_10sec));
f_awaitDenMessage(
mw_denmInd(
mw_denmPdu(
mw_denm(
mw_denmMgmtCon(
mw_anyActionId, -, -, -,
c_duration_2sec
)
)
)
),
v_denmInd
);
v_actionId := v_denmInd.msgIn.denm.management.actionID;
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_utTerminateEvent(m_utEventCancellation(v_actionId));
tc_ac.start;
alt {
[] denmPort.receive ( mw_denmInd ( mw_denmPdu (
mw_denm ( m_denmMgmtConTermination ( v_actionId, -, -, -, -, -, isCancellation ))))) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
}
}
// Postamble
f_cfDown();
} // end TC_DEN_EVTR_BV_01
/**
* @desc Check that DEN Basic Service generates a negation DENM when application indicates the
* premature termination of an event for which it is not the originator
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having received an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* containing originatorStationID
* indicating stationID different from its own stationID
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated to ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing termination
* indicating value isNegation
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-02, ETSI EN 302 637-3, clause 6.1.2.4
*/
testcase TC_DEN_EVTR_BV_02() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
v_actionId := f_sendDenMessage ( m_denm ( m_denmMgmtCon ( m_tsActionId ), v_situation, m_denmLocation_zeroDelta ) );
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_utTerminateEvent(m_utEventCancellation(v_actionId));
tc_ac.start;
alt {
[] denmPort.receive ( mw_denmInd ( mw_denmPdu (
mw_denm ( m_denmMgmtConTermination ( v_actionId, -, -, -, -, -, isNegation ))))) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
}
}
// Postamble
f_cfDown();
} // end TC_DEN_EVTR_BV_02
/**
* @desc Check that referenceTime is set to the latest value received for this event in negation DENM
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having received an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* containing originatorStationID
* indicating stationID different from its own stationID
* and containing referenceTime
* indicating REFERENCETIME1
* and the IUT having received an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing referenceTime
* indicating REFERENCETIME2 > REFERENCETIME1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated to ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing referenceTime
* indicating value REFERENCETIME2
* and containing termination
* indicating value isNegation
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-03, ETSI EN 302 637-3, clauses 6.1.2.4, 8.2.1.3
*/
testcase TC_DEN_EVTR_BV_03() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var TimestampIts v_referenceTime1 := f_getCurrentTime();
var TimestampIts v_referenceTime2;
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
v_actionId := f_sendDenMessage(
m_denm(
m_denmMgmtCon(
m_tsActionId,
-,
-,
-,
v_referenceTime1
),
v_situation,
m_denmLocation_zeroDelta
)
);
v_referenceTime2 := f_getCurrentTime();
v_situation.eventType.subCauseCode := c_vehicleBreakDownSubCauseCode_engineProblem;
v_actionId := f_sendDenMessage(
m_denm(
m_denmMgmtCon(
m_tsActionId,
-,
-,
-,
v_referenceTime2
),
v_situation,
m_denmLocation_zeroDelta
)
);
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_utTerminateEvent(m_utEventCancellation(v_actionId));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_denmPdu(
mw_denm (
m_denmMgmtConTermination(
v_actionId,
-,
-,
-,
-,
v_referenceTime2,
isNegation
)
)
)
)
) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
}
// Postamble
f_cfDown();
} // end TC_DEN_EVTR_BV_03
/**
* @desc Check that situation container, location container and alacarte container are not present in a cancellation DENM
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated to ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing termination
* indicating value isCancellation
* and not containing situation container
* and not containing location container
* and not containing alacarte container
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-04, ETSI EN 302 637-3, clause 7.1.1
*/
testcase TC_DEN_EVTR_BV_04() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
f_utTriggerEvent(m_utTriggerEvent(v_situation, m_denmLocation_zeroDelta, c_duration_10sec));
f_awaitDenMessage(
mw_denmInd(
mw_denmPdu(
mw_denm(
mw_denmMgmtCon(
mw_anyActionId
)
)
)
),
v_denmInd
);
v_actionId := v_denmInd.msgIn.denm.management.actionID;
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_utTerminateEvent(m_utEventCancellation(v_actionId));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_denmPdu(
mw_denm ( m_denmMgmtConTermination ( v_actionId, -, -, -, -, -, isCancellation ), omit, omit, omit ) ) ) ) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
}
// Postamble
f_cfDown();
} // end TC_DEN_EVTR_BV_04
/**
* @desc Check that situation container, location container and alacarte container are not present in a negation DENM
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having received an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* containing originatorStationID
* indicating stationID different from its own stationID
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated to ACTION_ID1 from the application layer
* }
* then {
* the IUT sends a valid DENM
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing termination
* indicating value isNegation
* and not containing situation container
* and not containing location container
* and not containing alacarte container
* }
* }
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-05, ETSI EN 302 637-3, clause 7.1.1
*/
testcase TC_DEN_EVTR_BV_05() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainer v_situation := m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable);
var ActionID v_actionId;
var DenmInd v_denmInd;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
v_actionId := f_sendDenMessage ( m_denm ( m_denmMgmtCon ( m_tsActionId ), v_situation, m_denmLocation_zeroDelta ) );
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_utTerminateEvent(m_utEventCancellation(v_actionId));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_denmPdu(
mw_denm ( m_denmMgmtConTermination ( v_actionId, -, -, -, -, -, isNegation ), omit, omit, omit ) ) ) ) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: Successfully received expected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
}
}
// Postamble
f_cfDown();
} // end TC_DEN_EVTR_BV_05
/**
* @desc Check that DEN Basic Service does not send any termination DENM if actionID is not in
* originating ITS-S message table or receiving ITS-S message table (own stationID)
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated several events
* and the IUT not having send event being associated with ACTION_ID1
* containing originatingStationID
* indicating its own stationID
* and containing sequenceNumber
* indicating SEQ1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT is requested to terminate an event associated to ACTION_ID1
* containing originatingStationID
* indicating its own stationID
* and containing sequenceNumber
* indicating SEQ1
* }
* then {
* the IUT does not send send any termination DENM for this event
* }
* }
* NOTE: Event associated to ACTION_ID1 cannot be present in receiving ITS-S message
* table as its stationID is IUT’s stationID (see TP/DEN/EVTR/BV-07)
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-06, ETSI EN 302 637-3, clauses 8.2.2
*/
testcase TC_DEN_EVTR_BV_06() runs on ItsDenm system ItsDenmSystem {
// Local variables
var template (value) SituationContainerList v_situations := {
m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable),
m_situation(c_causeAccident, c_subCauseCode_Unavailable),
m_situation(c_causeRoadworks, c_subCauseCode_Unavailable),
m_situation(c_causeSlowVehicle, c_subCauseCode_Unavailable)
};
var ActionID v_unknownActionId;
var ActionIDList v_actionIds;
var DenmInd v_denmInd;
var integer i;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
for (i := 0; i < lengthof(v_situations); i:=i + 1) {
f_utTriggerEvent(m_utTriggerEvent(v_situations[i], m_denmLocation_zeroDelta));
f_awaitDenMessage(mw_denmInd(mw_anyDenmPdu), v_denmInd);
v_actionIds[i] := v_denmInd.msgIn.denm.management.actionID;
}
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
v_unknownActionId := valueof(m_actionId(
f_increaseSequenceNumber(
v_actionIds[lengthof(v_actionIds)].sequenceNumber
),
f_getIutStationId()
f_utTerminateEvent(m_utEventCancellation(v_unknownActionId));
tc_ac.start;
alt {
[] denmPort.receive(
mw_denmInd(
mw_anyDenmPdu(
mw_itsPduHeader,
mw_denm (
mw_denmMgmtCon(v_unknownActionId)
)
)
)
) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received termination DENM for the unknown actionId. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": PASS: No termination DENM was sent. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
}
// Postamble
for (i := 0; i < lengthof(v_situations); i:=i + 1) {
f_poCancelEvent(e_iut, v_actionIds[i]);
}
f_cfDown();
} // end TC_DEN_EVTR_BV_06
/**
* @desc Check that DEN Basic Service does not send any termination DENM if actionID is not in
* originating ITS-S message table or receiving ITS-S message table (other stationID)
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having received several events
* and the IUT not having received event being associated with ACTION_ID1
* containing originatingStationID
* indicating STATION_ID1 different from its own stationID
* and containing sequenceNumber
* indicating SEQ1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT is requested to terminate an event associated to ACTION_ID1
* containing originatingStationID
* indicating STATION_ID1
* and containing sequenceNumber
* indicating SEQ1
* }
* then {
* the IUT does not send send any termination DENM for this event
* }
* }
* NOTE: Event associated to ACTION_ID1 cannot be present in originating ITS-S message table as its
* stationID is not IUT’s stationID (see TP/DEN/EVTR/BV-06)
* </pre>
*
* @version 1.2.1
* @see ETSI TS 102 869-2 v1.2.1 TP/DEN/EVTR/BV-07, ETSI EN 302 637-3, clauses 8.2.2
*/
testcase TC_DEN_EVTR_BV_07() runs on ItsDenm system ItsDenmSystem {
// Local constants
const SequenceNumber v_initialSequenceNumber := 0;
// Local variables
var template (value) SituationContainerList v_situations := {
m_situation(c_causeVehicleBreakdown, c_subCauseCode_Unavailable),
m_situation(c_causeAccident, c_subCauseCode_Unavailable),
m_situation(c_causeRoadworks, c_subCauseCode_Unavailable),
m_situation(c_causeSlowVehicle, c_subCauseCode_Unavailable)
};
var SequenceNumber v_sequenceNumber := v_initialSequenceNumber;
var ActionID v_unknownActionId;
var ActionIDList v_actionIds;
var DenmInd v_denmInd;
var integer i;
// Test control
// Test component configuration
f_cfUp();
// Test adapter configuration
// Preamble
f_prInitialState();
for (i := 0; i < lengthof(v_situations); i:=i + 1) {
v_sequenceNumber := f_increaseSequenceNumber(v_sequenceNumber);
v_actionIds[i] := f_sendDenMessage( m_denm( m_denmMgmtCon( m_tsActionId(v_sequenceNumber) ), v_situations[i], m_denmLocation_zeroDelta ) );
}
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
v_unknownActionId := valueof(m_actionId(
f_increaseSequenceNumber(
v_actionIds[lengthof(v_actionIds)].sequenceNumber
),
f_getTsStationId()
f_utTerminateEvent(m_utEventCancellation(v_unknownActionId));
tc_ac.start;
alt {
[] denmPort.receive( mw_denmInd( mw_anyDenmPdu( mw_itsPduHeader, mw_denm ( mw_denmMgmtCon(v_unknownActionId) ) ) ) ) -> value v_denmInd {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received termination DENM for the unknown actionId. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] denmPort.receive(mw_denmInd(mw_anyDenmPdu)) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Received an unexpected DENM. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": PASS: No termination DENM was sent. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
}
// Postamble
for (i := 0; i < lengthof(v_situations); i:=i + 1) {
f_poCancelEvent(e_ets, v_actionIds[i]);
}
f_cfDown();
} // end TC_DEN_EVTR_BV_07
/**
* @desc Check that referenceTime is set to to the current time when generating a cancellation DENM
* <pre>
* PICS Selection: none
* Initial conditions:
* with {
* the IUT being in the "initial state"
* and the IUT having generated an event
* containing management container
* containing actionID
* indicating ACTION_ID1
* and containing validityDuration
* indicating DURATION_1
* and containing referenceTime
* indicating REFERENCETIME1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives an AppDENM_termination request associated with ACTION_ID1 from the application layer
* the IUT sends a valid DENM
* containing management container
* containing actionID