TestCodec_GeoNetworking.ttcn 13.7 KB
Newer Older
module TestCodec_GeoNetworking {
    
    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
//    import from LibCommon_DataStrings 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;
    
    // LibItsExternal
//    import from LibItsExternal_TypesAndValues 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;
//    
    // 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;
    
    group LibItsGeoNetworking_testCases {
        
        group LibItsGeoNetworking_DummyTemplates {
            
            /**
             * @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) 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
            }
        
            /**
             * @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
            }
            }
            
        } // End of group LibItsGeoNetworking_DummyTemplates
        
garciay's avatar
garciay committed
        group testGeoNetMessages {
            
            /**
             * @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 := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFF'O; // Check for 'LibItsIPv6GeoNetworking_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
                ))));
                TestGeoNetworkingReq(
                    v_gnReq, 
                    false/*, 
                    oct2bit(v_buffer)*/);
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
                TestDecodeGeoNetworkingReq(
                    v_gnReq, 
                    v_buffer
                );
garciay's avatar
garciay committed
                
            }
            
        } // End of group testGeoNetMessages 
        
        group testGeoNetPort {
            
            /**
             * @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;
                var octetstring v_buffer := '01002B0A00418000000F0A000D800000A832A40102030405000011E90000007E0000007B002D007D00048D8800007FE904D2162E23A3000044454641554C545F5041594C4F4144FFFFFFFFFFFF'O; // Check for 'LibItsIPv6GeoNetworking_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;
                }
                
                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(?)) {
                        setverdict(pass);
                    }
                    [] tc_ac.timeout {
                        setverdict(fail, "Expected message not received1");
                    }
                }
                
                unmap(self:geoNetworkingPort, system:geoNetworkingPort);
                
garciay's avatar
garciay committed
        } // End of group testGeoNetPort 
        
    } // End of group LibItsGeoNetworking_testCases
    
garciay's avatar
garciay committed
    group encdec_functions {
        
        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);
garciay's avatar
garciay committed
            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.");
                    }
                }
            }
            
        } // End of function TestGeoNetworkingReq
        
        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) {
                    log("v_decMsg: ", v_decMsg);
                    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
            
        }// End of function TestDecodeGeoNetworkingReq
        
        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
            
        }// End of function TestDecodeGeoNetworkingReq
        
garciay's avatar
garciay committed
      } // End of group encdec_functions 
      
} // End of module