+ KarafKeywords.Fail If Exceptions Found During Test ${test_name} fail=${fail}
+ ODLTools.Get All test_name=${test_name}
+
+Genius Suite Debugs
+ [Arguments] ${data_models}
+ Genius.Genius Test Teardown ${data_models} test_name=${SUITE_NAME} fail=False
+
+ITM Direct Tunnels Start Suite
+ [Documentation] start suite for itm scalability
+ ClusterManagement.ClusterManagement_Setup
+ ClusterManagement.Stop_Members_From_List_Or_All
+ FOR ${controller_index} IN RANGE ${NUM_ODL_SYSTEM}
+ Utils.Run Command On Remote System And Log ${ODL_SYSTEM_${controller_index+1}_IP} sed -i -- 's/<itm-direct-tunnels>false/<itm-direct-tunnels>true/g' ${GENIUS_IFM_CONFIG_FLAG}
+ END
+ ClusterManagement.Start_Members_From_List_Or_All
+ Genius.Genius Suite Setup
+
+ITM Direct Tunnels Stop Suite
+ [Documentation] Stop suite for ITM Direct Tunnels.
+ FOR ${controller_index} IN RANGE ${NUM_ODL_SYSTEM}
+ Utils.Run Command On Remote System And Log ${ODL_SYSTEM_${controller_index+1}_IP} sed -i -- 's/<itm-direct-tunnels>true/<itm-direct-tunnels>false/g' ${GENIUS_IFM_CONFIG_FLAG}
+ END
+ Genius.Genius Suite Teardown
+
+Ovs Interface Verification
+ [Documentation] Checks whether the created Interface is seen on OVS or not.
+ FOR ${tools_ip} IN @{TOOLS_SYSTEM_ALL_IPS}
+ Genius.Ovs Verification For Each Dpn ${tools_ip} ${TOOLS_SYSTEM_ALL_IPS}
+ END
+
+Get ITM
+ [Arguments] ${itm_created[0]} ${switch_data}=${SWITCH_DATA}
+ [Documentation] It returns the created ITM Transport zone with the passed values during the creation is done.
+ Collections.Append To List ${switch_data} ${itm_created[0]}
+ Utils.Check For Elements At URI ${TUNNEL_TRANSPORTZONE}/transport-zone/${itm_created[0]} ${switch_data}
+
+Check Tunnel Delete On OVS
+ [Arguments] ${tunnel_list}
+ [Documentation] Verifies the Tunnel is deleted from OVS.
+ FOR ${tools_ip} IN @{TOOLS_SYSTEM_ALL_IPS}
+ ${output} = Utils.Run Command On Remote System ${tools_ip} sudo ovs-vsctl show
+ Genius.Verify Deleted Tunnels on OVS ${tunnel_list} ${output}
+ END
+
+Check Table0 Entry In a Dpn
+ [Arguments] ${tools_ip} ${bridgename} ${port_numbers}
+ [Documentation] Checks the Table 0 entry in the OVS when flows are dumped.
+ ${check} = Utils.Run Command On Remote System And Log ${tools_ip} sudo ovs-ofctl -OOpenFlow13 dump-flows ${bridgename}
+ ${num_ports} = BuiltIn.Get Length ${port_numbers}
+ FOR ${port_index} IN RANGE ${num_ports}
+ BuiltIn.Should Contain ${check} in_port=${port_numbers}[${port_index}]
+ END
+
+Verify Tunnel Status As Up
+ [Arguments] ${no_of_switches}=${NUM_TOOLS_SYSTEM}
+ [Documentation] Verify that the number of tunnels are UP
+ ${no_of_tunnels} = KarafKeywords.Issue Command On Karaf Console ${TEP_SHOW_STATE}
+ ${lines_of_state_up} = String.Get Lines Containing String ${no_of_tunnels} ${STATE_UP}
+ ${actual_tunnel_count} = String.Get Line Count ${lines_of_state_up}
+ ${expected_tunnel_count} = BuiltIn.Evaluate ${no_of_switches}*(${no_of_switches}-1)
+ BuiltIn.Should Be Equal As Strings ${actual_tunnel_count} ${expected_tunnel_count}
+
+Verify Tunnel Status
+ [Arguments] ${tunnel_status} ${tunnel_names}
+ [Documentation] Verifies if all tunnels in the input, has the expected status(UP/DOWN/UNKNOWN)
+ ${tep_result} = KarafKeywords.Issue Command On Karaf Console ${TEP_SHOW_STATE}
+ ${number_of_tunnels} = BuiltIn.Get Length ${tunnel_names}
+ FOR ${each_tunnel} IN RANGE ${number_of_tunnels}
+ ${tunnel} = Collections.Get From List ${tunnel_names} ${each_tunnel}
+ ${tep_output} = String.Get Lines Containing String ${tep_result} ${tunnel}
+ BuiltIn.Should Contain ${tep_output} ${tunnel_status}
+ END
+
+Get Tunnels On OVS
+ [Arguments] ${connection_id}
+ [Documentation] Retrieves the list of tunnel ports present on OVS
+ SSHLibrary.Switch Connection ${connection_id}
+ ${ovs_result} = Utils.Write Commands Until Expected Prompt sudo ovs-vsctl show ${DEFAULT_LINUX_PROMPT_STRICT}
+ @{tunnel_names} = BuiltIn.Create List
+ ${tunnels} = String.Get Lines Matching Regexp ${ovs_result} Interface "tun.*" True
+ @{tunnels_list} = String.Split To Lines ${tunnels}
+ FOR ${tun} IN @{tunnels_list}
+ ${tun_list} Get Regexp Matches ${tun} tun.*\\w
+ Collections.Append To List ${tunnel_names} @{tun_list}
+ END
+ ${items_in_list} = BuiltIn.Get Length ${tunnel_names}
+ [Return] @{tunnel_names}
+
+Get Tunnel
+ [Arguments] ${src} ${dst} ${type} ${config_api_type}=${EMPTY}
+ [Documentation] This keyword returns tunnel interface name between source DPN and destination DPN.
+ ... Statements are executed depending on whether it is itm tunnel state(default) or dpn tep state.
+ ${resp} = BuiltIn.Run Keyword If '${config_api_type}' == '${EMPTY}' RequestsLibrary.Get Request session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${src}/${dst}/${type}/
+ ... ELSE RequestsLibrary.Get Request session ${CONFIG_API}/itm-state:dpn-teps-state/dpns-teps/${src}/remote-dpns/${dst}/
+ BuiltIn.Should Be Equal As Strings ${resp.status_code} ${RESP_CODE}
+ BuiltIn.Log ${resp.text}
+ ${respjson} = RequestsLibrary.To Json ${resp.text} pretty_print=True
+ ${json} = Utils.Json Parse From String ${resp.text}
+ BuiltIn.Should Contain ${resp.text} ${dst}
+ BuiltIn.Run Keyword If '${config_api_type}' == '${EMPTY}' BuiltIn.Should Contain ${resp.text} ${src}
+ ${tunnel_interface_name} = BuiltIn.Run Keyword If "tunnel-interface-names" in "${json}" Genius.Get Tunnel Interface Name ${json["internal-tunnel"][0]} tunnel-interface-names
+ ${tunnel_name_output} ${tunnel_name} = BuiltIn.Run Keyword Unless '${config_api_type}' == '${EMPTY}' BuiltIn.Should Match Regexp ${resp.text} "tunnel-name":"(tun[\\w\\d]+)"
+ ${tunnel} = BuiltIn.Set Variable If '${config_api_type}' == '${EMPTY}' ${tunnel_interface_name} ${tunnel_name}
+ [Return] ${tunnel}
+
+Get Tunnel Interface Name
+ [Arguments] ${json} ${expected_tunnel_interface_name}
+ [Documentation] This keyword extracts tunnel interface name from json given as input.
+ ${tunnels} = Collections.Get From Dictionary ${json} ${expected_tunnel_interface_name}
+ [Return] ${tunnels[0]}
+
+Verify Tunnel Delete on DS
+ [Arguments] ${tunnel}
+ [Documentation] This keyword confirms that specified tunnel is not present by giving command from karaf console.
+ ${output} = KarafKeywords.Issue Command On Karaf Console ${TEP_SHOW_STATE}
+ BuiltIn.Should Not Contain ${output} ${tunnel}
+
+SRM Start Suite
+ [Documentation] Start suite for service recovery.
+ Genius Suite Setup
+ Genius.Create Vteps ${NO_VLAN} ${gateway_ip}
+ BuiltIn.Wait Until Keyword Succeeds 60s 5s Genius.Verify Tunnel Status As Up
+ Genius.Genius Suite Debugs ${data_models}
+
+SRM Stop Suite
+ [Documentation] Stop suite for service recovery.
+ Genius.Delete All Vteps
+ Genius.Genius Suite Debugs ${data_models}
+ Genius.Genius Suite Teardown
+
+Verify Tunnel Monitoring Status
+ [Arguments] ${tunnel_monitor_status}
+ ${output}= KarafKeywords.Issue Command On Karaf Console ${TEP_SHOW}
+ BuiltIn.Should Contain ${output} ${tunnel_monitor_status}
+
+Set Switch Configuration
+ [Documentation] This keyword will set manager,controller,tap port,bridge on each OVS
+ FOR ${tool_system_index} IN RANGE ${NUM_TOOLS_SYSTEM}
+ SSHLibrary.Switch Connection ${TOOLS_SYSTEM_ALL_CONN_IDS}[${tool_system_index}]
+ SSHLibrary.Login With Public Key ${TOOLS_SYSTEM_USER} ${USER_HOME}/.ssh/${SSH_KEY} any
+ SSHLibrary.Execute Command sudo ovs-vsctl add-br ${Bridge}
+ SSHLibrary.Execute Command sudo ovs-vsctl set bridge ${Bridge} protocols=OpenFlow13
+ SSHLibrary.Execute Command sudo ovs-vsctl set-controller ${Bridge} tcp:${ODL_SYSTEM_IP}:${ODL_OF_PORT_6653}
+ SSHLibrary.Execute Command sudo ifconfig ${Bridge} up
+ SSHLibrary.Execute Command sudo ovs-vsctl add-port ${Bridge} tap${tool_system_index}ed70586-6c -- set Interface tap${tool_system_index}ed70586-6c type=tap
+ SSHLibrary.Execute Command sudo ovs-vsctl set-manager tcp:${ODL_SYSTEM_IP}:${OVSDBPORT}
+ SSHLibrary.Execute Command sudo ovs-vsctl show
+ END
+
+Ovs Verification For Each Dpn
+ [Arguments] ${tools_system_ip} ${tools_ips}
+ [Documentation] This keyword will verify whether local and remote ip are present on the tunnels available on OVS
+ ${ovs_output} = Utils.Run Command On Remote System And Log ${tools_system_ip} sudo ovs-vsctl show
+ @{updated_tools_ip_list} = BuiltIn.Create List @{tools_ips}
+ Collections.Remove Values From List ${updated_tools_ip_list} ${tools_system_ip}
+ BuiltIn.Log Many @{updated_tools_ip_list}
+ ${num_tool_ips} BuiltIn.Get Length ${updated_tools_ip_list}
+ FOR ${num} IN RANGE ${num_tool_ips}
+ ${tools_ip} = Collections.Get From List ${updated_tools_ip_list} ${num}
+ BuiltIn.Should Contain ${ovs_output} ${tools_ip}
+ END
+
+Get Tunnels List
+ [Documentation] The keyword fetches the list of operational tunnels from ODL
+ ${no_of_tunnels} KarafKeywords.Issue Command On Karaf Console ${TEP_SHOW_STATE}
+ ${tunnels} = String.Get Regexp Matches ${no_of_tunnels} tun[\\w\\d]+
+ BuiltIn.Log ${tunnels}
+ [Return] ${tunnels}
+
+Verify Table0 Entry After fetching Port Number
+ [Documentation] This keyword will get the port number and checks the table0 entry for each dpn
+ FOR ${tools_ip} IN @{TOOLS_SYSTEM_ALL_IPS}
+ ${check} = Utils.Run Command On Remote System And Log ${tools_ip} sudo ovs-ofctl -O OpenFlow13 show ${Bridge}
+ ${port_numbers} = String.Get Regexp Matches ${check} (\\d+).tun.* 1
+ Genius.Check Table0 Entry In a Dpn ${tools_ip} ${Bridge} ${port_numbers}
+ END
+
+Verify Deleted Tunnels On OVS
+ [Arguments] ${tunnel_list} ${resp_data}
+ [Documentation] This will verify whether tunnel is deleted.
+ BuiltIn.Log ${resp_data}
+ FOR ${tunnel} IN @{tunnel_list}
+ BuiltIn.Should Not Contain ${resp_data} ${tunnel}
+ END
+
+Verify Response Code Of Dpn End Point Config API
+ [Arguments] ${dpn_list}=${DPN_ID_LIST}
+ [Documentation] This keyword will verify response code from itm-state: dpn endpoints config api for each dpn
+ FOR ${dpn} IN @{dpn_list}
+ BuiltIn.Wait Until Keyword Succeeds 40 5 Utils.Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${dpn}/
+ END
+
+Get Tunnel Between DPNs
+ [Arguments] ${tunnel_type} ${config_api_type} ${src_dpn_id} @{dst_dpn_ids}
+ [Documentation] This keyword will Get All the Tunnels available on DPN's
+ FOR ${dst_dpn_id} IN @{dst_dpn_ids}
+ ${tunnel} = BuiltIn.Wait Until Keyword Succeeds 30 10 Genius.Get Tunnel ${src_dpn_id}
+ ... ${dst_dpn_id} ${tunnel_type} ${config_api_type}
+ END
+
+Update Dpn id List And Get Tunnels
+ [Arguments] ${tunnel_type} ${config_api_type}=${EMPTY} ${dpn_ids}=${DPN_ID_LIST}
+ [Documentation] Update the exisisting dpn id list to form different combination of dpn ids such that tunnel formation between all dpns is verified.
+ FOR ${dpn_id} IN @{dpn_ids}
+ @{dpn_ids_updated} = BuiltIn.Create List @{dpn_ids}
+ Collections.Remove Values From List ${dpn_ids_updated} ${dpn_id}
+ BuiltIn.Log Many ${dpn_ids_updated}
+ Genius.Get Tunnel Between DPNs ${tunnel_type} ${config_api_type} ${dpn_id} @{dpn_ids_updated}
+ END