2 Documentation Basic tests for BGP application peer.
4 ... Copyright (c) 2015 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 ... Test suite performs basic BGP functional test cases for
11 ... BGP application peer operations and checks for IP4 topology updates
12 ... and updates towards BGP peer as follows:
14 ... Test case 1: Initial BGP peer connection with pre-filled topology,
15 ... POST and simple DELETE requests used.
16 ... BGP_Application_Peer_Post_3_Initial_Routes,
17 ... Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
19 ... BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes,
20 ... BGP_Application_Peer_Delete_3_Initial_Routes,
21 ... Check_Example-IPv4-Topology_Is_Empty,
22 ... Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
25 ... Test case 2: PUT and DELETE all routes requests while BGP peer is connected.
26 ... Reconnect_BGP_Peer,
27 ... BGP_Application_Peer_Put_3_Routes,
28 ... Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
29 ... BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes,
30 ... BGP_Application_Peer_Delete_All_Routes,
31 ... Check_Example-IPv4-Topology_Is_Empty,
32 ... BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
35 ... Test case 3: Repeated BGP peer re-connection with pre-filled topology.
36 ... BGP_Application_Peer_Put_3_Routes,
37 ... Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
38 ... Reconnect_BGP_Peer_And_Check_Incomming_Updates_For_3_Introduced_Prefixes,
39 ... BGP_Application_Peer_Delete_All_Routes,
40 ... Check_Example-IPv4-Topology_Is_Empty,
41 ... BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
44 ... Brief description how to configure BGP application peer and
45 ... how to use restconf application peer interface:
46 ... https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Application_Peer
47 ... https://wiki.opendaylight.org/view/BGP_LS_PCEP:Programmer_Guide#BGP
48 Suite Setup Setup_Everything
49 Suite Teardown Teardown_Everything
50 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
51 Test Teardown FailFast.Start_Failing_Fast_If_This_Failed
52 Library OperatingSystem
53 Library SSHLibrary timeout=10s
54 Library RequestsLibrary
55 Resource ../../../libraries/BGPcliKeywords.robot
56 Resource ../../../libraries/FailFast.robot
57 Resource ../../../libraries/KillPythonTool.robot
58 Resource ../../../libraries/TemplatedRequests.robot
59 Resource ../../../libraries/SetupUtils.robot
60 Resource ../../../libraries/SSHKeywords.robot
61 Resource ../../../libraries/WaitForFailure.robot
62 Resource ../../../variables/Variables.robot
65 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpuser/
66 ${TOOLS_SYSTEM_PROMPT} ${DEFAULT_LINUX_PROMPT}
68 ${BGP_PEER_LOG_LEVEL} debug
69 ${BGP_APP_PEER_LOG_LEVEL} debug
70 ${BGP_PEER_COMMAND} python3 play.py --amount 0 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL}
71 ${BGP_PEER_OPTIONS} ${EMPTY}
72 ${BGP_APP_PEER_ID} ${ODL_SYSTEM_IP}
73 ${BGP_APP_PEER_POST_COMMAND} python3 bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command post --count 3 --prefix 8.0.1.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
74 ${BGP_APP_PEER_PUT_COMMAND} python3 bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command put --count 3 --prefix 8.0.1.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
75 ${BGP_APP_PEER_DELETE_COMMAND} python3 bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command delete --count 3 --prefix 8.0.1.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
76 ${BGP_APP_PEER_DELETE_ALL_COMMAND} python3 bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command delete-all --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
77 ${BGP_APP_PEER_GET_COMMAND} python3 bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command get --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
78 ${BGP_APP_PEER_OPTIONS} &>/dev/null
79 ${BGP_APP_PEER_TIMEOUT} 30s
80 ${BGP_PEER_APP_NAME} example-bgp-peer-app
81 ${CONFIG_SESSION} session
82 ${RIB_INSTANCE} example-bgp-rib
83 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
84 ${DEVICE_NAME} controller-config
85 ${BGP_PEER_NAME} example-bgp-peer
86 ${RIB_INSTANCE} example-bgp-rib
87 ${SCRIPT_URI_OPT} --uri data/bgp-rib:application-rib=${ODL_SYSTEM_IP}/tables=bgp-types%3Aipv4-address-family,bgp-types%3Aunicast-subsequent-address-family
90 Reconfigure_ODL_To_Accept_BGP_Peer_Connection
91 [Documentation] Configure BGP peer module with initiate-connection set to false.
93 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
94 ... INITIATE=false BGP_RIB=${RIB_INSTANCE} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} RIB_INSTANCE_NAME=${RIB_INSTANCE}
95 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
97 Reconfigure_ODL_To_Accept_BGP_Application_Peer
98 [Documentation] Configure BGP application peer module.
100 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} NAME=${BGP_PEER_APP_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} IP=${BGP_APP_PEER_ID} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
101 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer mapping=${mapping} session=${CONFIG_SESSION}
103 Check_For_Empty_Example-IPv4-Topology
104 [Documentation] Sanity check example-ipv4-topology is up but empty.
106 Wait_For_Topology_To_Change_To empty_topology timeout=180s
108 TC1_BGP_Application_Peer_Post_3_Initial_Routes
109 [Documentation] Start BGP application peer tool and give it ${BGP_APP_PEER_TIMEOUT}
111 Switch_To_BGP_Application_Peer_Console
112 Start_Console_Tool ${BGP_APP_PEER_POST_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
113 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
114 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_initial_post_tc1.log
116 TC1_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
117 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
119 Wait_For_Topology_To_Change_To filled_topology
122 [Documentation] Start BGP peer tool
124 Switch_To_BGP_Peer_Console
125 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
126 Read_And_Fail_If_Prompt_Is_Seen
128 TC1_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes
129 [Documentation] Check incomming updates for new routes
131 Switch_To_BGP_Peer_Console
132 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
133 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
134 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
135 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
136 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
138 TC1_BGP_Application_Peer_Delete_3_Initial_Routes
139 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
141 Switch_To_BGP_Application_Peer_Console
142 Start_Console_Tool ${BGP_APP_PEER_DELETE_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
143 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
144 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_tc1.log
146 TC1_Check_Example-IPv4-Topology_Is_Empty
147 [Documentation] See new routes are deleted.
149 Wait_For_Topology_To_Change_To empty_topology
151 TC1_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
152 [Documentation] Check incomming updates for new routes
154 Switch_To_BGP_Peer_Console
155 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
156 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
157 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
158 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
159 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
162 [Documentation] Stop BGP peer tool
164 Switch_To_BGP_Peer_Console
166 Store_File_To_Workspace bgp_peer.log bgp_peer_tc1.log
168 TC2_Reconnect_BGP_Peer
169 [Documentation] Start BGP peer tool
171 Switch_To_BGP_Peer_Console
172 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
173 Read_And_Fail_If_Prompt_Is_Seen
174 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 0
175 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
177 TC2_BGP_Application_Peer_Put_3_Routes
178 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
180 Switch_To_BGP_Application_Peer_Console
181 Start_Console_Tool ${BGP_APP_PEER_PUT_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
182 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
183 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_put_tc2.log
185 TC2_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
186 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
188 Wait_For_Topology_To_Change_To filled_topology
190 TC2_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes
191 [Documentation] Check incomming updates for new routes
193 Switch_To_BGP_Peer_Console
194 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
195 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
196 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
197 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
198 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
200 TC2_BGP_Application_Peer_Delete_All_Routes
201 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
203 Switch_To_BGP_Application_Peer_Console
204 Start_Console_Tool ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
205 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
206 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_all_tc2.log
208 TC2_Check_Example-IPv4-Topology_Is_Empty
209 [Documentation] See new routes are deleted.
211 Wait_For_Topology_To_Change_To empty_topology
213 TC2_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
214 [Documentation] Check incomming updates for new routes
216 Switch_To_BGP_Peer_Console
217 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
218 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
219 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
220 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
221 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
224 [Documentation] Stop BGP peer tool
226 Switch_To_BGP_Peer_Console
228 Store_File_To_Workspace bgp_peer.log bgp_peer_tc2.log
230 TC3_BGP_Application_Peer_Put_3_Routes
231 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
233 Switch_To_BGP_Application_Peer_Console
234 Start_Console_Tool ${BGP_APP_PEER_PUT_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
235 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
236 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_put_tc3.log
238 TC3_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
239 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
241 Wait_For_Topology_To_Change_To filled_topology
243 TC3_Reconnect_BGP_Peer_And_Check_Incomming_Updates_For_3_Introduced_Prefixes
244 [Documentation] Start BGP peer tool
246 Switch_To_BGP_Peer_Console
247 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
248 Read_And_Fail_If_Prompt_Is_Seen
249 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
250 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
251 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
252 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
253 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
254 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
256 TC3_BGP_Application_Peer_Delete_All_Routes
257 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
259 Switch_To_BGP_Application_Peer_Console
260 Start_Console_Tool ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${SCRIPT_URI_OPT} ${BGP_APP_PEER_OPTIONS}
261 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
262 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_all_tc3.log
264 TC3_Check_Example-IPv4-Topology_Is_Empty
265 [Documentation] See new routes are deleted.
267 Wait_For_Topology_To_Change_To empty_topology
269 TC3_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
270 [Documentation] Check incomming updates for new routes
272 Switch_To_BGP_Peer_Console
273 BuiltIn.Wait_Until_Keyword_Succeeds 10s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
274 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
275 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
276 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
277 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
280 [Documentation] Stop BGP peer tool
282 Switch_To_BGP_Peer_Console
284 Store_File_To_Workspace bgp_peer.log bgp_peer_tc3.log
286 Delete_Bgp_Peer_Configuration
287 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
289 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
290 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
292 Delete_Bgp_Application_Peer_Configuration
293 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
295 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} NAME=${BGP_PEER_APP_NAME} IP=${ODL_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
296 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer mapping=${mapping} session=${CONFIG_SESSION}
300 [Documentation] Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
301 ... put Python tool to mininet machine, setup imported resources.
302 SetupUtils.Setup_Utils_For_Setup_And_Teardown
303 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
304 Open_BGP_Peer_Console
305 SSHKeywords.Require_Python
306 SSHKeywords.Assure_Library_Ipaddr target_dir=.
307 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
308 Open_BGP_Aplication_Peer_Console
309 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/bgp_app_peer.py
310 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/ipv4-routes-template.xml*
311 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
314 [Documentation] Make sure Python tool was killed.
315 ... Tear down imported Resources.
316 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
317 KillPythonTool.Search_And_Kill_Remote_Python 'bgp_app_peer\.py'
318 RequestsLibrary.Delete_All_Sessions
319 SSHLibrary.Close_All_Connections
321 Open_BGP_Peer_Console
322 [Documentation] Create a session for BGP peer.
323 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_peer_console
324 SSHKeywords.Flexible_Mininet_Login
326 Open_BGP_Aplication_Peer_Console
327 [Documentation] Create a session for BGP peer.
328 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_app_peer_console
329 SSHKeywords.Flexible_Mininet_Login
331 Switch_To_BGP_Peer_Console
332 SSHLibrary.Switch Connection bgp_peer_console
334 Switch_To_BGP_Application_Peer_Console
335 SSHLibrary.Switch Connection bgp_app_peer_console
337 Wait_For_Topology_To_Change_To
338 [Arguments] ${folder_name} ${timeout}=10s ${refresh}=1s
339 [Documentation] Wait until Compare_Topology matches expected result.
340 BuiltIn.Wait_Until_Keyword_Succeeds ${timeout} ${refresh} Compare_Topology ${folder_name}
342 Verify_That_Topology_Does_Not_Change_From
343 [Arguments] ${folder_name} ${timeout}=10s ${refresh}=1s
344 [Documentation] Verify that Compare_Topology keeps passing, it will hold its last result.
345 WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout ${timeout} ${refresh} Compare_Topology ${folder_name}
348 [Arguments] ${folder_name}
349 [Documentation] Get current example-ipv4-topology as json, and compare it to expected result.
350 TemplatedRequests.Get_As_Json_Templated ${BGP_VARIABLES_FOLDER}${/}${folder_name} session=${CONFIG_SESSION} verify=True