/**
 *    @author   ETSI / STF517
 *    @version  $URL$
 *              $Id$
 *    @desc     IVIM Testcases 
 *    @see      ISO TS 19321
 */

module ItsIvim_TestCases {
    
    // LibIts
    import from LibItsIvim_TestSystem all;
    
    // Ats Its
    import from ItsIvim_TpFunctions all;

    // 5.2.1
    group iviMessageTransmission { 
        
        group iviMessageFormat {
            
            /**
             * @desc Check that protocolVersion is set to 1 and messageID is set to 6.
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *     with {
             *         the IUT being in the "initial state"
             *     }
             * Expected behaviour:
             *     ensure that {
             *         when {
             *             a IVIM is generated 
             *         }
             *         then {
             *             the IUT sends a valid IVIM
             *                 containing ITS PDU header
             *                     containing protocolVersion
             *                         indicating value 1
             *                     and containing messageID
             *                         indicating value 6
             *         }
             *     }
             * </pre>
             * 
             * @see       ETSI TS 103 191-2 TP_IS_IVI_MSGF_BV_01, ETSI TS 103 301, clause 7.3
             */
            testcase TC_IS_IVI_MSGF_BV_01() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_MSGF_BV_01();
                
            } // End of TC_IS_IVI_MSGF_BV_01
            
        } // End of group iviMessageFormat
        
        group iviEventGeneration {
            
            /**
             * @desc    Check that IVI Service generates a new IVIM on reception of a valid AppIVIM_Trigger request
             * <pre>
             * PICS Selection: PICS_IVIM_GENERATION 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_Trigger request from the application layer
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVGN_BV_01, ETSI TS 103 301, clause 7.4.1
             */
            testcase TC_IS_IVI_EVGN_BV_01() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVGN_BV_01();
                
            } // End of TC_IS_IVI_EVGN_BV_01
            
