Commit 628dff0a authored by tepelmann's avatar tepelmann
Browse files

Added initial version of TC_464XLAT_PLATLSN_RED_BV_001.

parent d8d1f35d
Loading
Loading
Loading
Loading
+281 −0
Original line number Diff line number Diff line
@@ -8,14 +8,19 @@ module Ats464XLat_TestCases {
    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_DataStrings all;
    import from LibCommon_BasicTypesAndValues all;
    
    // LibIPv6
    import from LibIpv6_CommonRfcs_TypesAndValues all;
    import from LibIpv6_CommonRfcsDhcp_TypesAndValues all;
    import from LibIpv6_Interface_TypesAndValues all;
    import from LibIpv6_Interface_Templates all;
    
    // Ats464XLat
    import from Ats464XLat_Functions all;
    import from Ats464XLat_Interfaces all;
    import from Ats464XLat_Pixits all;
    
    // AtsCommon
    import from AtsCommon_TypesAndValues all;
@@ -175,6 +180,282 @@ module Ats464XLat_TestCases {
            
        } // End of group basicFunction 
        
        group packetFragmentation {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group packetFragmentation
        
        group mssClamping {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group mssClamping
        
    } // End of group clatCpe 
    
    group platLsn {
        
        group basicFunction {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group basicFunction
        
        
        group natPools {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group natPools
        
        
        group addressWithdrawal {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group addressWithdrawal
        
        
        group staticPortAndIpReservation {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group staticPortAndIpReservation
        
        
        group packetFragmentation {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group packetFragmentation
        
        
        group mssClamping {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group mssClamping
        
        
        group natTimers {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group natTimers
        
        
        group applicationLayerGateways {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group applicationLayerGateways
        
        
        group routingTables {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group routingTables
        
        
        group anycastAddressing {
            
            group validBehaviour {
                
            } // End of group validBehaviour
            
        } // End of group anycastAddressing
        
        
        group redundancy {
            
            group validBehaviour {
                
                /**
                 * @desc Check that the IUT supports Redundant NPUs
                 * @verdict pass on success, inconc on timeout, fail otherwise
                 * <pre>        
                 * PICS Selection: none 
                 * Initial conditions:
                 *  with {
                 *      the IUT is properly provisioned
                 *      the interfaces are connected & functional
                 *      the IUT is configured with redundant NPUs
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives multiple IPv6 packets 
                 *              containing IPv6 transport header
                 *                  containing source address
                 *                      indicating client IPv6 address
                 *                  containing destination address
                 *                      indicating IUT GW IPv6 prefix first 64 bits
                 *                      indicating IUT IPv4 embedded into the IPv6 address in last 32 bits
                 *          from multiple clients
                 *          and active NPU is removed from the IUT
                 *      }
                 *      then {
                 *          the IUT forwards packets to the destination before NPU removal
                 *          and the IUT forwards packets to the destination after NPU removal
                 *      }
                 *  }
                 * </pre>
                 * 
                 * @version 0.0.1
                 * @reference ETSI TS 101 569-1 Clause 6.4.1 NAT64 LSN Technology Feature Summary 
                 * @see     ETSI TS xxx xxx-x V0.0.1.5a-draft (2013-07) TP/464XLAT/PLAT-LSN/RED/VB/01
                 */
                testcase TC_464XLAT_PLATLSN_RED_BV_001() runs on FourSixFourXLatComponent system TestAdapter {
                    
                    // Local variables
                    var UInt v_hostNum := lengthof(PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos);     /** Expected number of IPv6 packets to be forwarded */
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_host;                                         /** 'for' statement counter */
                    
                    // Test control
                    
                    // Test component configuration
                    vc_lsnComponents[0] := LSNComponent.create(c_COMP_LSN);
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        vc_hostComponents[v_host] := HostComponent.create(c_COMP_HOST & int2str(v_host));
                    } // End of 'for' statement 
                    f_cf01Up_PLAT();
                    
                    // Test adapter configuration
                    
                    // Test Body
                    // Start all components
                    vc_lsnComponents[v_host].start(f_TC_464XLAT_PLATLSN_RED_BV_001_lsn(v_hostNum));
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                      v_ipv4Packet := m_ipv4Packet_dummy(
                                    PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                                    PX_IPV4_DESTINATION_INFORMATION.iutAddress,
                                    m_tcp_packet(
                                        PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].srcPort,
                                        PX_464XLAT_MAPPING_TABLE_1_TO_N.dstPort,
                                        PX_IPV4_DESTINATION_INFORMATION.payload,
                                        m_tcp_flags_syn
                                    )
                                );
                        v_ipv6Packet := m_generalIpv6_ipv4Payload(
                          c_ipv4Hdr,
                          PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].ip6Address,
                          PX_464XLAT_PREFIX & c_4ZeroBytes & PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                          v_ipv4Packet
                        );
                        
                        vc_hostComponents[v_host].start(f_TC_464XLAT_PLATLSN_RED_BV_001_host(v_ipv6Packet));
                    } // End of 'for' statement 
                    
                    f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, "NPUremoval", c_tbDone, c_poDone });
                    
                    // Postamble
                    f_down();
                    
                } // End of testcase TC_464XLAT_PLATLSN_RED_BV_001
                
                group f_TC_464XLAT_PLATLSN_RED_BV_001 {
                    
                    /**
                     * @desc Simulates LSN side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_RED_BV_001_lsn(integer p_hostNum) runs on LSNComponent {
                        
                        // Local variables
                        var FncRetCode v_result;
                        var Ipv4Address v_localAddress := PX_IPV4_DESTINATION_INFORMATION.iutAddress;
                        
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_lsn(v_localAddress);
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        v_result := f_lsn_check_1_to_n_NAT_mapping(v_localAddress, p_hostNum);
                        if (v_result==e_success) {
                            f_utSendCommand("Remove the active NPU!");
                            f_selfOrClientSyncAndVerdict("NPUremoval", v_result);
                            v_result := f_lsn_check_1_to_n_NAT_mapping(v_localAddress, p_hostNum);
                            select (v_result) {
                                case (e_success) {
                                    log("*** " & __SCOPE__ & ": PASS: Packets are forwarded after NPU removal. ***");
                                }
                                case else {
                                    v_result := e_error;
                                    log("*** " & __SCOPE__ & ": FAIL: Packets are not correctly forwarded after NPU removal. ***");
                                }
                            }
                        }
                        
                        f_selfOrClientSyncAndVerdict(c_tbDone, v_result);
                        
                        // Postamble
                        f_postamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_RED_BV_001_lsn
                    
                    /**
                     * @desc Simulates client side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_RED_BV_001_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                        
                        // Local variables
                         
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_host();
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        f_sendIpv6Packet(p_ipv6Packet);
                        f_selfOrClientSyncAndVerdict("NPUremoval", e_success);
                        f_sendIpv6Packet(p_ipv6Packet);
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        
                        // Postamble
                        f_postamble_host();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_RED_BV_001_host
                    
                } // End of group f_TC_464XLAT_PLATLSN_RED_BV_001
                
            } // End of group validBehaviour
            
        } // End of group redundancy
        
    } // End of group platLsn
    
} // End of Ats464XLat_TestCases
 No newline at end of file
+20 −0
Original line number Diff line number Diff line
@@ -97,6 +97,26 @@ module AtsCommon_Templates {
    
    group ipv6MessageTemplates {
        
        /**
         *  @param  p_nextHeader Next header identifier value to be used.
         *  @param  p_extHdrList List of extension header in the packet.
         *  @param  p_src Binary IPv6 address associated with the
         *          test component.
         *  @param  p_dst Binary IPv6 address associated with NUT.
         *  @param  p_data Data sent in the Echo Request packet.
        */
        template (value) Ipv6Packet m_generalIpv6_ipv4Payload(
            UInt8       p_nextHeader,
            Ipv6Address p_src,
            Ipv6Address p_dst,
            Ipv4Packet  p_ipv4Payload) := {
            ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
            extHdrList := omit,
            ipv6Payload := { 
                ipv4Packet := p_ipv4Payload
            }
        } // End of template m_generalIpv6_ipv4Payload
        
        /**
         *  @param  p_nextHeader Next header identifier value to be used.
         *  @param  p_dst Binary IPv6 address associated with NUT.