Newer
Older
f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
}
tc_ac.start;
alt {
[] a_receiveLsRequest(
?,
v_longPosVectorNodeA.gnAddr.mid,
v_longPosVectorIut
) {
}
}
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
// Fill the LS buffer + one more message to remove an older message
v_nbrOfPackets := f_getLsPacketBufferSize() / v_packetSize + 1;
log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***");
for (v_index:=1; v_index <= v_nbrOfPackets; v_index:=v_index+1) {
if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))) ) {
log("*** " & testcasename() & ": INCONC: Trigger failed ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
19022
19023
19024
19025
19026
19027
19028
19029
19030
19031
19032
19033
19034
19035
19036
19037
19038
19039
19040
19041
19042
19043
19044
19045
19046
19047
19048
19049
19050
19051
19052
19053
19054
19055
19056
19057
19058
19059
19060
}
}
f_sleepIgnoreDef(0.5);
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwLsReplyPacket(
v_longPosVectorNodeB,
f_longPosVector2ShortPosVector(v_longPosVectorIut),
vc_localSeqNumber
)
)
)
);
// packet 1 shall be dropped
v_index := 2;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
f_receiveGeoNetMessageWithPayload(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
?
)
)
),
f_adaptPayload_mw(char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))
)
) {
if (v_index < v_nbrOfPackets) {
v_index := v_index + 1;
repeat;
}
tc_ac.stop;
log("*** " & testcasename() & ": Older message was removed, new message was inserted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
19066
19067
19068
19069
19070
19071
19072
19073
19074
19075
19076
19077
19078
19079
19080
19081
19082
19083
19084
19085
19086
19087
19088
19089
19090
19091
19092
19093
19094
19095
19096
19097
19098
19099
19100
19101
19102
19103
19104
19105
19106
19107
19108
19109
19110
19111
19112
19113
19114
19115
}
}
// Postamble
f_poNeighbour();
f_cf01Down();
} // end TC_GEONW_CAP_LOS_BV_01
} // end geoCapLocationService
// 6.2.3.2
group geoCapForwardingPacketBuffer {
group GEONW_CAP_FPB_BV_01 {
/**
* @desc Test of UC forwarding buffer capacity according to itsGnUcForwardingPacketBufferSize
* parameter and the overflow handling procedure
* <pre>
* Pics Selection: none
* Config Id: CF03
* Initial conditions:
* with {
* the IUT being in the "initial state" and
* the IUT having no Location Table Entry for ItsNodeB and
* the IUT having received multiple GeoUnicast packets addressed to ItsNodeA from ItsNodeC
* containing TrafficClass.SCF set to 1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
* containing TrafficClass.SCF set to 1
* containing Basic Header
* containing RHL field
* indicating HL1 higher than 1
* the UC forwarding packet buffer capacity exceeded (see note 1)
* }
* then {
* the IUT removes the older packet(s) in the UC forwarding packet buffer and,
* the IUT inserts the new received GeoUnicast packet at the end of the UC forwarding packet buffer (see note 2)
* }
* }
* NOTE 1: The amount of stored data exceeds UC forwarding packet capacity defined by the
* itsGnUcForwardingPacketBufferSize MIB parameter
* NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
*
* </pre>
*
* @see ETSI TS 102 871-2 v1.3.1 TP/GEONW/CAP/FPB/BV/01
19117
19118
19119
19120
19121
19122
19123
19124
19125
19126
19127
19128
19129
19130
19131
19132
19133
19134
19135
19136
19137
19138
19139
19140
19141
19142
19143
19144
19145
19146
19147
19148
19149
19150
19151
19152
19153
19154
19155
19156
19157
19158
19159
19160
19161
19162
19163
19164
19165
19166
19167
* @reference EN 302 636-4-1 [1], clauses 7.5.3
*/
testcase TC_GEONW_CAP_FPB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeC;
var template (value) GeoNetworkingPdu v_geoNetworkingMsg;
var integer v_packetSize := 0;
var integer v_nbrOfPackets := 0;
var integer v_payloadSize := f_min(1400, f_getUcForwardingPacketBufferSize() / 10 );
var octetstring v_payload;
const integer c_nbrOfDiscardedMessages := 1;
var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
// Test control
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GeoUnicast message
v_payload := int2oct(0, v_payloadSize);
v_geoNetworkingMsg := m_geoNwPdu(
m_geoNwUnicastPacket(
m_dummyLongPosVector,
f_longPosVector2ShortPosVector(valueof(m_dummyLongPosVector)),
0)
);
v_geoNetworkingMsg.gnPacket.packet.payload := f_adaptPayload_m(v_payload);
v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg)));
// Fill the UC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages
v_nbrOfPackets := f_getUcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages + 1;
log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***");
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeC := f_getComponent(c_compNodeC);
v_nodeB.start(f_GEONW_CAP_FPB_BV_01_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages));
v_nodeC.start(f_GEONW_CAP_FPB_BV_01_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg));
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf03Down();
} // end TC_GEONW_CAP_FPB_BV_01
* @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_01)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets sent by other component
* @param p_nbrOfDiscardedMessages Number of packets that should be discarded
*/
function f_GEONW_CAP_FPB_BV_01_nodeB(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in integer p_nbrOfDiscardedMessages
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages + 1;
var integer v_nbReceivedMessages := 0;
// Preamble
f_prDefault(); // NodeB is not yet a neighbour
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
19188
19189
19190
19191
19192
19193
19194
19195
19196
19197
19198
19199
19200
19201
19202
19203
19204
19205
19206
19207
19208
19209
19210
19211
19212
19213
19214
19215
19216
19217
19218
19219
// Test Body
f_startBeingNeighbour();
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
v_expectedSeqNumber
)
)
)
) {
v_nbReceivedMessages := v_nbReceivedMessages + 1;
v_expectedSeqNumber := v_expectedSeqNumber + 1;
repeat; // repeat in any case => IUT may send more messages !
}
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
?
)
)
)
) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) {
log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
19230
19231
19232
19233
19234
19235
19236
19237
19238
19239
19240
19241
19242
19243
19244
19245
19246
19247
19248
19249
19250
19251
19252
19253
19254
19255
19256
19257
19258
19259
19260
19261
19262
19263
19264
19265
}
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_01_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_01)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets to be send
* @param p_geoNetworkingMsg Pdu to be sent (template)
*/
function f_GEONW_CAP_FPB_BV_01_nodeC(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in template (value) GeoNetworkingPdu p_geoNetworkingMsg
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var integer i := 0;
// Preamble
f_prNeighbour();
vc_localSeqNumber := p_sequenceNumberC;
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.srcPosVector := v_longPosVectorNodeC;
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.dstPosVector := f_longPosVector2ShortPosVector(v_longPosVectorNodeA);
for (i:=0; i < p_nbrOfPackets; i:=i+1) {
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.seqNumber := vc_localSeqNumber;
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg));
}
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
19270
19271
19272
19273
19274
19275
19276
19277
19278
19279
19280
19281
19282
19283
19284
19285
19286
19287
19288
19289
19290
19291
19292
19293
19294
19295
19296
19297
19298
19299
19300
19301
19302
19303
19304
19305
19306
19307
19308
19309
19310
19311
19312
19313
19314
19315
19316
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_01_nodeC
} // end GEONW_CAP_FPB_BV_01
group GEONW_CAP_FPB_BV_02 {
/**
* @desc Test of BC forwarding buffer capacity according to itsGnBcForwardingPacketBufferSize
* parameter and the overflow handling procedure
* <pre>
* Pics Selection: none
* Config Id: CF03
* Initial conditions:
* with {
* the IUT being in the "initial state" and
* the IUT having no Location Table Entry for ItsNodeB
* the IUT having received multiple GeoBroadcast packets
* containing TrafficClass.SCF set to 1
* containing GBC Extended Header
* containing GeoBroadcast Destination Area
* indicating AREA2
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives a GeoBroadcast packet
* containing TrafficClass.SCF set to 1
* containing GBC Extended Header
* containing GeoBroadcast Destination Area
* indicating AREA2 and
* the BC forwarding packet buffer capacity exceeded (see note 1)
* }
* then {
* the IUT removes the older packet(s) in the BC forwarding packet buffer and,
* the IUT inserts the new received GeoBroadcast packet at the end of the BC forwarding packet buffer (see note 2)
* }
* }
* NOTE 1: The amount of stored data exceeds BC forwarding buffer capacity defined by the
* itsGnBcForwardingPacketBufferSize MIB parameter
* NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
*
* </pre>
*
* @see ETSI TS 102 871-2 v1.3.1 TP/GEONW/CAP/FPB/BV/02
19318
19319
19320
19321
19322
19323
19324
19325
19326
19327
19328
19329
19330
19331
19332
19333
19334
19335
19336
19337
19338
19339
19340
19341
19342
19343
19344
19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357
19358
19359
19360
19361
19362
19363
19364
19365
19366
19367
19368
19369
19370
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
* @reference EN 302 636-4-1 [1], clauses 7.5.3
*/
testcase TC_GEONW_CAP_FPB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeC;
var template (value) GeoNetworkingPdu v_geoNetworkingMsg;
var integer v_packetSize := 0;
var integer v_nbrOfPackets := 0;
const integer c_nbrOfDiscardedMessages := 1;
var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
// Test control
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GeoUnicast message
v_geoNetworkingMsg := m_geoNwPdu(m_geoNwBroadcastPacket(
m_dummyLongPosVector,
0,
m_dummyGeoBroadcastArea));
v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg)));
// Fill the BC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages
v_nbrOfPackets := f_getBcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages;
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeC := f_getComponent(c_compNodeC);
v_nodeB.start(f_GEONW_CAP_FPB_BV_02_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages));
v_nodeC.start(f_GEONW_CAP_FPB_BV_02_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg));
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf03Down();
} // end TC_GEONW_CAP_FPB_BV_02
/**
* @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_02)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets sent by other component
* @param p_nbrOfDiscardedMessages Number of packets that should be discarded
*/
function f_GEONW_CAP_FPB_BV_02_nodeB(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in integer p_nbrOfDiscardedMessages
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages;
var integer v_nbReceivedMessages := 0;
// Preamble
f_prDefault(); // NodeB is not yet a neighbour
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
19383
19384
19385
19386
19387
19388
19389
19390
19391
19392
19393
19394
19395
19396
19397
19398
19399
19400
19401
19402
// Test Body
f_startBeingNeighbour();
tc_ac.start;
alt {
[] a_receiveGeoBroadcast(
mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
v_expectedSeqNumber
) {
v_nbReceivedMessages := v_nbReceivedMessages + 1;
v_expectedSeqNumber := v_expectedSeqNumber + 1;
repeat; // repeat in any case => IUT may send more messages !
}
[] a_receiveGeoBroadcast(
mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
?
) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) {
log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
19413
19414
19415
19416
19417
19418
19419
19420
19421
19422
19423
19424
19425
19426
19427
19428
19429
19430
19431
19432
19433
19434
19435
19436
19437
19438
19439
19440
19441
19442
19443
19444
19445
19446
19447
19448
19449
19450
}
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_02_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_02)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets to be send
* @param p_geoNetworkingMsg Pdu to be sent (template)
*/
function f_GEONW_CAP_FPB_BV_02_nodeC(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in template (value) GeoNetworkingPdu p_geoNetworkingMsg
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var integer i := 0;
// Preamble
f_prNeighbour();
vc_localSeqNumber := p_sequenceNumberC;
p_geoNetworkingMsg.gnPacket.packet := m_geoNwBroadcastPacket(
v_longPosVectorNodeC,
0,
f_getGeoBroadcastArea(c_area2)
);
for (i:=0; i < p_nbrOfPackets; i:=i+1) {
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber := vc_localSeqNumber;
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg));
}
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_02_nodeC
} // end GEONW_CAP_FPB_BV_02
} // end geoCapForwardingPacketBuffer
} // end geoCapacities
} // end ItsGeoNetworking_TestCases