*** Settings *** Documentation BGP functional HA testing with one exabgp peer. ... ... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. ... ... This program and the accompanying materials are made available under the ... terms of the Eclipse Public License v1.0 which accompanies this distribution, ... and is available at http://www.eclipse.org/legal/epl-v10.html ... ... This suite uses exabgp. It is configured to have 3 peers (all 3 nodes of odl). ... Bgp implemented with singleton accepts only one incomming conection. Exabgp ... logs will show that one peer will be connected and two will fail. ... After killing karaf which owned connection new owner should be elected and ... this new owner should accept incomming bgp connection. Suite Setup Setup_Everything Suite Teardown Teardown_Everything Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing Test Teardown SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed Library SSHLibrary timeout=10s Library RequestsLibrary Variables ${CURDIR}/../../../variables/Variables.py Resource ${CURDIR}/../../../libraries/SetupUtils.robot Resource ${CURDIR}/../../../libraries/ClusterManagement.robot Resource ${CURDIR}/../../../libraries/SSHKeywords.robot Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot *** Variables *** ${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpclustering ${BGP_PEER_FOLDER} ${CURDIR}/../../../variables/bgpclustering/bgp_peer_openconf ${DEFAUTL_EXA_CFG} exa.cfg ${EXA_CMD} env exabgp.tcp.port=1790 exabgp ${PEER_CHECK_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F ${HOLDTIME} 180 ${RIB_INSTANCE} example-bgp-rib *** Test Cases *** Get Example Bgp Rib Owner [Documentation] Find an odl node which is able to accept incomming connection. To this node netconf connector should be configured. ${rib_owner} ${rib_candidates}= ClusterManagement.Get_Owner_And_Successors_For_device example-bgp-rib org.opendaylight.mdsal.ServiceEntityType 1 BuiltIn.Set Suite variable ${rib_owner} ${rib_owner} BuiltIn.Set Suite variable ${rib_owner_node_id} ${ODL_SYSTEM_${rib_owner}_IP} BuiltIn.Set Suite variable ${rib_candidates} ${rib_candidates} ${session}= Resolve_Http_Session_For_Member member_index=${rib_owner} BuiltIn.Set_Suite_Variable ${living_session} ${session} BuiltIn.Set_Suite_Variable ${living_node} ${rib_owner} Reconfigure_ODL_To_Accept_Connection [Documentation] Configure BGP peer module with initiate-connection set to false. [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing &{mapping} Create Dictionary IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_INSTANCE} TemplatedRequests.Put_As_Xml_Templated ${BGP_PEER_FOLDER} mapping=${mapping} session=${living_session} [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed Start_ExaBgp_Peer [Documentation] Starts exabgp Start_Tool ${DEFAUTL_EXA_CFG} Verify ExaBgp Connected [Documentation] Verifies exabgp's presence in operational ds. BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Tools_Connection ${living_session} Stop_Current_Owner_Member [Documentation] Stopping karaf which is connected with exabgp. Kill_Single_Member ${rib_owner} BuiltIn.Set Suite variable ${old_rib_owner} ${rib_owner} BuiltIn.Set Suite variable ${old_rib_candidates} ${rib_candidates} ${idx}= Collections.Get From List ${old_rib_candidates} 0 ${session}= Resolve_Http_Session_For_Member member_index=${idx} BuiltIn.Set_Suite_Variable ${living_session} ${session} BuiltIn.Set_Suite_Variable ${living_node} ${idx} Verify_New_Rib_Owner [Documentation] Verifies if new owner of example-bgp-rib is elected. BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_New_Rib_Owner_Elected ${old_rib_owner} ${living_node} Verify_ExaBgp_Reconnected [Documentation] Verifies exabgp's presence in operational ds. BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Tools_Connection ${living_session} Start_Stopped_Member [Documentation] Starting stopped node Start_Single_Member ${old_rib_owner} Verify_New_Candidate [Documentation] Verifies started node become candidate for example-bgp-rib BuiltIn.Wait_Until_Keyword_Succeeds 10x 5s Verify_New_Rib_Candidate_Present ${old_rib_owner} ${living_node} Verify ExaBgp Still Connected [Documentation] Verifies exabgp's presence in operational ds Verify_Tools_Connection ${living_session} Stop_ExaBgp_Peer [Documentation] Stops exabgp Stop_Tool Delete_Bgp_Peer_Configuration [Documentation] Revert the BGP configuration to the original state: without any configured peers &{mapping} Create Dictionary BGP_RIB_OPENCONFIG=${RIB_INSTANCE} IP=${TOOLS_SYSTEM_IP} TemplatedRequests.Delete_Templated ${BGP_PEER_FOLDER} mapping=${mapping} session=${living_session} *** Keywords *** Setup_Everything [Documentation] Initial setup SetupUtils.Setup_Utils_For_Setup_And_Teardown ClusterManagement.ClusterManagement_Setup ${tools_system_conn_id}= SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s Builtin.Set_Suite_Variable ${tools_system_conn_id} Utils.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER} SSHKeywords.Virtual_Env_Create SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16 Upload_Config_Files Teardown_Everything [Documentation] Suite cleanup SSHKeywords.Virtual_Env_Delete RequestsLibrary.Delete_All_Sessions SSHLibrary.Close_All_Connections Start_Tool [Arguments] ${cfg_file} ${mapping}={} [Documentation] Starts the tool ${start_cmd} BuiltIn.Set_Variable ${EXA_CMD} ${cfg_file} BuiltIn.Log ${start_cmd} SSHKeywords.Virtual_Env_Activate_On_Current_Session log_output=${True} ${output}= SSHLibrary.Write ${start_cmd} BuiltIn.Log ${output} Stop_Tool [Documentation] Stops the tool by sending ctrl+c ${output}= SSHLibrary.Read BuiltIn.Log ${output} Utils.Write_Bare_Ctrl_C ${output}= SSHLibrary.Read_Until_Prompt BuiltIn.Log ${output} SSHKeywords.Virtual_Env_Deactivate_On_Current_Session log_output=${True} Upload_Config_Files [Documentation] Uploads exabgp config files. SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG} . @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg : FOR ${cfgfile} IN @{cfgfiles} \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile} \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP1/${ODL_SYSTEM_1_IP}/g' ${cfgfile} \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP2/${ODL_SYSTEM_2_IP}/g' ${cfgfile} \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP3/${ODL_SYSTEM_3_IP}/g' ${cfgfile} \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/disable/g' ${cfgfile} \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/disable/g' ${cfgfile} \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile} \ Log ${stdout} Verify_New_Rib_Owner_Elected [Arguments] ${old_owner} ${node_to_ask} [Documentation] Verifies new owner was elected ${owner} ${candidates}= ClusterManagement.Get_Owner_And_Successors_For_device example-bgp-rib org.opendaylight.mdsal.ServiceEntityType ${node_to_ask} BuiltIn.Should_Not_Be_Equal ${old_owner} ${owner} Verify_New_Rib_Candidate_Present [Arguments] ${candidate} ${node_to_ask} [Documentation] Verifies candidate's presence. ${owner} ${candidates}= ClusterManagement.Get_Owner_And_Successors_For_device example-bgp-rib org.opendaylight.mdsal.ServiceEntityType ${node_to_ask} BuiltIn.Should_Contain ${candidates} ${candidate} Verify_Tools_Connection [Arguments] ${session} ${connected}=${True} [Documentation] Checks peer presence in operational datastore ${exp_status_code}= BuiltIn.Set_Variable_If ${connected} ${200} ${404} ${rsp}= RequestsLibrary.Get Request ${session} ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP} BuiltIn.Log ${rsp.content} BuiltIn.Should_Be_Equal_As_Numbers ${exp_status_code} ${rsp.status_code}