            /**
             * @desc    Check that a new iviIdentificationNumber value is assigned for each newly generated IVIM
             * <pre>
             * PICS Selection: PICS_IVIM_GENERATION 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated several IVIM
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT is requested to generate a new IVIM
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing iviIdentificationNumber
             *                          indicating an unused value
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVGN_BV_02, ETSI TS 103 301, clause 7.4.1
             */
            testcase TC_IS_IVI_EVGN_BV_02() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVGN_BV_02();
                
            } // End of TC_IS_IVI_EVGN_BV_02
            
            /**
             * @desc    Check that iviIdentificationNumber value is set to a next unused value each time an IVIM is detected
             * <pre>
             * PICS Selection: PICS_IVIM_GENERATION 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated several IVIM
             *      and the IUT having generated its last DENM
             *          containing ivi
             *              containing mandatory
             *                  containing iviIdentificationNumber
             *                      indicating IVI_ID_1
             *      and no active IviID being associated with iviIdentificationNumber IVI_ID_1 + 1
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT is requested to generate a new IVIM
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing iviIdentificationNumber
             *                          indicating IVI_ID_1 + 1
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVGN_BV_03, ETSI TS 103 301, clause 7.4.1
             */
            testcase TC_IS_IVI_EVGN_BV_03() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVGN_BV_03();
                
            } // End of TC_IS_IVI_EVGN_BV_03
            
            /**
             * @desc    Check that a new generated IVIM contains an iviStatus set to 'new'
             * <pre>
             * PICS Selection: PICS_IVIM_GENERATION 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT is requested to generate a new IVIM
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing iviStatus
             *                          indicating 'new'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVGN_BV_04, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVGN_BV_04() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVGN_BV_04();
                
            } // End of TC_IS_IVI_EVGN_BV_04
            
            /**
             * @desc   Check that the timeStamp is set to the current time when generating a new IVM
             * <pre>
             * PICS Selection: PICS_IVIM_GENERATION 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT is requested to generate a new IVIM
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing timeStamp
             *                          indicating CLT
             *                      and containing iviStatus
             *                          indicating 'new'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVGN_BV_05, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVGN_BV_05() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVGN_BV_05();
                
            } // End of TC_IS_IVI_EVGN_BV_05
            
        } // End of group iviEventGeneration
        
        group iviEventUpdate {
            
            /**
             * @desc    Check that an updated IVIM contains an iviStatus set to 'update'
             * <pre>
             * PICS Selection: PICS_IVIM_UPDATE 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated an event
             *          containing ivi
             *              containing mandatory
             *                  containing iviIdentificationNumber 
             *                      indicating IVIM_ID_1
             *                  containing iviStatus
             *                      indicating 'new'
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_update request associated with IVIM_ID_1
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing iviStatus
             *                          indicating 'update'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVUP_BV_01, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVUP_BV_01() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVUP_BV_01();
                
            } // End of TC_IS_IVI_EVUP_BV_01
            
            /**
             * @desc    Check that an update can change the validity time to the IVIM - validTo information field
             * <pre>
             * PICS Selection: PICS_IVIM_UPDATE 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated an event
             *          containing ivi
             *              containing mandatory
             *                  not containing validTo
             *                  and containing iviStatus
             *                      indicating 'update'
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_update indicating a validTo value VT_1
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing validTo
             *                          indicating VT_1
             *                      and containing iviStatus
             *                          indicating 'update'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVUP_BV_02, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVUP_BV_02() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVUP_BV_02();
                
            } // End of TC_IS_IVI_EVUP_BV_02
            
            /**
             * @desc    Check that an update can change the validity time to the IVIM - validFrom information field
             * <pre>
             * PICS Selection: PICS_IVIM_UPDATE 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated an event
             *          containing ivi
             *              containing mandatory
             *                  not containing validFrom
             *                  and containing iviStatus
             *                      indicating 'update'
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_update indicating a validFrom value VF_1
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing validFROM
             *                          indicating VF_1
             *                      and containing iviStatus
             *                          indicating 'update'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVUP_BV_03, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVUP_BV_03() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVUP_BV_03();
                
            } // End of TC_IS_IVI_EVUP_BV_03
            
            /**
             * @desc    Check that the timeStamp is set to the current time when generating an update with some change of information content
             * <pre>
             * PICS Selection: PICS_IVIM_UPDATE 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated an event
             *          containing ivi
             *              containing mandatory
             *                  containing timeStamp
             *                  and containing iviStatus
             *                      indicating 'new'
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_update
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing timeStamp
             *                          indicating CLT
             *                      and containing iviStatus
             *                          indicating 'update'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVUP_BV_04, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVUP_BV_04() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVUP_BV_04();
                
            } // End of TC_IS_IVI_EVUP_BV_04
            
            /**
             * @desc    Check that the iviIdentificationNumber remains unchanged IVIM is updated
             * <pre>
             * PICS Selection: PICS_IVIM_UPDATE 
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *      and the IUT having generated an event
             *          containing ivi
             *              containing mandatory
             *                  containing iviIdentificationNumber 
             *                      inicating IVIM_ID_1
             *                  and containing iviStatus
             *                      indicating 'new'
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when { 
             *          the IUT receives an AppIVIM_update request associated with IVIM_ID_1
             *      }
             *      then {
             *          the IUT sends a valid IVIM
             *              containing ivi
             *                  containing mandatory
             *                      containing iviIdentificationNumber 
             *                          indicating IVIM_ID_1
             *                      and containing iviStatus
             *                          indicating 'update'
             *      }
             *  }
             * </pre>
             * 
             * @see     ETSI TS 103 191-2 TP_IS_IVI_EVUP_BV_05, ETSI TS 103 301, clause 7.4.2
             */
            testcase TC_IS_IVI_EVUP_BV_05() runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVUP_BV_05();
                
            } // End of TC_IS_IVI_EVUP_BV_05
            
        } // End of group iviEventUpdate
        
        group iviEventTermination {
            
            /**
             * @desc Check that the IUT terminates IVM genration on validity duration expery
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *            containing ivi
             *                containing mandatory
             *                    containing iviIdentificationNumber 
             *                        indicating IVIM_ID_1
             *                and containing validTo
             *                    indicating CLT + 10 seconds
             *                and containing iviStatus
             *                    indicating 'new'
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT is alerted of expiration of the time associated with validTo
             *        }
             *        then {
             *            the IUT stops ending IVIM associated with IVIM_ID_1
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_EVTR_BV_01
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_EVTR_BV_01 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVTR_BV_01();
                
            } // End of testcase TC_IS_IVI_EVTR_BV_01
            
            /**
             * @desc Check that the IUT terminates IVM genration on termination request
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *            containing ivi
             *                containing mandatory
             *                    containing iviIdentificationNumber 
             *                        indicating IVIM_ID_1
             *                and not containing validTo
             *                and containing iviStatus
             *                    indicating 'new'
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT receives an AppIVIM_termination request associated with IVIM_ID_1
             *        }
             *        then {
             *            the IUT stops ending IVIM associated with IVIM_ID_1
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_EVTR_BV_02
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_EVTR_BV_02 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVTR_BV_02();
                
            } // End of testcase TC_IS_IVI_EVTR_BV_02
            
        } // End of group iviEventTermination
        
        group iviEventRepetition {
            
            /**
             * @desc Check that the IUT activates repetition on reception of a valid AppIVIM_Update request
             * <pre>
             * Pics Selection: PICS_IVIM_UPDATE
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *            containing ivi
             *                containing mandatory
             *                    containing iviIdentificationNumber 
             *                        indicating IVIM_ID_1
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT receives an AppIVIM_Update indicating 'repetition interval' RI_1
             *        }
             *        then {
             *            the IUT sends IVIM with respect to the 'repetition interval' RI_1
             *                containing ivi
             *                    containing mandatory
             *                        containing iviIdentificationNumber 
             *                            indicating IVIM_ID_1
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_EVRP_BV_01
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_EVRP_BV_01 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVRP_BV_01();
                
            } // End of testcase TC_IS_IVI_EVRP_BV_01
            
            /**
             * @desc Check that the IUT activates repetition on reception of a valid AppIVIM_Update request
             * <pre>
             * Pics Selection: PICS_IVIM_UPDATE
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *            containing ivi
             *                containing mandatory
             *                    containing iviIdentificationNumber 
             *                        indicating IVIM_ID_1
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT receives an AppIVIM_Update indicating 'repetition interval' 0
             *        }
             *        then {
             *            the IUT stops sending IVIM associated with IVIM_ID_1
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_EVRP_BV_02
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_EVRP_BV_02 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_EVRP_BV_02();
                
            } // End of testcase TC_IS_IVI_EVRP_BV_02
            
        } // End of group iviEventRepetition
        
        group iviGenerationFrequency {
            
            /**
             * @desc Check that IVIMs are not generated more frequently than T_GenIvimMin
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT sends a IVIM
             *        }
             *        then {
             *            the IUT does not send any IVIM before expiry of T_GenIvimMin
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_GFQ_TI_01
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_GFQ_TI_01 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_GFQ_TI_01();
                
            } // End of testcase TC_IS_IVI_GFQ_TI_01
            
            /**
             * @desc Check that IVIMs are not generated less frequently than T_GenIvimMax
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT having generated several IVIM
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            the IUT sends a IVIM
             *        }
             *        then {
             *            the IUT sends another IVIM before expiry of T_GenIvimMax
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_GFQ_TI_02
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.2
             */
            testcase TC_IS_IVI_GFQ_TI_02 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_GFQ_TI_02();
                
            } // End of testcase TC_IS_IVI_GFQ_TI_02
            
        } // End of group iviGenerationFrequency
        
        group iviCommunication {
            
            /**
             * @desc Check that IVIM uses BTP_B packet
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT sending IVIM
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            an IVIM is generated
             *        }
             *        then {
             *            the IUT sends a valid IVIM
             *                encapsulated in a BTP-B packet
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_COMM_BV_01_01
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.3.2
             */
            testcase TC_IS_IVI_COMM_BV_01_01 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_COMM_BV_01_01();
                
            } // End of testcase TC_IS_IVI_COMM_BV_01_01
            
            /**
             * @desc Check that the destination port for IVIM is set to 2006
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT sending IVIM
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            an IVIM is generated
             *        }
             *        then {
             *            the IUT sends a valid IVIM
             *                encapsulated in a BTP packet
             *                   containing a destination port value set to 2006
             *                   and containing a destination port info value set to 0
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_COMM_BV_01_02
             * @reference ETSI TS 103 301 V1.0.4 Clause 7.4.3.2
             */
            testcase TC_IS_IVI_COMM_BV_01_02 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_COMM_BV_01_02();
                
            } // End of testcase TC_IS_IVI_COMM_BV_01_02
            
            /**
             * @desc Check that TLM service encapsulates IVIM in a UNC with the HeaderType field set to the value of 2
             * <pre>
             * Pics Selection: PICS_IVIM_GENERATION
             * Initial conditions: 
             *   with {
             *        the IUT being in the "initial state"
             *        and the IUT sending IVIM
             *    }
             * Expected behaviour:
             *    ensure that {
             *        when { 
             *            a IVIM is generated
             *        }
             *        then {
             *            the IUT sends a valid IVIM
             *                encapsulated in a UNC packet
             *                    containing a correctly formatted Common Header
             *                        containing HeaderType field
             *                            indicating the value '2'
             *        }
             *    }
             * </pre>
             * 
             * @version   1.0.4
             * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_COMM_BV_02
             */
            testcase TC_IS_IVI_COMM_BV_02 () runs on ItsIvim system ItsIvimSystem {
                
                f_IS_IVI_COMM_BV_02();
                
            } // End of testcase TC_IS_IVI_COMM_BV_02
            
        } // End of group iviCommunication
        
    } // End of group iviMessageTransmission
    
    group iviMessageReception {
        
        /**
         * @desc Check that content of received IVIM is transmitted to 
         *       applications and other facilities.
         * <pre>
         * Pics Selection: PICS_IVIM_RECEPTION
         * Initial conditions: 
         *     with {
         *         the IUT being in the "initial state"
         *         and the IUT having receive a valid IVIM
         *     }
         * Expected behaviour:
         *     ensure that {
         *         when {
         *             the IUT receives a valid IVIM
         *         }
         *         then {
         *             the IUT forwards the IVIM content to upper layers
         *             and the IUT forwards the IVIM content to other facilities
         *         }
         *     }
         * </pre>
         * 
         * @version   1.0.4
         * @see       ETSI TS 103 191-2 v0.0.1 TP_IS_IVI_MSGF_BV_02
         */
        testcase TC_IVIM_MSP_BV_01() runs on ItsIvim system ItsIvimSystem {
            
            f_IS_IVI_MSGF_BV_02();
            
        } // end TC_IVIM_MSP_BV_01
        
    } // End of group iviMessageReception
    
} // End of module ItsIvim_TestCases
