2 Documentation Functional test suite for bgp - n-path and all-path selection
4 ... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
6 ... This program and the accompanying materials are made available under the
7 ... terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ... and is available at http://www.eclipse.org/legal/epl-v10.html
10 ... This suite tests n-path and all-path selection policy.
11 ... It uses odl and exabgp as bgp peers. Routes advertized from odl
12 ... are configured via application peer.
13 Suite Setup Start_Suite
14 Suite Teardown Stop_Suite
15 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
16 Library RequestsLibrary
18 Variables ${CURDIR}/../../../variables/Variables.py
19 Resource ${CURDIR}/../../../libraries/ExaBgpLib.robot
20 Resource ${CURDIR}/../../../libraries/Utils.robot
21 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
22 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
23 Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP}
24 Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot
25 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
29 ${DEVICE_NAME} controller-config
30 ${BGP_PEER_NAME} example-bgp-peer
31 ${RIB_INSTANCE} example-bgp-rib
32 ${APP_PEER_NAME} example-bgp-peer-app
33 ${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional
34 ${MULT_VAR_FOLDER} ${BGP_VAR_FOLDER}/multipaths
35 ${DEFAUTL_RPC_CFG} exa.cfg
36 ${CONFIG_SESSION} config-session
37 ${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
39 &{DEFAULT_MAPPING} ODLIP=${ODL_SYSTEM_IP} EXAIP=${TOOLS_SYSTEM_IP} NPATHS=${N_PATHS_VALUE}
42 ${NEXT_HOP_PREF} 100.100.100.
43 ${RIB_URI} /restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:rib-impl/example-bgp-rib
44 ${NPATHS_SELM} n-paths
45 ${ALLPATHS_SELM} all-paths
46 ${ADDPATHCAP_SR} send\\/receive
48 ${ADDPATHCAP_R} receive
49 ${ADDPATHCAP_D} disable
52 Reconfigure_ODL_To_Accept_Connection
53 [Documentation] Configure BGP peer module with initiate-connection set to false.
54 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
55 ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE}
56 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
58 Odl Allpaths Exa SendReceived
59 [Documentation] all-paths selected policy selected
61 [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${ALLPATHS_SELM} ${ADDPATHCAP_SR}
62 Log_Loc_Rib_Operational
63 BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${PATH_ID_LIST_LEN}
64 [Teardown] Remove_App_Peer_Configuration_And_Stop_ExaBgp
66 Odl Npaths Exa SendReceived
67 [Documentation] n-paths policy selected on odl
69 [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${NPATHS_SELM} ${ADDPATHCAP_SR}
70 Log_Loc_Rib_Operational
71 BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${N_PATHS_VALUE}
72 [Teardown] Remove_App_Peer_Configuration_And_Stop_ExaBgp
74 Delete_Bgp_Peer_Configuration
75 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
76 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME}
77 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
81 [Documentation] Suite setup keyword.
82 SetupUtils.Setup_Utils_For_Setup_And_Teardown
83 ${tools_system_conn_id}= SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s
84 Builtin.Set_Suite_Variable ${tools_system_conn_id}
85 Utils.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER}
86 SSHKeywords.Virtual_Env_Create
87 SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16
88 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
90 Configure_Odl_With_Multipaths
93 [Documentation] Suite teardown keyword with ord rib restoration
94 SSHKeywords.Virtual_Env_Delete
95 TemplatedRequests.Put_As_Xml_To_Uri ${RIB_URI} ${rib_old} session=${CONFIG_SESSION}
96 SSHLibrary.Close_All_Connections
97 RequestsLibrary.Delete_All_Sessions
100 [Arguments] ${addpath}=disable
101 [Documentation] Uploads exabgp config files
102 SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG} .
103 SSHLibrary.Put_File ${EXARPCSCRIPT} .
104 @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg
105 : FOR ${cfgfile} IN @{cfgfiles}
106 \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
107 \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
108 \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
109 \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile}
110 \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile}
113 Configure_Path_Selection_And_App_Peer_And_Connect_Peer
114 [Arguments] ${odl_path_sel_mode} ${exa_add_path_value}
115 [Documentation] Setup test case keyword. Early after the path selection config the incomming connection
116 ... from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that
117 ... we try to start the tool 3 times in case early attempts fail.
118 Configure_Path_Selection_Mode ${odl_path_sel_mode}
119 Configure_App_Peer_With_Routes
120 Upload_Config_Files addpath=${exa_add_path_value}
121 ExaBgpLib.Start_ExaBgp_And_Verify_Connected ${DEFAUTL_RPC_CFG} ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP} connection_retries=${3}
123 Remove_App_Peer_Configuration_And_Stop_ExaBgp
125 ExaBgpLib.Stop_ExaBgp
126 SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
128 Verify_Expected_Update_Count
129 [Arguments] ${exp_count}
130 [Documentation] Verify number of received update messages
131 ${tool_count}= BgpRpcClient.exa_get_received_update_count
132 BuiltIn.Should_Be_Equal_As_Numbers ${exp_count} ${tool_count}
134 Configure_Path_Selection_Mode
136 [Documentation] Configure path selection mode and get rib information for potential debug purposes
137 &{mapping} BuiltIn.Create_Dictionary PATHSELMODE=${psm}
138 TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
139 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_psm mapping=${mapping} session=${CONFIG_SESSION}
141 Configure_Odl_With_Multipaths
142 [Documentation] Configures odl to support n-paths or all-paths selection
143 ${mapping}= BuiltIn.Set Variable ${DEFAULT_MAPPING}
144 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_n_paths mapping=${mapping} session=${CONFIG_SESSION}
145 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_all_paths mapping=${mapping} session=${CONFIG_SESSION}
146 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_psmf mapping=${mapping} session=${CONFIG_SESSION}
147 Configure_Path_Selection_Mode n-paths
148 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_bpsm mapping=${mapping} session=${CONFIG_SESSION}
149 ${rib_old}= TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
150 BuiltIn.Set_Suite_Variable ${rib_old}
151 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
153 Log_Loc_Rib_Operational
154 ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/
155 BuiltIn.Log ${rsp.content}
157 Configure_App_Peer_With_Routes
158 [Documentation] Configure bgp application peer and fill it immediately with routes.
159 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} APP_PEER_ID=${ODL_SYSTEM_IP}
160 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
161 : FOR ${pathid} IN @{PATH_ID_LIST}
162 \ &{route_mapping} BuiltIn.Create_Dictionary NEXTHOP=${NEXT_HOP_PREF}${pathid} LOCALPREF=${pathid}00 PATHID=${pathid}
163 \ TemplatedRequests.Post_As_Xml_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION}
166 [Documentation] Revert the BGP configuration to the original state: without application peer
167 &{route_mapping} BuiltIn.Create_Dictionary
168 TemplatedRequests.Delete_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION}
169 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME}
170 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}