*** Settings ***
-Documentation BGP functional HA testing with one exabgp peer.
+Documentation BGP functional HA testing with one exabgp peer.
...
-... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+... 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 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/RemoteBash.robot
-Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
-Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
+... 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.
+... TODO: Add similar keywords from all bgpclustering-ha tests into same libraries
+
+Library SSHLibrary timeout=10s
+Library RequestsLibrary
+Resource ../../../libraries/BGPcliKeywords.robot
+Resource ../../../libraries/ClusterManagement.robot
+Resource ../../../libraries/ExaBgpLib.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/SSHKeywords.robot
+Resource ../../../libraries/TemplatedRequests.robot
+Resource ../../../variables/Variables.robot
+
+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
+
*** 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
+${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpclustering
+${BGP_PEER_FOLDER} ${CURDIR}/../../../variables/bgpclustering/bgp_peer_openconf
+${DEFAULT_EXA_CFG} exa.cfg
+${EXA_CMD} env exabgp.tcp.port=1790 exabgp
+${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}
+Get_Example_Bgp_Rib_Owner
+ [Documentation] Find an odl node which is able to accept incomming connection.
+ ${rib_owner} ${rib_candidates}= BuiltIn.Wait_Until_Keyword_Succeeds
+ ... 5x
+ ... 5s
+ ... ClusterManagement.Get_Owner_And_Successors_For_Device
+ ... example-bgp-rib
+ ... Bgpcep
+ ... 1
+ BuiltIn.Set Suite variable ${rib_owner}
+ BuiltIn.Log ${ODL_SYSTEM_${rib_owner}_IP}
+ BuiltIn.Set Suite variable ${rib_candidates}
+ ${session}= ClusterManagement.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}
+ &{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}
+ ... http_timeout=5
[Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
Start_ExaBgp_Peer
[Documentation] Starts exabgp
- Start_Tool ${DEFAUTL_EXA_CFG}
+ SSHKeywords.Virtual_Env_Activate_On_Current_Session log_output=${True}
+ BGPcliKeywords.Start_Console_Tool ${EXA_CMD} ${DEFAULT_EXA_CFG} > exa_ha_restart.log 2>&1
Verify ExaBgp Connected
[Documentation] Verifies exabgp's presence in operational ds.
- BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Tools_Connection ${living_session}
+ BuiltIn.Wait_Until_Keyword_Succeeds 5x 5s ExaBgpLib.Verify_ExaBgps_Connection ${living_session}
-Stop_Current_Owner_Member
- [Documentation] Stopping karaf which is connected with exabgp.
- Kill_Single_Member ${rib_owner}
+Kill_Current_Owner_Member
+ [Documentation] Killing karaf which is connected with exabgp.
+ ClusterManagement.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}
+ ${session}= ClusterManagement.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}
+ BuiltIn.Wait_Until_Keyword_Succeeds
+ ... 5x
+ ... 5s
+ ... 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}
+ BuiltIn.Wait_Until_Keyword_Succeeds 5x 5s ExaBgpLib.Verify_ExaBgps_Connection ${living_session}
Start_Stopped_Member
[Documentation] Starting stopped node
- Start_Single_Member ${old_rib_owner}
+ ClusterManagement.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
+ 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}
+ BuiltIn.Wait_Until_Keyword_Succeeds 5x 5s ExaBgpLib.Verify_ExaBgps_Connection ${living_session}
Stop_ExaBgp_Peer
- [Documentation] Stops exabgp
- Stop_Tool
+ [Documentation] Stops exabgp tool by sending ctrl+c
+ BGPcliKeywords.Stop_Console_Tool_And_Wait_Until_Prompt
+ BGPcliKeywords.Store_File_To_Workspace exa_ha_restart.log exa_ha_restart.log
+ SSHKeywords.Virtual_Env_Deactivate_On_Current_Session log_output=${True}
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}
+ &{mapping}= Create Dictionary BGP_RIB_OPENCONFIG=${RIB_INSTANCE} IP=${TOOLS_SYSTEM_IP}
+ TemplatedRequests.Delete_Templated
+ ... ${BGP_PEER_FOLDER}
+ ... mapping=${mapping}
+ ... session=${living_session}
+ ... http_timeout=5
+
*** 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
+ ${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.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER}
SSHKeywords.Virtual_Env_Create
+ SSHKeywords.Virtual_Env_Install_Package setuptools==44.0.0
SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16
- Upload_Config_Files
+ ExaBgpLib.Upload_ExaBgp_Cluster_Config_Files ${BGP_VAR_FOLDER} ${DEFAULT_EXA_CFG}
Teardown_Everything
[Documentation] Suite cleanup
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}
- RemoteBash.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}
+ [Arguments] ${old_owner} ${node_to_ask}
+ ${owner} ${candidates}= ClusterManagement.Get_Owner_And_Successors_For_device
+ ... example-bgp-rib
+ ... Bgpcep
+ ... ${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}
+ [Arguments] ${candidate} ${node_to_ask}
+ ${owner} ${candidates}= ClusterManagement.Get_Owner_And_Successors_For_device
+ ... example-bgp-rib
+ ... Bgpcep
+ ... ${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}