TestCodec_GeoNetworking.ttcn 93.2 KB
Newer Older
module TestCodec_GeoNetworking {
garciay's avatar
garciay committed
  
garciay's avatar
garciay committed
  // LibCommon
  import from LibCommon_BasicTypesAndValues all;
garciay's avatar
garciay committed
  import from LibCommon_DataStrings all;
  import from LibCommon_Time all;
  import from LibCommon_VerdictControl all;
  import from LibCommon_Sync all;
garciay's avatar
garciay committed
  
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
  
garciay's avatar
garciay committed
  // LibItsCommon
  import from LibItsCommon_TypesAndValues all;
  import from LibItsCommon_Templates all;
garciay's avatar
garciay committed
  
garciay's avatar
garciay committed
  // LibItsExternal
garciay's avatar
garciay committed
  import from LibItsExternal_TypesAndValues all;
garciay's avatar
garciay committed
  
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
  
garciay's avatar
garciay committed
  // TestCodec
  import from TestCodec_TestAndSystem all;
garciay's avatar
garciay committed
  
garciay's avatar
garciay committed
  group LibItsGeoNetworking_testCases {
garciay's avatar
garciay committed
    
garciay's avatar
garciay committed
    group LibItsGeoNetworking_DummyTemplates {
garciay's avatar
garciay committed
      
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
      
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
      
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
      
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
      
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
      
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

      /**
       * @desc    Send template for GeoNetworking SHB Packet
       * @param   p_sourceLongPosVec  Long position vector of source
       */
      template (value) GnNonSecuredPacket m_geoNwShbPacket_payload(
garciay's avatar
garciay committed
                                                                   in template (value) LongPosVector p_sourceLongPosVec,
                                                                   in template (value) GnRawPayload p_payload
                                                                   ) modifies m_geoNwShbPacket := {
      payload :=  p_payload
      }

garciay's avatar
garciay committed
      template (value) GnNonSecuredPacket m_geoNwBeaconPacket_payload(
garciay's avatar
garciay committed
                                                                      in template (value) LongPosVector p_sourceLongPosVec,
                                                                      in template (value) GnRawPayload p_payload
                                                                      ) 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(
garciay's avatar
garciay committed
                                                                      in template (value) LongPosVector p_sourceLongPosVec,
                                                                      in template (value) ShortPosVector p_dstPosVector,
                                                                      in template (value) UInt16 p_seqNumber
                                                                      ) := {
garciay's avatar
garciay committed
      geoUnicastHeader := {
garciay's avatar
garciay committed
        seqNumber := p_seqNumber,
        reserved := c_uInt8Zero,
        srcPosVector := p_sourceLongPosVec,
        dstPosVector := p_dstPosVector
garciay's avatar
garciay committed

      template (value) GeoNetworkingInd m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                                            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
      }
      
      /**
       * @desc    Receive template for GeoNetworking SHB Packet
       * @param   p_sourceLongPosVec  Long position vector of source (Default: ?)
       * @param   p_hopLimit          Maximum number of hops (Default: ?)
       */
      template (present) GnNonSecuredPacket mw_geoNwShbPacket_nextHeader(
                                                                         in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                         in template (present) UInt8 p_hopLimit := ?,
                                                                         in template (present) NextHeader p_nextHeader := ?
                                                                         ) modifies mw_geoNwShbPacket := {
      commonHeader := mw_commonHeaderWithHopLimit(
                                                  p_nextHeader,
                                                  m_shbHeaderType,
                                                  p_hopLimit
                                                  ),
      extendedHeader := mw_shbHeader(p_sourceLongPosVec),
      payload := ?
      }
      
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 {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        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(
garciay's avatar
garciay committed
                                                       m_geoNwPdu(
                                                                  m_geoNwAnycastPacket(
                                                                                       m_dummyLongPosVectorNodeA, 
                                                                                       1234, 
                                                                                       m_dummyGeoAnycastArea1
                                                                                       )),
                                                       oct2int('A0A0A0A0'O)
                                                       ));
        TestGeoNetworkingReq(
                             v_gnReq, 
                             false);
garciay's avatar
garciay committed
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        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 {
garciay's avatar
garciay committed
        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
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
                
      v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                             m_geoNwPdu(
                                                                        m_geoNwAnycastPacket(
                                                                                             m_dummyLongPosVectorNodeA, 
                                                                                             1234, 
                                                                                             m_dummyGeoAnycastArea1
                                                                                             )),
                                                             -,
                                                             -,
                                                             oct2int('A0A0A0A0'O)
                                                             ));
        TestGeoNetworkingInd(
                             v_gnInd, 
                             false);
garciay's avatar
garciay committed

      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        TestDecodeGeoNetworkingInd(
                                   mw_geoNwInd_withLinkLayerDestination(
                                                                        valueof(v_gnInd.msgIn),
                                                                        ?
                                                                        ), 
                                   v_buffer
                                   );
garciay's avatar
garciay committed
      }
            
garciay's avatar
garciay committed
      /**
       * @desc validate GeoNetworkingReq/Broadcast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_BroadcastPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        var octetstring v_buffer := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'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
                
      v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
garciay's avatar
garciay committed
                                                       m_geoNwPdu(
                                                                  m_geoNwBroadcastPacket(
                                                                                         m_dummyLongPosVectorNodeB, 
                                                                                         3456, 
                                                                                         m_dummyGeoBroadcastArea1
                                                                                         )),
                                                       oct2int('A0A0A0A0'O)
                                                       ));
        TestGeoNetworkingReq(
                             v_gnReq, 
                             false);
garciay's avatar
garciay committed
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        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 {
garciay's avatar
garciay committed
        var GeoNetworkingInd v_gnInd;
        var octetstring v_buffer := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'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
                
      v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                             m_geoNwPdu(
                                                                        m_geoNwBroadcastPacket(
                                                                                               m_dummyLongPosVectorNodeB, 
                                                                                               3456, 
                                                                                               m_dummyGeoBroadcastArea1
                                                                                               )),
                                                             -,
                                                             -,
                                                             oct2int('A0A0A0A0'O)
                                                             ));
        TestGeoNetworkingInd(
                             v_gnInd, 
                             false);
garciay's avatar
garciay committed
      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        TestDecodeGeoNetworkingInd(
                                   v_gnInd, 
                                   v_buffer
                                   );
garciay's avatar
garciay committed
                
      }
            
      /**
       * @desc validate GeoNetworkingInd/Broadcast SHB
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetInd_ShbPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingInd v_gnInd;
        var octetstring v_buffer := '01002B0A0050800000300A00A832A40102030405000011E90000007E0000007B002D007D0000000007D1000001020000273F7C730059F34F8C4E2DB0661FFFFFFC2231129E48927FC1F48082788A800F53080FFFC4014004FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'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;
        }
                
      v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                             m_geoNwPdu(
                                                                        m_geoNwShbPacket_payload(
                                                                                                 m_dummyLongPosVectorNodeB,
                                                                                                 '07D1000001020000273F7C730059F34F8C4E2DB0661FFFFFFC2231129E48927FC1F48082788A800F53080FFFC4014004'O
                                                                                                 )),
                                                             -,
                                                             -,
                                                             oct2int('A0A0A0A0'O)
                                                             ));
        TestGeoNetworkingInd(
                             v_gnInd, 
                             false);
      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 48;
        TestDecodeGeoNetworkingInd(
                                   v_gnInd, 
                                   v_buffer
                                   );
      /**
       * @desc validate GeoNetworkingInd/Broadcast SHB
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetInd_ShbPacket_1() runs on TCType system TCType {
        var template GeoNetworkingInd v_gnInd;
        var octetstring v_buffer := '01004c0120500280013c0100140070b3d5791b487ea4bdac19f58e2c0623a93f03e909270000000007d1000001020000272fbdac4059f34ee58e2daf67e00000000033669e40927001f48083109a8003a8ff3fffb000000fdfbc47ebf18ce0004f0095c0382c6700063814d607f0633800dbc0a4703f8b19c006de052481fc18ce0036f029a40fe0c67001b78149207e0633800dbc06a30289b19c0045e0225819418ce0027f01a8c1300c670024380d8a09a263380225c00410031b19c0022dfdfa7f7658ce0022efde23f5d6c67000277ef51faeb63380013bf788fd7db19c0009dfbc47ebad8ce0004efde1bf5f8c67000277ef11faeb63380013bf7a8fd7db19c0009dfbc47ebb18ce0004efde23f5d6c67000277ef0dfafb63380013bf788fd75b19c0009dfbd47ebf18ce0004efde23f5d6c67000277ef11faeb63380013bf786fd7e319c0009dfbc47ebad8ce0004efdea3f5f6c67000277ef11faeb6338001305d35a164FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'O; // Check for 'LibItsGeoNetworking_TypesAndValues.encode:' output in codec traces to get the dump
                
        if (PX_GN_UPPER_LAYER != e_btpB) {
          log("PX_GN_UPPER_LAYER shall be set to e_btpB");
          stop;
        }

        v_gnInd := mw_geoNwInd_withLinkLayerDestination(
                                                        mw_geoNwPdu(
                                                                    mw_geoNwShbPacket
                                                                    ),
                                                        c_llBroadcast
                                                        );

        
        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 {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        var octetstring v_buffer := '01002B0A00208000000F0A0010E100008C2ADEADBABEBEEF00005C5C00005CCA0000C1ED006E00178C2ADEADBABEBEEF00005C5C00005CCA0000C1ED44454641554C545F5041594C4F4144FFFFFFFFFFFFA0A0A0A0'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
                
      v_gnReq := valueof(m_geoNwReq_linkLayerBroadcast(
garciay's avatar
garciay committed
                                                       m_geoNwPdu(
                                                                  m_geoNwUnicastPacket(
                                                                                       m_dummyLongPosVectorNodeC,
                                                                                       m_dummyShortPosVectorNodeC,
                                                                                       4321									       )),
                                                       oct2int('A0A0A0A0'O)
                                                       ));
        TestGeoNetworkingReq(
                             v_gnReq, 
                             false);
garciay's avatar
garciay committed
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        TestDecodeGeoNetworkingReq(
                                   v_gnReq, 
                                   v_buffer
                                   );
garciay's avatar
garciay committed
      }
            
garciay's avatar
garciay committed
      /**
       * @desc validate GeoNetworkingInd/Unicast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetInd_UnicastPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingInd v_gnInd;
        var octetstring v_buffer := '01002B0A00208000000F0A0010E100008C2ADEADBABEBEEF00005C5C00005CCA0000C1ED006E00178C2ADEADBABEBEEF00005C5C00005CCA0000C1ED44454641554C545F5041594C4F4144FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'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
                
      v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                             m_geoNwPdu(
                                                                        m_geoNwUnicastPacket(
                                                                                             m_dummyLongPosVectorNodeC,
                                                                                             m_dummyShortPosVectorNodeC,
                                                                                             4321									       )),
                                                             -,
                                                             -,
                                                             oct2int('A0A0A0A0'O)
                                                             ));
        TestGeoNetworkingInd(
                             v_gnInd, 
                             false);
garciay's avatar
garciay committed
      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 15;
garciay's avatar
garciay committed
        TestDecodeGeoNetworkingInd(
                                   v_gnInd, 
                                   v_buffer
                                   );
garciay's avatar
garciay committed
                
      }
            
garciay's avatar
garciay committed
      /**
       * @desc validate GeoNetworkingReq/Beacon
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_BeaconPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        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(
garciay's avatar
garciay committed
                                                       m_geoNwPdu(
                                                                  m_geoNwBeaconPacket_payload(
                                                                                              m_dummyLongPosVectorNodeB,
                                                                                              '464b1442'O	    
                                                                                              ))));
        TestGeoNetworkingReq(
                             v_gnReq, 
                             false);
garciay's avatar
garciay committed
      v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 4;
garciay's avatar
garciay committed
        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 {
garciay's avatar
garciay committed
        var GeoNetworkingInd v_gnInd;
        var octetstring v_buffer := '01002B0A0010800000040100A832A40102030405000011E90000007E0000007B002D007D464B1442FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000A0A0A0A0'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
                
      v_gnInd := valueof(m_geoNwInd_withLinkLayerDestination(
garciay's avatar
garciay committed
                                                             m_geoNwPdu(
                                                                        m_geoNwBeaconPacket_payload(
                                                                                                    m_dummyLongPosVectorNodeB,
                                                                                                    '464b1442'O	    
                                                                                                    )),
                                                             -,
                                                             -,
                                                             oct2int('A0A0A0A0'O)
                                                             ));
        TestGeoNetworkingInd(
                             v_gnInd, 
                             false);
garciay's avatar
garciay committed
      v_gnInd.msgIn.gnPacket.packet.commonHeader.plLength := 4;
garciay's avatar
garciay committed
        TestDecodeGeoNetworkingInd(
                                   v_gnInd, 
                                   v_buffer
                                   );
garciay's avatar
garciay committed
                
      }
            
      /**
       * @desc validate GeoNetworkingReq/LsRequest
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_LsRequestPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        var octetstring v_buffer := '01002B0A0060800000000A0030390000BC21A4FEDECABEEF0001E240000012F8000002A380372694BC21A4FEDECABEEFFFFFFFFFFFFF00000000'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
                
      v_gnReq := valueof(
garciay's avatar
garciay committed
                         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
                                   );
garciay's avatar
garciay committed
                
      }
            
      /**
       * @desc validate GeoNetworkingReq/LsReply
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNetReq_LsReplyPacket() runs on TCType system TCType {
garciay's avatar
garciay committed
        var GeoNetworkingReq v_gnReq;
        var octetstring v_buffer := '01002B0A0061800000000A0030390000BC21A4FEDECABEEF0001E240000012F8000002A3803726948431A4FDEA5EA5ED0000036B0000010900000315FFFFFFFFFFFF00000000'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
                
      v_gnReq := valueof(
garciay's avatar
garciay committed
                         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
                
      }
      
garciay's avatar
garciay committed
    } // End of group testGeoNetMessages

    group testGeoNetAcTester {

    } // End of group testGeoNetAcTester

garciay's avatar
garciay committed
    group testGeoNetUpperTester {

      /**
       * @desc Validate template GeoNetworking/UtGnInitialize
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnInitialize() runs on TCType system TCType {
garciay's avatar
garciay committed
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnInitialize m_utGnInitialize := { '0809AABBCCDDEEFF'O };
        var bitstring v_expEncMsg := oct2bit('000809AABBCCDDEEFF'O);
garciay's avatar
garciay committed
    
garciay's avatar
garciay committed
        // Encode template
        log("Encode template ", valueof(m_utGnInitialize));
garciay's avatar
garciay committed
      v_encMsg := encvalue(m_utGnInitialize);
garciay's avatar
garciay committed
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnInitialize
      
      /**
       * @desc Validate template GeoNetworking/UtGnChangePosition
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnChangePosition() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnChangePosition m_utGnChangePosition := { 1234, 5678, 9876 };
garciay's avatar
garciay committed
        var bitstring v_expEncMsg := oct2bit('02000004D20000162E00002694'O);
garciay's avatar
garciay committed
    
        // Encode template
        log("Encode template ", valueof(m_utGnChangePosition));
      v_encMsg := encvalue(m_utGnChangePosition);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnChangePosition
garciay's avatar
garciay committed
      
garciay's avatar
garciay committed
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoUnicast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoUnicast_1() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoUnicastMessage(f_getTsGnLocalAddress(c_compNodeB));
        var bitstring v_expEncMsg := oct2bit('50940000000000000B2710800000'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoUnicast_1
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoUnicast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoUnicast_2() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoUnicastMessageWithPayload(f_getTsGnLocalAddress(c_compNodeB), 'CAFEDECA'O);
        var bitstring v_expEncMsg := oct2bit('50940000000000000B2710800004CAFEDECA'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoUnicast_2

      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoBroadcast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoBroadcast_1() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoBroadcastMessage(valueof(GeoArea: {e_geoRect, m_dummyArea1 }));
garciay's avatar
garciay committed
        var bitstring v_expEncMsg := oct2bit('510127108000000000048D8800007FE904D2162E23A30000'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoBroadcast_1
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoBroadcast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoBroadcast_2() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoBroadcastMessageWithPayload(valueof(GeoArea: {e_geoElip, m_dummyArea2 }), 'CAFEDECA'O);
garciay's avatar
garciay committed
        var bitstring v_expEncMsg := oct2bit('5102271080000000000D544C00000B15223D10E111D70004CAFEDECA'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoBroadcast_2

      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoAnycast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoAnycast_1() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoAnycastMessage(valueof(GeoArea: {e_geoRect, m_dummyArea1 }));
garciay's avatar
garciay committed
        var bitstring v_expEncMsg := oct2bit('520127108000000000048D8800007FE904D2162E23A30000'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoAnycast_1
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/GeoAnycast
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_GeoAnycast_2() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateGeoAnycastMessageWithPayload(valueof(GeoArea: {e_geoElip, m_dummyArea2 }), 'CAFEDECA'O);
garciay's avatar
garciay committed
        var bitstring v_expEncMsg := oct2bit('5202271080000000000D544C00000B15223D10E111D70004CAFEDECA'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_GeoAnycast_2
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/Shb
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_Shb_1() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateShbMessage;
        var bitstring v_expEncMsg := oct2bit('53800000'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_Shb_1
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/Shb
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_Shb_2() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateShbMessageWithPayload('CAFEDECA'O);
        var bitstring v_expEncMsg := oct2bit('53800004CAFEDECA'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_Shb_2
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/Tsb
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_Tsb_1() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateTsbMessage;
        var bitstring v_expEncMsg := oct2bit('540A2710800000'O);
    
        // Encode template
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_Tsb_1
      
      /**
       * @desc Validate template GeoNetworking/UtGnTrigger/Tsb
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_GeoNet_UtGnTrigger_Tsb_2() runs on TCType system TCType {
        var bitstring v_encMsg;
        var UtGnInitialize v_decMsg;
        var integer v_res := 0;
        var template (value) UtGnTrigger m_utGnTrigger := m_generateTsbMessageWithLifetime(12345);
        var bitstring v_expEncMsg := oct2bit('540A3039800004CAFEDECA'O);
    
        // Encode template
      m_utGnTrigger.tsb.payload := 'CAFEDECA'O;
        log("Encode template ", valueof(m_utGnTrigger));
      v_encMsg := encvalue(m_utGnTrigger);
        log("Encoded message:  ", bit2oct(v_encMsg));
        // Check result
        if (not isbound(v_encMsg)) {
          setverdict(fail, "Encoding failed!");
          stop;
        }
        if (not match(v_encMsg, v_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
        setverdict(pass, "Encoding passed.");
      } // End of tc_GeoNet_UtGnTrigger_Tsb_2
      
garciay's avatar
garciay committed
    } // End of group testGeoNetUpperTester
garciay's avatar
garciay committed
    
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(
garciay's avatar
garciay committed
                                                                                in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                                in template (present) UInt8 p_hopLimit := ?,
                                                                                in template (value) NextHeader p_nextHeader