2 Documentation Functional test for bgp - route refresh
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 sending and receiveing route request message.
11 ... It uses odl and exabgp as bgp peers.
12 ... Sending route refresh message from odl is initiated via restconf.
13 ... If route refresh received by odl also correct advertising of routes
14 ... is verified. Receiving of route refresh by odl is verified by
15 ... checking appropriate message counter via ${JOLOKURL}. Feature
16 ... odl-jolokia is required by this test suite.
17 Suite Setup Start_Suite
18 Suite Teardown Stop_Suite
19 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
20 Library RequestsLibrary
22 Variables ${CURDIR}/../../../variables/Variables.py
23 Resource ${CURDIR}/../../../libraries/ExaBgpLib.robot
24 Resource ${CURDIR}/../../../libraries/Utils.robot
25 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
26 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
27 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
28 Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP}
32 ${DEVICE_NAME} controller-config
33 ${BGP_PEER_NAME} example-bgp-peer
34 ${RIB_INSTANCE} example-bgp-rib
35 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
36 ${APP_PEER_NAME} example-bgp-peer-app
37 ${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional
38 ${BGP_RR_VAR_FOLDER} ${BGP_VAR_FOLDER}/route_refresh
39 ${BGP_CFG_NAME} exa.cfg
40 ${CONFIG_SESSION} config-session
41 ${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
42 ${JOLOKURL} /jolokia/read/org.opendaylight.controller:instanceName=${BGP_PEER_NAME},type=RuntimeBean,moduleFactoryName=bgp-peer
46 [Documentation] Configures bgp application peer. Openconfig is used for carbon and above.
47 &{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} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
48 ... IP=${ODL_SYSTEM_IP}
49 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
51 Reconfigure_ODL_To_Accept_Connection
52 [Documentation] Configures BGP peer module with initiate-connection set to false.
53 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
54 ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} PASSIVE_MODE=true
55 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
57 Exa_To_Send_Route_Request
58 [Documentation] Exabgp sends route refresh and count received updates
59 [Setup] Configure_Routes_And_Start_ExaBgp ${BGP_CFG_NAME}
60 # TODO: remove Run_Keyword_If_At_Most_Boron and leave Verify_Odl_Received_Route_Request only after bug 5032 is implemented.
61 # ... This will require also kw Verify_Odl_Received_Route_Request adaptation for ${ODL_STREAM} as the stats url will be different in carbon/openconfig
62 # ... comparing to boron(${JOLOKURL})
63 CompareStream.Run_Keyword_If_At_Most_Boron Verify_Odl_Received_Route_Request 0
64 BgpRpcClient.exa_clean_received_update_count
65 BgpRpcClient.exa_announce announce route-refresh ipv4 unicast
66 CompareStream.Run_Keyword_If_At_Most_Boron BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Odl_Received_Route_Request 1
67 BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_ExaBgp_Received_Updates ${nr_configured_routes}
68 [Teardown] Deconfigure_Routes_And_Stop_ExaBgp
70 Odl_To_Send_Route_Request
71 [Documentation] Sends route requests and checks if exabgp receives it
72 [Setup] ExaBgpLib.Start_ExaBgp_And_Verify_Connected ${BGP_CFG_NAME} ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP}
73 BgpRpcClient.exa_clean_received_route_refresh_count
74 &{mapping} BuiltIn.Create_Dictionary BGP_PEER_IP=${TOOLS_SYSTEM_IP}
75 TemplatedRequests.Post_As_Xml_Templated ${BGP_VAR_FOLDER}/route_refresh mapping=${mapping} session=${CONFIG_SESSION}
76 BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Odl_Sent_Route_Request 1
77 [Teardown] ExaBgpLib.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}
82 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
85 [Documentation] Revert the BGP configuration to the original state: without application peer
86 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} IP=${ODL_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
87 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
91 [Documentation] Suite setup keyword.
92 SetupUtils.Setup_Utils_For_Setup_And_Teardown
93 ${mininet_conn_id}= SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s
94 Builtin.Set_Suite_Variable ${mininet_conn_id}
95 Utils.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER}
96 SSHKeywords.Virtual_Env_Create
97 SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16
98 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
102 [Documentation] Suite teardown keyword
103 SSHKeywords.Virtual_Env_Delete
104 SSHLibrary.Close_All_Connections
105 RequestsLibrary.Delete_All_Sessions
108 [Documentation] Uploads exabgp config files
109 SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${BGP_CFG_NAME} .
110 SSHLibrary.Put_File ${EXARPCSCRIPT} .
111 @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg
112 : FOR ${cfgfile} IN @{cfgfiles}
113 \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
114 \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
115 \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
116 \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
117 \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile}
120 Configure_Routes_And_Start_ExaBgp
121 [Arguments] ${cfg_file}
122 [Documentation] Setup keyword for exa to odl test case
123 ${app_rib} CompareStream.Set_Variable_If_At_Most_Boron example-app-rib ${ODL_SYSTEM_IP}
124 : FOR ${prefix} IN 1.1.1.1/32 2.2.2.2/32
125 \ &{mapping} BuiltIn.Create_Dictionary PREFIX=${prefix} APP_RIB=${app_rib}
126 \ TemplatedRequests.Post_As_Xml_Templated ${BGP_RR_VAR_FOLDER}/route mapping=${mapping} session=${CONFIG_SESSION}
127 BuiltIn.Set_Suite_Variable ${nr_configured_routes} 2
128 ExaBgpLib.Start_ExaBgp_And_Verify_Connected ${cfg_file} ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP}
129 BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s Verify_ExaBgp_Received_Updates ${nr_configured_routes}
131 Deconfigure_Routes_And_Stop_ExaBgp
132 [Documentation] Teardown keyword for exa to odl test case
133 ExaBgpLib.Stop_ExaBgp
134 ${app_rib} CompareStream.Set_Variable_If_At_Most_Boron example-app-rib ${ODL_SYSTEM_IP}
135 &{mapping} BuiltIn.Create_Dictionary PREFIX=${prefix} APP_RIB=${app_rib}
136 TemplatedRequests.Delete_Templated ${BGP_RR_VAR_FOLDER}/route mapping=${mapping} session=${CONFIG_SESSION}
138 Verify_Odl_Sent_Route_Request
139 [Arguments] ${expcount}
140 [Documentation] Compares expected count of route request messages on exabgp side
141 ${count}= BgpRpcClient.exa_get_received_route_refresh_count
142 BuiltIn.Should Be Equal As Numbers ${count} ${expcount}
144 Verify_Odl_Received_Route_Request
145 [Arguments] ${expcount}
146 [Documentation] Gets numebr of received route requests and compares with given expected count
147 ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${JOLOKURL}
148 BuiltIn.Log ${rsp.content}
149 BuiltIn.Should_Be_Equal_As_Numbers ${rsp.status_code} 200
150 BuiltIn.Should_Be_Equal_As_Numbers ${rsp.json()['status']} 200
151 BuiltIn.Should_Be_Equal_As_Numbers ${rsp.json()['value']['BgpSessionState']['messagesStats']['routeRefreshMsgs']['received']['count']['value']} ${expcount}
153 Verify_ExaBgp_Received_Updates
154 [Arguments] ${expcount}
155 [Documentation] Gets numebr of received update requests and compares with given expected count
156 ${count_recv}= BgpRpcClient.exa_get_received_update_count
157 BuiltIn.Should Be Equal As Numbers ${count_recv} ${expcount}