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 Resource ${CURDIR}/../../../variables/Variables.robot
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
26 Resource ${CURDIR}/../../../libraries/CompareStream.robot
30 ${DEVICE_NAME} controller-config
31 ${BGP_PEER_NAME} example-bgp-peer
32 ${RIB_INSTANCE} example-bgp-rib
33 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
34 ${APP_PEER_NAME} example-bgp-peer-app
35 ${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional
36 ${MULT_VAR_FOLDER} ${BGP_VAR_FOLDER}/multipaths
37 ${DEFAUTL_RPC_CFG} exa.cfg
38 ${CONFIG_SESSION} config-session
39 ${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
41 &{DEFAULT_MAPPING} ODLIP=${ODL_SYSTEM_IP} EXAIP=${TOOLS_SYSTEM_IP} NPATHS=${N_PATHS_VALUE}
43 ${NEXT_HOP_PREF} 100.100.100.
44 ${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
45 ${OPENCONFIG_RIB_URI} /restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/example-bgp-rib
46 ${NPATHS_SELM} n-paths
47 ${ALLPATHS_SELM} all-paths
48 ${ADDPATHCAP_SR} send\\/receive
50 ${ADDPATHCAP_R} receive
51 ${ADDPATHCAP_D} disable
54 Reconfigure_ODL_To_Accept_Connection
55 [Documentation] Configures BGP peer module with initiate-connection set to false.
56 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
57 ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} PASSIVE_MODE=true
59 Odl Allpaths Exa SendReceived
60 [Documentation] all-paths selected policy selected
62 [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${ALLPATHS_SELM} ${ADDPATHCAP_SR}
63 Log_Loc_Rib_Operational
64 Comment From neon onwards there is extra BGP End-Of-RIB message
65 ${update_messages} CompareStream.Set_Variable_If_At_Most_Fluorine 3 4
66 BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${update_messages}
67 [Teardown] Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
69 Odl Npaths Exa SendReceived
70 [Documentation] n-paths policy selected on odl
72 [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${NPATHS_SELM} ${ADDPATHCAP_SR}
73 Log_Loc_Rib_Operational
74 Comment From neon onwards there is extra BGP End-Of-RIB message
75 ${update_messages} CompareStream.Set_Variable_If_At_Most_Fluorine 2 3
76 BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${update_messages}
77 [Teardown] Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
79 Delete_Bgp_Peer_Configuration
80 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
81 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
85 [Documentation] Suite setup keyword.
86 SetupUtils.Setup_Utils_For_Setup_And_Teardown
87 ${tools_system_conn_id}= SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s
88 Builtin.Set_Suite_Variable ${tools_system_conn_id}
89 SSHKeywords.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER}
90 SSHKeywords.Virtual_Env_Create
91 SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16
92 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
94 Store_Rib_Configuration
97 [Documentation] Suite teardown keyword with old rib restoration
98 SSHKeywords.Virtual_Env_Delete
99 TemplatedRequests.Put_As_Xml_To_Uri ${OPENCONFIG_RIB_URI} ${rib_old} session=${CONFIG_SESSION}
100 SSHLibrary.Close_All_Connections
101 RequestsLibrary.Delete_All_Sessions
104 [Arguments] ${addpath}=disable
105 [Documentation] Uploads exabgp config files
106 SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG} .
107 SSHLibrary.Put_File ${EXARPCSCRIPT} .
108 @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg
109 FOR ${cfgfile} IN @{cfgfiles}
110 SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
111 SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
112 SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
113 SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile}
114 ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile}
118 Configure_Path_Selection_And_App_Peer_And_Connect_Peer
119 [Arguments] ${odl_path_sel_mode} ${exa_add_path_value}
120 [Documentation] Setup test case keyword. Early after the path selection config the incomming connection
121 ... from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that
122 ... we try to start the tool 3 times in case early attempts fail.
123 SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
124 Configure_Odl_Peer_With_Path_Selection_Mode ${odl_path_sel_mode}
125 Configure_App_Peer_With_Routes
126 Upload_Config_Files addpath=${exa_add_path_value}
127 ExaBgpLib.Start_ExaBgp_And_Verify_Connected ${DEFAUTL_RPC_CFG} ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP} connection_retries=${3}
129 Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
130 &{mapping} BuiltIn.Create_Dictionary IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
131 TemplatedRequests.Delete_Templated ${MULT_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
133 ExaBgpLib.Stop_ExaBgp
134 SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
136 Verify_Expected_Update_Count
137 [Arguments] ${exp_count}
138 [Documentation] Verify number of received update messages
139 ${tool_count}= BgpRpcClient.exa_get_received_update_count
140 BuiltIn.Should_Be_Equal_As_Numbers ${exp_count} ${tool_count}
142 Configure_Path_Selection_Mode
144 [Documentation] Configure path selection mode and get rib information for potential debug purposes
145 &{mapping} BuiltIn.Create_Dictionary PATHSELMODE=${psm}
146 TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
147 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_psm mapping=${mapping} session=${CONFIG_SESSION}
149 Configure_Odl_Peer_With_Path_Selection_Mode
151 [Documentation] Configures odl peer with path selection mode
152 ${npaths}= BuiltIn.Set_Variable_If "${psm}"=="${ALLPATHS_SELM}" 0 ${N_PATHS_VALUE}
153 &{mapping} BuiltIn.Create_Dictionary IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} PASSIVE_MODE=true MULTIPATH=${npaths}
154 ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
155 CompareStream.Run_Keyword_If_Less_Than_Fluorine TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
156 CompareStream.Run_Keyword_If_At_Least_Fluorine TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/rib_policies mapping=${mapping} session=${CONFIG_SESSION}
157 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
159 Configure_Odl_With_Multipaths
160 [Documentation] Configures odl to support n-paths or all-paths selection
161 ${mapping}= BuiltIn.Set Variable ${DEFAULT_MAPPING}
162 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_n_paths mapping=${mapping} session=${CONFIG_SESSION}
163 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_all_paths mapping=${mapping} session=${CONFIG_SESSION}
164 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_psmf mapping=${mapping} session=${CONFIG_SESSION}
165 Configure_Path_Selection_Mode n-paths
166 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_bpsm mapping=${mapping} session=${CONFIG_SESSION}
167 Store_Rib_Configuration
168 TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION}
170 Store_Rib_Configuration
171 [Documentation] Stores rib configuration
172 ${rib_old}= TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${DEFAULT_MAPPING} session=${CONFIG_SESSION}
173 BuiltIn.Set_Suite_Variable ${rib_old}
175 Log_Loc_Rib_Operational
176 ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/
177 BuiltIn.Log ${rsp.content}
179 Configure_App_Peer_With_Routes
180 [Documentation] Configure bgp application peer and fill it immediately with routes.
181 ${app_rib} Set Variable ${ODL_SYSTEM_IP}
182 &{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} IP=${ODL_SYSTEM_IP}
183 ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
184 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
185 FOR ${pathid} IN @{PATH_ID_LIST}
186 &{route_mapping} BuiltIn.Create_Dictionary NEXTHOP=${NEXT_HOP_PREF}${pathid} LOCALPREF=${pathid}00 PATHID=${pathid} APP_RIB=${app_rib}
187 TemplatedRequests.Post_As_Xml_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION}
191 [Documentation] Revert the BGP configuration to the original state: without application peer
192 ${app_rib} Set Variable ${ODL_SYSTEM_IP}
193 &{route_mapping} BuiltIn.Create_Dictionary APP_RIB=${app_rib} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
194 TemplatedRequests.Delete_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION}
195 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} IP=${ODL_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
196 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}