Commit 272322f9 authored by berge's avatar berge
Browse files

Introduced framework for PTCs + configs

Updated TCs
parent edd1050d
Loading
Loading
Loading
Loading
+342 −8
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ module LibItsGeoNetworking_Functions {
    // Libcommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_VerdictControl {type FncRetCode;}
    import from LibCommon_Sync {altstep all};
    
    // LibIts
    import from LibIts_TestSystem all;
@@ -53,27 +54,331 @@ module LibItsGeoNetworking_Functions {
        
    } // end f_ptcGeoNetworkingDown
    
    group geoConfigurationFunctions {
        
        /**
         * @desc This configuration features:
         *       - one ITS node (IUT)
         *       - two ITS nodes (nodeA, nodeB) 
         */
        function f_cf01Up() runs on ItsNt {

            // Variables
            var PositionTable v_positionTable := {};
 
            // Map
            map(self:geoNetworkingPort, system:geoNetworkingPort);
            
            // Position table
            f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
            f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
        
            f_initialiseComponent(v_positionTable, c_compNodeB);
            
        } // end f_cf01Up

        /**
         * @desc Deletes configuration cf01
         */
        function f_cf01Down() runs on ItsNt {

            // Map
            unmap(self:geoNetworkingPort, system:geoNetworkingPort);
            
        } // end f_cf01Down
        
        /**
         * @desc This configuration features:
         *       - one ITS node (IUT)
         *       - one ITS node (NodeA)
         *       - one ITS node (NodeB)
         *       - Area1 which only includes Tester 
         *         Tester being close to the area center          
         *         
         * @param p_nodeA
         * @param p_nodeB
         */
        function f_cf02Up(out ItsNt p_nodeA, out ItsNt p_nodeB) runs on ItsMtc {
            
            // Variables
            var PositionTable v_positionTable := {};
            
            // Create
            p_nodeA := ItsNt.create(c_compNodeA) alive;
            p_nodeB := ItsNt.create(c_compNodeB) alive;

            // Map            
            map(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect            
            connect(p_nodeA:syncPort, self:syncPort);
            connect(p_nodeB:syncPort, self:syncPort);
        
            // Position table
            f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
            f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
            
            p_nodeA.start(f_initialiseComponent(v_positionTable, c_compNodeA));
            p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
            p_nodeA.done;
            p_nodeB.done;
        
        } // end f_cf02Up

        /**
         * @desc Deletes configuration cf02
         * @param p_nodeA
         * @param p_nodeB
         */
        function f_cf02Down(in ItsNt p_nodeA, in ItsNt p_nodeB) runs on ItsMtc {
            
            // Map
            unmap(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
            disconnect(p_nodeA:syncPort, self:syncPort);
            disconnect(p_nodeB:syncPort, self:syncPort);
        
        } // end f_cf02Down
        
        /**
         * @desc This configuration features:
         *       - one ITS node (IUT)
         *       - one ITS node (NodeA)
         *       - one ITS node not in direction of NodeA (NodeB)       
         *       - one ITS node in direction of Tester (NodeC)
         *       - Area1 which only includes NodeA, NodeB and IUT, 
         */
        function f_cf03Up(out ItsNt p_nodeA, out ItsNt p_nodeB, out ItsNt p_nodeC) runs on ItsMtc {

            // Variables
            var PositionTable v_positionTable := {};
 
            // Create
            p_nodeA := ItsNt.create(c_compNodeA) alive;
            p_nodeB := ItsNt.create(c_compNodeB) alive;
            p_nodeC := ItsNt.create(c_compNodeC) alive;

            // Map
            map(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
            connect(p_nodeA:syncPort, self:syncPort);
            connect(p_nodeB:syncPort, self:syncPort);
            connect(p_nodeC:syncPort, self:syncPort);

            // Position table
            f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
            f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeC, f_computePosition());
            
            p_nodeA.start(f_initialiseComponent(v_positionTable, c_compNodeA));
            p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
            p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC));
            p_nodeA.done;
            p_nodeB.done;
            p_nodeC.done;
                    
        } // end f_cf03Up

        /**
         * @desc Deletes configuration cf03
         * @param p_nodeA
         * @param p_nodeB
         * @param p_nodeC
         */
        function f_cf03Down(in ItsNt p_nodeA, in ItsNt p_nodeB, in ItsNt p_nodeC) runs on ItsMtc {
            
            // Map
            unmap(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
            disconnect(p_nodeA:syncPort, self:syncPort);
            disconnect(p_nodeB:syncPort, self:syncPort);
            disconnect(p_nodeC:syncPort, self:syncPort);
        
        } // end f_cf03Down

        /**
         * @desc This configuration features:
         *       - one ITS node (IUT)
         *       - one ITS node (NodeA)
         *       - one ITS node in direction of NodeA and having 
         *         shortest distance to NodeA (NodeB)
         *       - one ITS node in direction of NodeA (NodeD)
         *       - one ITS node not in direction of NodeA (NodeC)
         *       - Area2 which only includes NodeA, NodeB and NodeD, 
         *         NodeB being close to the area center          
         */
        function f_cf04Up(out ItsNt p_nodeA, out ItsNt p_nodeB, out ItsNt p_nodeC, out ItsNt p_nodeD) runs on ItsMtc {

            // Variables
            var PositionTable v_positionTable := {};

            // Create
            p_nodeA := ItsNt.create(c_compNodeA) alive;
            p_nodeB := ItsNt.create(c_compNodeB) alive;
            p_nodeC := ItsNt.create(c_compNodeC) alive;
            p_nodeD := ItsNt.create(c_compNodeD) alive;

            // Map
            map(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
            map(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
            connect(p_nodeA:syncPort, self:syncPort);
            connect(p_nodeB:syncPort, self:syncPort);
            connect(p_nodeC:syncPort, self:syncPort);
            connect(p_nodeD:syncPort, self:syncPort);
            
            // Position table
            f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
            f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeC, f_computePosition());
            f_addPosition(v_positionTable, c_compNodeD, f_computePosition());
                        
            p_nodeA.start(f_initialiseComponent(v_positionTable, c_compNodeA));
            p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
            p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC));
            p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD));
            p_nodeA.done;
            p_nodeB.done;
            p_nodeC.done;
            p_nodeD.done;
                    
        } // end f_cf04Up

        /**
         * @desc Deletes configuration cf04
         * @param p_nodeA
         * @param p_nodeB
         * @param p_nodeC
         * @param p_nodeD
         */
        function f_cf04Down(in ItsNt p_nodeA, in ItsNt p_nodeB, in ItsNt p_nodeC, in ItsNt p_nodeD) runs on ItsMtc {
            
            // Map
            unmap(p_nodeA:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
            unmap(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
            disconnect(p_nodeA:syncPort, self:syncPort);
            disconnect(p_nodeB:syncPort, self:syncPort);
            disconnect(p_nodeC:syncPort, self:syncPort);
            disconnect(p_nodeD:syncPort, self:syncPort);
        
        } // end f_cf04Down
        
        function f_initialiseComponent(
            in PositionTable p_positionTable,
            in charstring p_componentName) 
        runs on ItsNt {
            
            vc_positionTable := p_positionTable;
            vc_componentName := p_componentName; 
            
        } // end f_initialiseComponent
        
    } // end geoConfigurationFunctions
    
    group geoPositionFunctions {
        
        function f_addPosition(
            inout PositionTable p_positionTable, 
            in charstring p_positionKey,
            in LongPosVector p_positionValue) {
            
            // TODO
        }
        
        function f_getPosition(
            in PositionTable p_positionTable, 
            in charstring p_positionKey)
        return LongPosVector {
            
            var LongPosVector v_return;
            // TODO   
            
            return v_return;
        }
        
        function f_computePosition() return LongPosVector {
         
            var LongPosVector v_return;
            // TODO
            
            return v_return;
        }
        
    } // end geoPositionFunctions    
    
    group geoAltsteps {
        
       	/**
         * @desc The base default.
         */
        altstep a_default() runs on ItsNt {
            
            var LongPosVector v_iutLongPosVector;
            
            [] a_receiveLsRequest(
                ?, ?, ?, v_iutLongPosVector
               ) { 
                repeat;
            }
            [] geoNetworkingPort.receive {
                setverdict (inconc, "Received an unexpected message");
                setverdict (inconc, "*** INCONC: Received an unexpected message ***");
                //TODO shall stop be called here?
                stop;
            }
            [] tc_wait.timeout {
                setverdict (inconc, "Timeout while awaiting reaction of the IUT prior to Upper Tester action");
                setverdict (inconc, "*** INCONC: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***");
                //TODO shall stop be called here?
                stop;
            }
            [] tc_ac.timeout {
                setverdict (inconc, "Timeout while awaiting the reception of a message");
                setverdict (inconc, "*** INCONC: Timeout while awaiting the reception of a message ***");
                //TODO shall stop be called here?
                stop;
            }
            [] a_shutdown {
                f_poDefault();
                log("*** a_default: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
                stop;   
            }
        }        

        altstep a_neighbourDefault() runs on ItsNt {
      
            [] a_receiveLsRequestAndReply(
                ?, ?, f_getPosition(vc_positionTable, vc_componentName).gnAddr, 
                f_getPosition(vc_positionTable, vc_componentName), 
                f_getPosition(vc_positionTable, vc_componentName), 
                e_vehicleStation
               ) { 
                repeat;
            }             
            [] a_shutdown {
                f_poNeighbour();
                log("*** a_neighbourDefault: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
                stop;   
            }            
            [] a_default() {                
            }
        }
        
        group geoGeoUnicastAltsteps {
@@ -190,13 +495,24 @@ module LibItsGeoNetworking_Functions {
            activate(a_default());
        }
        
        function f_prNonNeighbour() runs on ItsNt {
            f_prDefault();
        }
        
        function f_prNeighbour() runs on ItsNt {
            activate(a_neighbourDefault());
            f_taStartBeaconing(
                m_beaconHeader(
                    f_getPosition(vc_positionTable, vc_componentName)
                )
            );            
        }
        
        /**
         * @desc Brings the IUT into an initial state.
         * @return 
         */
        function f_prInitialState() runs on ItsNt {
            
            f_prDefault();
        function f_prInitialState() {
            
            // TODO: any specific action ?
            
@@ -279,6 +595,12 @@ module LibItsGeoNetworking_Functions {
        function f_poDefault() runs on ItsNt {
            setverdict(pass);           
        }
        
        function f_poNeighbour() runs on ItsNt {
            f_taStopBeaconing(vc_componentName);
            f_poDefault();           
        }
        
    } // end postambles
    
    group upperTester {
@@ -309,7 +631,7 @@ module LibItsGeoNetworking_Functions {
            
        }
        
        function f_taStopBeaconing() {
        function f_taStopBeaconing(in charstring p_compName) {
            
            //TODO
            
@@ -360,7 +682,7 @@ module LibItsGeoNetworking_Functions {
    
    group testerFunctions {
     	
      function f_sendGeoNetMessage(in GeoNetworkingReq p_geoNetReq) runs on ItsNt {
      function f_sendGeoNetMessage(in template (value) GeoNetworkingReq p_geoNetReq) runs on ItsNt {
          geoNetworkingPort.send(p_geoNetReq);
          if (not (ischosen(p_geoNetReq.msgOut.header.shbHeader) or ischosen(p_geoNetReq.msgOut.header.beaconHeader))) {
              f_setLocalSequenceNumber();
@@ -475,6 +797,18 @@ module LibItsGeoNetworking_Functions {
            return v_itsGnBeaconServiceMaxJitter;
        }

        /**
         * @desc Gets the Lifetime of a Location Table Entry.
         * @return 
         */        
        function f_getLifetimeLocTE() return float {
            var float v_itsGnLifetimeLocTE := 20.0;
            
            //TODO get the value from PIXIT or from the above calculation
            
            return v_itsGnLifetimeLocTE;
        } // end f_getLifetimeLocTE
        
    } // end iutFunctions
    
    group neighborFunctions {
+8 −9
Original line number Diff line number Diff line
@@ -395,10 +395,10 @@ module LibItsGeoNetworking_Templates {
            }
            
            template Header mw_lsReplyHeader(
                template (present) StationTypeIdentifier p_stationType,
                template (present) UInt16 p_seqNumber, 
                template (present) LongPosVector p_sourceLongPosVec, 
                template (present) LongPosVector p_destinationLongPosVec)
                in template (present) StationTypeIdentifier p_stationType,
                in template (present) UInt16 p_seqNumber, 
                in template (present) LongPosVector p_sourceLongPosVec, 
                in template (present) LongPosVector p_destinationLongPosVec)
            modifies mw_lsReplyHeaderAny := {
                lsReplyHeader := {
                    srcPosVector := p_sourceLongPosVec,
@@ -419,8 +419,7 @@ module LibItsGeoNetworking_Templates {
		group beaconHeaderTemplates {
		    
		    template (value) Header m_beaconHeader(
            	in template (value) LongPosVector p_senderLongPosVec,
    			in template (value) StationTypeIdentifier p_stationType
            	in template (value) LongPosVector p_senderLongPosVec
            ) := {
                beaconHeader := {
                	commonHeader := m_commonHeader(
@@ -429,13 +428,13 @@ module LibItsGeoNetworking_Templates {
                    	m_trafficClass,
                    	c_defaultHopLimit,
                    	p_senderLongPosVec,
    					p_stationType
    					e_vehicleStation
                    )
                }
            }
            
            template Header mw_beaconHeader(
    			in template (value) StationTypeIdentifier p_stationType
    			in template (present) StationTypeIdentifier p_stationType
            ) := {
                beaconHeader := {
                   	commonHeader := mw_commonHeader(
@@ -481,7 +480,7 @@ module LibItsGeoNetworking_Templates {
            }
            
            template Header mw_shbHeader(
                in template (value) StationTypeIdentifier p_stationType
                in template (present) StationTypeIdentifier p_stationType
            ) := {
                shbHeader := {
                    commonHeader := mw_commonHeader(
+21 −0
Original line number Diff line number Diff line
@@ -10,6 +10,27 @@ module LibItsGeoNetworking_TypesAndValues {
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;

    group geoConfigurationValues {
        
        const charstring c_compIut := "IUT";
        const charstring c_compNodeA := "NodeA";
        const charstring c_compNodeB := "NodeB";
        const charstring c_compNodeC := "NodeC";
        const charstring c_compNodeD := "NodeD";
        
    } // end geoConfigurationValues

    group geoConfigurationTypes {
        
        type record PositionEntry {
            charstring key,
            LongPosVector position   
        }
        
        type record of PositionEntry PositionTable;
        
    } // end geoConfigurationTypes

	group geoNwValues {
	    
	    group geoNwHeaderConstants {
+4 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ module LibIts_Interface {
        
    // LibCommon
    import from LibCommon_Time {modulepar all;}
    import from LibCommon_Sync all;
    
	group adapterInterface {
	        
@@ -39,7 +40,7 @@ module LibIts_Interface {
        
        group adapterComponent {
            
            type component ItsAdapterComponent {
            type component ItsAdapterComponent extends ClientSyncComp {
                
         	    // Adapter ports
        	    port UpperTesterPort utPort;
@@ -122,6 +123,8 @@ module LibIts_Interface {
            
            //variables
            var UInt16 vc_localSeqNumber := 0;
            var PositionTable vc_positionTable := {};
            var charstring vc_componentName := "";
            
        } // end ItsNt
        
+2 −1
Original line number Diff line number Diff line
@@ -12,13 +12,14 @@ module LibIts_TestSystem {
    
    // LibCommon
    import from LibCommon_Time {modulepar all};
    import from LibCommon_Sync all;
    
	group componentDefinitions {

    	/**
    	 * @desc ITS Main Test Component 
    	 */
    	type component ItsMtc {
    	type component ItsMtc extends ServerSyncComp {

            // timers
           	timer tc_guard := PX_TDONE;