TestCodec_GeoNetworking.ttcn 25.9 KB
Newer Older
module TestCodec_GeoNetworking {
    
garciay's avatar
garciay committed
  // LibCommon
  import from LibCommon_BasicTypesAndValues all;
garciay's avatar
garciay committed
  import from LibCommon_DataStrings all;
garciay's avatar
garciay committed
  // 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;
garciay's avatar
garciay committed
  // LibItsCommon
  //    import from LibItsCommon_TypesAndValues all;
  //    import from LibItsCommon_Functions all;
garciay's avatar
garciay committed
  // LibItsExternal
garciay's avatar
garciay committed
  import from LibItsExternal_TypesAndValues all;
garciay's avatar
garciay committed
  //    // 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;
  
garciay's avatar
garciay committed
  // 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;
garciay's avatar
garciay committed
  // TestCodec
  import from TestCodec_TestAndSystem all;
garciay's avatar
garciay committed
  group LibItsGeoNetworking_testCases {
garciay's avatar
garciay committed
    group LibItsGeoNetworking_DummyTemplates {
garciay's avatar
garciay committed
      /**
       * @desc    Dummy template for GN_Address 
       */
      template (value) GN_Address m_dummyGnAddrIut := {
      typeOfAddress := e_manual,
      stationType := e_roadSideUnit,
      stationCountryCode := 33,
      mid := 'a4fedecabeef'O
      }
garciay's avatar
garciay committed
      /**
       * @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
      }
garciay's avatar
garciay committed
      template (value) GN_Address m_dummyGnAddrNodeA := {
      typeOfAddress := e_manual,
      stationType := e_pedestrian,
      stationCountryCode := 49,
      mid := 'a4fdea5ea5ed'O
      }
garciay's avatar
garciay committed
      template (value) GN_Address m_dummyGnAddrNodeB := {
      typeOfAddress := e_manual,
      stationType := e_specialVehicle,
      stationCountryCode := 50,
      mid := 'a40102030405'O
      }
garciay's avatar
garciay committed
      template (value) GN_Address m_dummyGnAddrNodeC := {
      typeOfAddress := e_manual,
      stationType := e_moped,
      stationCountryCode := 42,
      mid := 'deadbabebeef'O
      }
garciay's avatar
garciay committed
      template (value) LongPosVector m_dummyLongPosVectorNodeA := {
      gnAddr := m_dummyGnAddrNodeA,
      timestamp_ := 875,
      latitude := 265,
      longitude := 789,
      pai := '0'B,
      speed := 80,
      heading := 548
      }
garciay's avatar
garciay committed
      template (value) LongPosVector m_dummyLongPosVectorNodeB := {
      gnAddr := m_dummyGnAddrNodeB,
      timestamp_ := 4585,
      latitude := 126,
      longitude := 123,
      pai := '0'B,
      speed := 45,
      heading := 125
      }
garciay's avatar
garciay committed
      template (value) LongPosVector m_dummyLongPosVectorNodeC := {
      gnAddr := m_dummyGnAddrNodeC,
      timestamp_ := 23644,
      latitude := 23754,
      longitude := 49645,
      pai := '0'B,
      speed := 110,
      heading := 23
      }
garciay's avatar
garciay committed
      template (value) ShortPosVector m_dummyShortPosVectorNodeC := {
      gnAddr := m_dummyGnAddrNodeC,
      timestamp_ := 23644,
      latitude := 23754,
      longitude := 49645
      }
            
garciay's avatar
garciay committed
      template (value) Area m_dummyArea1 := {
      geoAreaPosLatitude := 298376,
      geoAreaPosLongitude := 32745,
      distanceA := 1234,
      distanceB := 5678,
      angle := 9123
      }
garciay's avatar
garciay committed
      template (value) Area m_dummyArea2 := {
      geoAreaPosLatitude := 873548,
      geoAreaPosLongitude := 2837,
      distanceA := 8765,
      distanceB := 4321,
      angle := 4567
      }
garciay's avatar
garciay committed
      template (value) GeoBroadcastArea m_dummyGeoBroadcastArea1 := {
      geoBroadcastSubType := e_geoBroadcastRect,
      geoBroadcastArea := m_dummyArea1
      }
garciay's avatar
garciay committed
      template (value) GeoBroadcastArea m_dummyGeoBroadcastArea2 := {
      geoBroadcastSubType := e_geoBroadcastElip,
      geoBroadcastArea := m_dummyArea2
      }
garciay's avatar
garciay committed
      template (value) GeoAnycastArea m_dummyGeoAnycastArea1 := {
      geoAnycastSubType := e_geoAnycastCircle,
      geoAnycastArea := m_dummyArea1
      }
garciay's avatar
garciay committed
      template (value) GeoAnycastArea m_dummyGeoAnycastArea2 := {
      geoAnycastSubType := e_geoAnycastRect,
      geoAnycastArea := m_dummyArea2
      }
garciay's avatar
garciay committed

garciay's avatar
garciay committed
      template (value) GnNonSecuredPacket m_geoNwBeaconPacket_payload(
								      in template (value) LongPosVector p_sourceLongPosVec,
								      in template (value) GnRawPayload p_payload
garciay's avatar
garciay committed
								      ) modifies m_geoNwBeaconPacket := {
      payload := p_payload
garciay's avatar
garciay committed
      }
garciay's avatar
garciay committed
	    
garciay's avatar
garciay committed
      /**
       * @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
      }
      }
garciay's avatar
garciay committed

      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
garciay's avatar
garciay committed
									    ) := {
      msgIn := p_geoNwMsg,
      macDestinationAddress := p_llDestinationAdress,
      ssp := p_ssp,
      its_aid := p_its_aid
garciay's avatar
garciay committed
      }

garciay's avatar
garciay committed
    } // End of group LibItsGeoNetworking_DummyTemplates
garciay's avatar
garciay committed
    group testGeoNetMessages {
garciay's avatar
garciay committed
      /**
       * @desc validate GeoNetworkingReq/Anycast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_AnycastPacket() runs on TCType system TCType {
	var GeoNetworkingReq v_gnReq;
garciay's avatar
garciay committed
	var octetstring v_buffer := '01002B0A00308000000F0A0004D200008431A4FDEA5EA5ED0000036B00000109000003150050022400048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
garciay's avatar
garciay committed
	if (PX_GN_UPPER_LAYER != e_any) {
	  log("PX_GN_UPPER_LAYER shall be set to e_any");
	  stop;
	}
garciay's avatar
garciay committed
      v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
						       m_geoNwPdu(
								  m_geoNwAnycastPacket(
garciay's avatar
garciay committed
										       m_dummyLongPosVectorNodeA, 
										       1234, 
										       m_dummyGeoAnycastArea1
garciay's avatar
garciay committed
										       )),
						       oct2int('A0A0A0A0'O)
						       ));
	TestGeoNetworkingReq(
			     v_gnReq, 
			     false);
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
	TestDecodeGeoNetworkingReq(
				   v_gnReq, 
				   v_buffer
				   );
      }
            
garciay's avatar
garciay committed
      /**
       * @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
											     )),
garciay's avatar
garciay committed
							     -,
							     -,
							     oct2int('A0A0A0A0'O)
garciay's avatar
garciay committed
							     ));
garciay's avatar
garciay committed
	TestGeoNetworkingInd(
			     v_gnInd, 
			     false);
garciay's avatar
garciay committed

      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
	TestDecodeGeoNetworkingInd(
				   mw_geoNwInd_withLinkLayerDestination(
									valueof(v_gnInd.msgIn),
									?
									), 
				   v_buffer
				   );
      }
            
garciay's avatar
garciay committed
      /**
       * @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
				   );
garciay's avatar
garciay committed
      }
garciay's avatar
garciay committed
      /**
       * @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
				   );
                
      }
            
garciay's avatar
garciay committed
      /**
       * @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(
garciay's avatar
garciay committed
										       m_dummyLongPosVectorNodeC,
										       m_dummyShortPosVectorNodeC,
										       4321									       )),
garciay's avatar
garciay committed
						       oct2int('A0A0A0A0'O)
						       ));
	TestGeoNetworkingReq(
			     v_gnReq, 
			     false);
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
	TestDecodeGeoNetworkingReq(
				   v_gnReq, 
				   v_buffer
				   );
      }
            
garciay's avatar
garciay committed
      /**
       * @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
				   );
                
      }
            
garciay's avatar
garciay committed
      /**
       * @desc validate GeoNetworkingReq/Beacon
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_BeaconPacket() runs on TCType system TCType {
	var GeoNetworkingReq v_gnReq;
garciay's avatar
garciay committed
	var octetstring v_buffer := '01002B0A0010800000040100A832A40102030405000011E90000007E0000007B002D007D464B1442FFFFFFFFFFFF00000000'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
garciay's avatar
garciay committed
                
garciay's avatar
garciay committed
	if (PX_GN_UPPER_LAYER != e_any) {
	  log("PX_GN_UPPER_LAYER shall be set to e_any");
	  stop;
	}
garciay's avatar
garciay committed
                
garciay's avatar
garciay committed
      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
				   );
garciay's avatar
garciay committed
                
garciay's avatar
garciay committed
      }
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      /**
       * @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
garciay's avatar
garciay committed
	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
garciay's avatar
garciay committed
	TestDecodeGeoNetworkingReq(
				   v_gnReq, 
				   v_buffer
				   );
                
      }
      
garciay's avatar
garciay committed
    } // End of group testGeoNetMessages 
garciay's avatar
garciay committed
    group testGeoNetPort {

      /**
       * @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
      
garciay's avatar
garciay committed
      /**
       * @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;
garciay's avatar
garciay committed
	var boolean v_got_it := false;
	var GeoNetworkingInd v_msg;
garciay's avatar
garciay committed
	if (PX_GN_UPPER_LAYER != e_any) {
	  log("PX_GN_UPPER_LAYER shall be set to e_any");
	  stop;
	}
garciay's avatar
garciay committed
	map(self:geoNetworkingPort, system:geoNetworkingPort);
garciay's avatar
garciay committed
      v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
						       m_geoNwPdu(
								  m_geoNwBroadcastPacket(
											 m_dummyLongPosVectorNodeB, 
											 3456, 
											 m_dummyGeoBroadcastArea1
											 ))));
garciay's avatar
garciay committed
	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);
	    }
garciay's avatar
garciay committed
	    repeat;
garciay's avatar
garciay committed
	  }
	  [] 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 {
	    setverdict(fail);
	  }
garciay's avatar
garciay committed
	  [] tc_ac.timeout {
	    if (v_got_it == false) {
	      setverdict(inconc, "Expected message not received1");
	    }
garciay's avatar
garciay committed
	unmap(self:geoNetworkingPort, system:geoNetworkingPort);
garciay's avatar
garciay committed
      }
garciay's avatar
garciay committed
    } // End of group testGeoNetPort 
garciay's avatar
garciay committed
  } // End of group LibItsGeoNetworking_testCases
garciay's avatar
garciay committed
  group encdec_functions {
garciay's avatar
garciay committed
    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;
garciay's avatar
garciay committed
      // 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.");
garciay's avatar
garciay committed
      // 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.");
	}
	}
      }
garciay's avatar
garciay committed
    } // End of function TestGeoNetworkingReq
garciay's avatar
garciay committed
    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;
garciay's avatar
garciay committed
    v_res := decvalue(v_encMsg, v_decMsg);
      select (v_res) {
      case (0) {
garciay's avatar
garciay committed
	log("v_decMsg          : ", v_decMsg);
garciay's avatar
garciay committed
	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
garciay's avatar
garciay committed
    }// End of function TestDecodeGeoNetworkingReq
garciay's avatar
garciay committed
    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
        
garciay's avatar
garciay committed
    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;
garciay's avatar
garciay committed
    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
garciay's avatar
garciay committed
    }// End of function TestDecodeGeoNetworkingReq
garciay's avatar
garciay committed
  } // End of group encdec_functions 
garciay's avatar
garciay committed
} // End of module