Newer
Older
// LibCommon
import from LibCommon_BasicTypesAndValues all;
// LibIts
// import from ITS_Container language "ASN.1:1997" all;
// import from CAM_PDU_Descriptions language "ASN.1:1997"all;
// import from DENM_PDU_Descriptions language "ASN.1:1997" all;
// LibItsCommon
// import from LibItsCommon_TypesAndValues all;
// import from LibItsCommon_Functions all;
// // LibItsCam
// import from LibItsCam_TypesAndValues all;
// import from LibItsCam_TestSystem all;
// import from LibItsCam_Templates {
// template m_camReq;
// group camTemplateFunctions
// };
//
// // LibItsDenm
// import from LibItsDenm_Templates all;
// import from LibItsDenm_TestSystem all;
//
// // LibItsSecurity
// import from LibItsSecurity_TypesAndValues all;
// import from LibItsSecurity_Templates all;
// import from LibItsSecurity_Functions all;
// import from LibItsSecurity_Pixits all;
// LibItsBtp
import from LibItsBtp_TypesAndValues all;
import from LibItsBtp_Templates all;
// LibItsGeoNetworking
import from LibItsGeoNetworking_TypesAndValues all;
import from LibItsGeoNetworking_Templates all;
import from LibItsGeoNetworking_Functions all;
import from LibItsGeoNetworking_TestSystem all;
import from LibItsGeoNetworking_Pixits all;
import from LibItsGeoNetworking_Pics all;
import from LibItsGeoNetworking_EncdecDeclarations all;
// TestCodec
import from TestCodec_TestAndSystem all;
/**
* @desc Dummy template for GN_Address
*/
template (value) GN_Address m_dummyGnAddrIut := {
typeOfAddress := e_manual,
stationType := e_roadSideUnit,
stationCountryCode := 33,
mid := 'a4fedecabeef'O
}
/**
* @desc Dummy template for long position vector
*/
template (value) LongPosVector m_dummyLongPosVectorIut := {
gnAddr := m_dummyGnAddrIut,
timestamp_ := 123456,
latitude := 4856,
longitude := 675,
pai := '1'B,
speed := 55,
heading := 9876
}
template (value) GN_Address m_dummyGnAddrNodeA := {
typeOfAddress := e_manual,
stationType := e_pedestrian,
stationCountryCode := 49,
mid := 'a4fdea5ea5ed'O
}
template (value) GN_Address m_dummyGnAddrNodeB := {
typeOfAddress := e_manual,
stationType := e_specialVehicle,
stationCountryCode := 50,
mid := 'a40102030405'O
}
template (value) GN_Address m_dummyGnAddrNodeC := {
typeOfAddress := e_manual,
stationType := e_moped,
stationCountryCode := 42,
mid := 'deadbabebeef'O
}
template (value) LongPosVector m_dummyLongPosVectorNodeA := {
gnAddr := m_dummyGnAddrNodeA,
timestamp_ := 875,
latitude := 265,
longitude := 789,
pai := '0'B,
speed := 80,
heading := 548
}
template (value) LongPosVector m_dummyLongPosVectorNodeB := {
gnAddr := m_dummyGnAddrNodeB,
timestamp_ := 4585,
latitude := 126,
longitude := 123,
pai := '0'B,
speed := 45,
heading := 125
}
template (value) LongPosVector m_dummyLongPosVectorNodeC := {
gnAddr := m_dummyGnAddrNodeC,
timestamp_ := 23644,
latitude := 23754,
longitude := 49645,
pai := '0'B,
speed := 110,
heading := 23
}
template (value) ShortPosVector m_dummyShortPosVectorNodeC := {
gnAddr := m_dummyGnAddrNodeC,
timestamp_ := 23644,
latitude := 23754,
longitude := 49645
}
template (value) Area m_dummyArea1 := {
geoAreaPosLatitude := 298376,
geoAreaPosLongitude := 32745,
distanceA := 1234,
distanceB := 5678,
angle := 9123
}
template (value) Area m_dummyArea2 := {
geoAreaPosLatitude := 873548,
geoAreaPosLongitude := 2837,
distanceA := 8765,
distanceB := 4321,
angle := 4567
}
template (value) GeoBroadcastArea m_dummyGeoBroadcastArea1 := {
geoBroadcastSubType := e_geoBroadcastRect,
geoBroadcastArea := m_dummyArea1
}
template (value) GeoBroadcastArea m_dummyGeoBroadcastArea2 := {
geoBroadcastSubType := e_geoBroadcastElip,
geoBroadcastArea := m_dummyArea2
}
template (value) GeoAnycastArea m_dummyGeoAnycastArea1 := {
geoAnycastSubType := e_geoAnycastCircle,
geoAnycastArea := m_dummyArea1
}
template (value) GeoAnycastArea m_dummyGeoAnycastArea2 := {
geoAnycastSubType := e_geoAnycastRect,
geoAnycastArea := m_dummyArea2
}
template (value) GnNonSecuredPacket m_geoNwBeaconPacket_payload(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) GnRawPayload p_payload
/**
* @desc Send template for GeoUnicast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Long position vector of destination
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoUnicast packet
*/
template (value) ExtendedHeader m_geoUnicastHeaderGeoNetworking(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) ShortPosVector p_dstPosVector,
in template (value) UInt16 p_seqNumber
) := {
geoUnicastHeader := {
seqNumber := p_seqNumber,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
dstPosVector := p_dstPosVector
}
}
template (value) GeoNetworkingInd m_geoNwInd_withLinkLayerDestination(
in template (value) GeoNetworkingPdu p_geoNwMsg,
in template (value) MacAddress p_llDestinationAdress := 'FFFFFFFFFFFF'O,
in template (value) Bit256 p_ssp := int2bit(0, 256),
in template (value) UInt32 p_its_aid := 0
) := {
msgIn := p_geoNwMsg,
macDestinationAddress := p_llDestinationAdress,
ssp := p_ssp,
its_aid := p_its_aid
} // End of group LibItsGeoNetworking_DummyTemplates
/**
* @desc validate GeoNetworkingReq/Anycast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_AnycastPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A00308000000F0A0004D200008431A4FDEA5EA5ED0000036B00000109000003150050022400048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwAnycastPacket(
m_dummyLongPosVectorNodeA,
1234,
m_dummyGeoAnycastArea1
)),
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
}
/**
* @desc validate GeoNetworkingInd/Anycast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetInd_AnycastPacket() runs on TCType system TCType {
var template (value) GeoNetworkingInd v_gnInd;
var octetstring v_buffer := '01002B0A00308000000F0A0004D200008431A4FDEA5EA5ED0000036B00000109000003150050022400048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
m_geoNwPdu(
m_geoNwAnycastPacket(
m_dummyLongPosVectorNodeA,
1234,
m_dummyGeoAnycastArea1
)),
v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingInd(
mw_geoNwInd_withLinkLayerDestination(
valueof(v_gnInd.msgIn),
?
),
v_buffer
);
}
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/**
* @desc validate GeoNetworkingReq/Broadcast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_BroadcastPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwBroadcastPacket(
m_dummyLongPosVectorNodeB,
3456,
m_dummyGeoBroadcastArea1
)),
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
/**
* @desc validate GeoNetworkingInd/Broadcast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetInd_BroadcastPacket() runs on TCType system TCType {
var GeoNetworkingInd v_gnInd;
var octetstring v_buffer := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
m_geoNwPdu(
m_geoNwBroadcastPacket(
m_dummyLongPosVectorNodeB,
3456,
m_dummyGeoBroadcastArea1
)),
-,
-,
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingInd(
v_gnInd,
false);
v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingInd(
v_gnInd,
v_buffer
);
}
/**
* @desc validate GeoNetworkingReq/Unicast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_UnicastPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A00208000000F0A0010E100008C2ADEADBABEBEEF00005C5C00005CCA0000C1ED006E00178C2ADEADBABEBEEF00005C5C00005CCA0000C1ED44454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwUnicastPacket(
m_dummyLongPosVectorNodeC,
m_dummyShortPosVectorNodeC,
4321 )),
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
}
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
/**
* @desc validate GeoNetworkingInd/Unicast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetInd_UnicastPacket() runs on TCType system TCType {
var GeoNetworkingInd v_gnInd;
var octetstring v_buffer := '01002B0A00208000000F0A0010E100008C2ADEADBABEBEEF00005C5C00005CCA0000C1ED006E00178C2ADEADBABEBEEF00005C5C00005CCA0000C1ED44454641554C545F5041594C4F4144FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
m_geoNwPdu(
m_geoNwUnicastPacket(
m_dummyLongPosVectorNodeC,
m_dummyShortPosVectorNodeC,
4321 )),
-,
-,
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingInd(
v_gnInd,
false);
v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
TestDecodeGeoNetworkingInd(
v_gnInd,
v_buffer
);
}
/**
* @desc validate GeoNetworkingReq/Beacon
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_BeaconPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A0010800000040100A832A40102030405000011E90000007E0000007B002D007D464B1442FFFFFFFFFFFF00000000'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwBeaconPacket_payload(
m_dummyLongPosVectorNodeB,
'464b1442'O
))));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 4;
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
/**
* @desc validate GeoNetworkingInd/Beacon
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetInd_BeaconPacket() runs on TCType system TCType {
var GeoNetworkingInd v_gnInd;
var octetstring v_buffer := '01002B0A0010800000040100A832A40102030405000011E90000007E0000007B002D007D464B1442FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
m_geoNwPdu(
m_geoNwBeaconPacket_payload(
m_dummyLongPosVectorNodeB,
'464b1442'O
)),
-,
-,
oct2int('A0A0A0A0'O)
));
TestGeoNetworkingInd(
v_gnInd,
false);
v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 4;
TestDecodeGeoNetworkingInd(
v_gnInd,
v_buffer
);
}
/**
* @desc validate GeoNetworkingReq/LsRequest
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_LsRequestPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A0060800000000A0030390000BC21A4FEDECABEEF0001E240000012F8000002A380372694BC21A4FEDECABEEFFFFFFFFFFFFF00000000'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwLsRequestPacket(
m_dummyLongPosVectorIut,
12345,
m_dummyGnAddrIut
))));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.payload := omit
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
}
/**
* @desc validate GeoNetworkingReq/LsReply
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNetReq_LsReplyPacket() runs on TCType system TCType {
var GeoNetworkingReq v_gnReq;
var octetstring v_buffer := '01002B0A0061800000000A0030390000BC21A4FEDECABEEF0001E240000012F8000002A3803726948431A4FDEA5EA5ED0000036B0000010900000315FFFFFFFFFFFF00000000'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
v_gnReq := valueof(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwLsReplyPacket(
m_dummyLongPosVectorIut,
f_longPosVector2ShortPosVector(valueof(m_dummyLongPosVectorNodeA)),
12345 ))));
TestGeoNetworkingReq(
v_gnReq,
false);
v_gnReq.msgOut.gnPacket.packet.payload := omit
TestDecodeGeoNetworkingReq(
v_gnReq,
v_buffer
);
}
/**
* @desc Receive template for GeoNetworking DENM Packet
* @param p_destinationShortPosVec Short position vector of destination
* @param p_seqNumber Sequence number of GeoUnicast packet
* @param p_nextHeader Id of next header
*/
template (present) GnNonSecuredPacket mw_geoNwTsbPacketWithNextHeader_cam(
in template (present) LongPosVector p_sourceLongPosVec := ?,
in template (present) UInt8 p_hopLimit := ?,
in template (value) NextHeader p_nextHeader
) modifies mw_geoNwShbPacket := {
commonHeader := mw_commonHeaderWithHopLimit(
p_nextHeader,
m_shbHeaderType,
p_hopLimit
),
payload := ?
} // End of template mw_geoNwTsbPacketWithNextHeader_cam
/**
* @desc validate GeoNetworkingReq/Broadcast
* @verdict Pass on success, Fail otherwise
*/
testcase tc_GeoNet_Port() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
var GeoNetworkingReq v_gnReq;
var ExtendedHeader v_header;
if (PX_GN_UPPER_LAYER != e_any) {
log("PX_GN_UPPER_LAYER shall be set to e_any");
stop;
}
map(self:geoNetworkingPort, system:geoNetworkingPort);
v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwBroadcastPacket(
m_dummyLongPosVectorNodeB,
3456,
m_dummyGeoBroadcastArea1
))));
geoNetworkingPort.send(v_gnReq);
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwTsbPacketWithNextHeader_cam(
-,
-,
e_btpB
)))) {
if (v_got_it == false) {
v_got_it := true;
setverdict(pass);
}
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwLsRequestPacket(
?,
?
)))) -> value v_msg {
log("Receive LsRequest: ", v_msg.msgIn);
// Send LsReply
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwLsReplyPacket(
m_dummyLongPosVectorNodeA,
f_longPosVector2ShortPosVector(
valueof(v_msg.msgIn.gnPacket.packet.extendedHeader.lsRequestHeader.srcPosVector)
),
vc_localSeqNumber
))));
repeat;
}
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwBeaconPacket(?)
)
)) -> value v_msg {
log("Receive beacon: ", v_msg.msgIn);
[] geoNetworkingPort.receive(
mw_geoNwInd(
?
)) -> value v_msg {
if (v_got_it == false) {
setverdict(inconc, "Expected message not received1");
}
unmap(self:geoNetworkingPort, system:geoNetworkingPort);
function TestGeoNetworkingReq(
in template (value) GeoNetworkingReq p_geoNetworkingReq,
in boolean p_decode := true,
in template (omit) bitstring p_expEncMsg := omit
) runs on TCType {
var bitstring v_encMsg;
var template (omit) TestRecord v_tr := { bs := p_expEncMsg };
var GeoNetworkingReq v_decMsg;
var integer v_res := 0;
// Encode template
log("Encode template ", valueof(p_geoNetworkingReq));
v_encMsg := encvalue(p_geoNetworkingReq);
log("Encoded message: ", bit2oct(v_encMsg));
// Check result
if (not isbound(v_encMsg)) {
setverdict(fail, "Encoding failed!");
stop;
}
if (ispresent(v_tr.bs)) {
if (not match(v_encMsg, p_expEncMsg)) {
log("Expected message: ", bit2oct(valueof(p_expEncMsg)));
setverdict(fail, "Encoding failed, not the expected result!");
stop;
}
}
setverdict(pass, "Encoding passed.");
// Check decoding
if (p_decode == true) {
v_res := decvalue(v_encMsg, v_decMsg);
log("Decoded message: ", v_decMsg);
select (v_res) {
case (0) {
if(match(v_decMsg, p_geoNetworkingReq)) {
setverdict(pass);
} else {
setverdict(fail);
}
}
case (1) {
setverdict(fail, "Decoding failed.");
}
case (2) {
setverdict(fail, "Not enough bits.");
}
}
}
function TestDecodeGeoNetworkingReq(
in template GeoNetworkingReq p_geoNetworkingReq,
in template (present) octetstring p_expEncMsg
) runs on TCType {
var GeoNetworkingReq v_decMsg;
var bitstring v_encMsg := oct2bit(valueof(p_expEncMsg));
var integer v_res := 0;
v_res := decvalue(v_encMsg, v_decMsg);
select (v_res) {
case (0) {
if(match(valueof(v_decMsg), p_geoNetworkingReq)) {
setverdict(pass);
} else {
setverdict(fail);
}
}
case (1) {
setverdict(fail, "Decoding failed.");
}
case (2) {
setverdict(fail, "Not enough bits.");
}
} // End of 'select' statement
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
function TestGeoNetworkingInd(
in template (value) GeoNetworkingInd p_geoNetworkingInd,
in boolean p_decode := true,
in template (omit) bitstring p_expEncMsg := omit
) runs on TCType {
var bitstring v_encMsg;
var template (omit) TestRecord v_tr := { bs := p_expEncMsg };
var GeoNetworkingInd v_decMsg;
var integer v_res := 0;
// Encode template
log("Encode template ", valueof(p_geoNetworkingInd));
v_encMsg := encvalue(p_geoNetworkingInd);
log("Encoded message: ", bit2oct(v_encMsg));
// Check result
if (not isbound(v_encMsg)) {
setverdict(fail, "Encoding failed!");
stop;
}
if (ispresent(v_tr.bs)) {
if (not match(v_encMsg, p_expEncMsg)) {
log("Expected message: ", bit2oct(valueof(p_expEncMsg)));
setverdict(fail, "Encoding failed, not the expected result!");
stop;
}
}
setverdict(pass, "Encoding passed.");
// Check decoding
if (p_decode == true) {
v_res := decvalue(v_encMsg, v_decMsg);
log("Decoded message: ", v_decMsg);
select (v_res) {
case (0) {
if(match(v_decMsg, p_geoNetworkingInd)) {
setverdict(pass);
} else {
setverdict(fail);
}
}
case (1) {
setverdict(fail, "Decoding failed.");
}
case (2) {
setverdict(fail, "Not enough bits.");
}
}
}
} // End of function TestGeoNetworkingInd
function TestDecodeGeoNetworkingInd(
in template GeoNetworkingInd p_geoNetworkingInd,
in template (present) octetstring p_expEncMsg
) runs on TCType {
var GeoNetworkingInd v_decMsg;
var bitstring v_encMsg := oct2bit(valueof(p_expEncMsg));
var integer v_res := 0;
v_res := decvalue(v_encMsg, v_decMsg);
select (v_res) {
case (0) {
log("v_decMsg: ", v_decMsg);
if(match(valueof(v_decMsg), p_geoNetworkingInd)) {
setverdict(pass);
} else {
setverdict(fail);
}
}
case (1) {
setverdict(fail, "Decoding failed.");
}
case (2) {
setverdict(fail, "Not enough bits.");
}
} // End of 'select' statement