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 (Bug 4714),
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
49 ... Bug 4714 - No routes from loc-rib are advertised to newly connected peer
50 Suite Setup Setup_Everything
51 Suite Teardown Teardown_Everything
52 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
53 Test Teardown FailFast.Start_Failing_Fast_If_This_Failed
54 Library OperatingSystem
55 Library SSHLibrary timeout=10s
56 Library RequestsLibrary
57 Library ${CURDIR}/../../../libraries/norm_json.py
58 Variables ${CURDIR}/../../../variables/Variables.py
59 Variables ${CURDIR}/../../../variables/bgpuser/variables.py ${TOOLS_SYSTEM_IP} ${ODL_STREAM}
60 Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot
61 Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot
62 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
63 Resource ${CURDIR}/../../../libraries/FailFast.robot
64 Resource ${CURDIR}/../../../libraries/KillPythonTool.robot
65 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
66 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
67 Resource ${CURDIR}/../../../libraries/WaitForFailure.robot
68 Resource ${CURDIR}/../../../libraries/CompareStream.robot
71 ${ACTUAL_RESPONSES_FOLDER} ${TEMPDIR}/actual
72 ${EXPECTED_RESPONSES_FOLDER} ${TEMPDIR}/expected
73 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpuser/
74 ${TOOLS_SYSTEM_PROMPT} ${DEFAULT_LINUX_PROMPT}
76 ${BGP_PEER_LOG_LEVEL} debug
77 ${BGP_APP_PEER_LOG_LEVEL} debug
79 ${ODL_BGP_LOG_LEVEL} DEFAULT
80 ${BGP_PEER_COMMAND} python play.py --amount 0 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL}
81 ${BGP_PEER_OPTIONS} ${EMPTY}
82 ${BGP_APP_PEER_ID} ${ODL_SYSTEM_IP}
83 ${BGP_APP_PEER_POST_COMMAND} python 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}
84 ${BGP_APP_PEER_PUT_COMMAND} python 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}
85 ${BGP_APP_PEER_DELETE_COMMAND} python 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}
86 ${BGP_APP_PEER_DELETE_ALL_COMMAND} python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command delete-all --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
87 ${BGP_APP_PEER_GET_COMMAND} python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command get --${BGP_APP_PEER_LOG_LEVEL} --stream=${ODL_STREAM}
88 ${BGP_APP_PEER_OPTIONS} &>/dev/null
89 ${BGP_APP_PEER_TIMEOUT} 30s
90 ${BGP_PEER_APP_NAME} example-bgp-peer-app
91 ${CONFIG_SESSION} session
92 ${RIB_INSTANCE} example-bgp-rib
93 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
94 ${DEVICE_NAME} controller-config
95 ${BGP_PEER_NAME} example-bgp-peer
96 ${RIB_INSTANCE} example-bgp-rib
99 Reconfigure_ODL_To_Accept_BGP_Peer_Connection
100 [Documentation] Configure BGP peer module with initiate-connection set to false.
102 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
103 ... INITIATE=false BGP_RIB=${RIB_INSTANCE} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} RIB_INSTANCE_NAME=${RIB_INSTANCE}
104 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
106 Reconfigure_ODL_To_Accept_BGP_Application_Peer
107 [Documentation] Configure BGP application peer module.
109 &{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}
110 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer mapping=${mapping} session=${CONFIG_SESSION}
112 Check_For_Empty_Example-IPv4-Topology
113 [Documentation] Sanity check example-ipv4-topology is up but empty.
115 Wait_For_Topology_To_Change_To ${empty_json} 000_Empty.json timeout=120s
117 TC1_BGP_Application_Peer_Post_3_Initial_Routes
118 [Documentation] Start BGP application peer tool and give it ${BGP_APP_PEER_TIMEOUT}
120 Switch_To_BGP_Application_Peer_Console
121 Start_Console_Tool ${BGP_APP_PEER_POST_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
122 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
123 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_initial_post_tc1.log
125 TC1_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
126 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
128 Wait_For_Topology_To_Change_To ${filled_json} 010_Filled.json
131 [Documentation] Start BGP peer tool
133 Switch_To_BGP_Peer_Console
134 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
135 Read_And_Fail_If_Prompt_Is_Seen
137 TC1_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes
138 [Documentation] Check incomming updates for new routes
140 Switch_To_BGP_Peer_Console
141 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
142 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
143 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
144 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
145 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
146 [Teardown] Report_Failure_Due_To_Bug 4714
148 TC1_BGP_Application_Peer_Delete_3_Initial_Routes
149 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
151 Switch_To_BGP_Application_Peer_Console
152 Start_Console_Tool ${BGP_APP_PEER_DELETE_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
153 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
154 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_tc1.log
156 TC1_Check_Example-IPv4-Topology_Is_Empty
157 [Documentation] See new routes are deleted.
159 Wait_For_Topology_To_Change_To ${empty_json} 011_Empty.json
161 TC1_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
162 [Documentation] Check incomming updates for new routes
164 Switch_To_BGP_Peer_Console
165 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
166 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
167 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
168 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
169 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
170 [Teardown] Report_Failure_Due_To_Bug 4714
173 [Documentation] Stop BGP peer tool
175 Switch_To_BGP_Peer_Console
177 Store_File_To_Workspace bgp_peer.log bgp_peer_tc1.log
179 TC2_Reconnect_BGP_Peer
180 [Documentation] Start BGP peer tool
182 Switch_To_BGP_Peer_Console
183 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
184 Read_And_Fail_If_Prompt_Is_Seen
185 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 0
186 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
188 TC2_BGP_Application_Peer_Put_3_Routes
189 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
191 Switch_To_BGP_Application_Peer_Console
192 Start_Console_Tool ${BGP_APP_PEER_PUT_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
193 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
194 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_put_tc2.log
196 TC2_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
197 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
199 Wait_For_Topology_To_Change_To ${filled_json} 020_Filled.json
201 TC2_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes
202 [Documentation] Check incomming updates for new routes
204 Switch_To_BGP_Peer_Console
205 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
206 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
207 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
208 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
209 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
211 TC2_BGP_Application_Peer_Delete_All_Routes
212 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
214 Switch_To_BGP_Application_Peer_Console
215 Start_Console_Tool ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
216 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
217 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_all_tc2.log
219 TC2_Check_Example-IPv4-Topology_Is_Empty
220 [Documentation] See new routes are deleted.
222 Wait_For_Topology_To_Change_To ${empty_json} 021_Empty.json
224 TC2_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
225 [Documentation] Check incomming updates for new routes
227 Switch_To_BGP_Peer_Console
228 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
229 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
230 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
231 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
232 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
235 [Documentation] Stop BGP peer tool
237 Switch_To_BGP_Peer_Console
239 Store_File_To_Workspace bgp_peer.log bgp_peer_tc2.log
241 TC3_BGP_Application_Peer_Put_3_Routes
242 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
244 Switch_To_BGP_Application_Peer_Console
245 Start_Console_Tool ${BGP_APP_PEER_PUT_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
246 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
247 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_put_tc3.log
249 TC3_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes
250 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
252 Wait_For_Topology_To_Change_To ${filled_json} 030_Filled.json
254 TC3_Reconnect_BGP_Peer_And_Check_Incomming_Updates_For_3_Introduced_Prefixes
255 [Documentation] Start BGP peer tool
257 Switch_To_BGP_Peer_Console
258 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
259 Read_And_Fail_If_Prompt_Is_Seen
260 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
261 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
262 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.0/28 1
263 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.16/28 1
264 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 8.0.1.32/28 1
265 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 0
267 TC3_BGP_Application_Peer_Delete_All_Routes
268 [Documentation] Start BGP application peer tool and give him ${BGP_APP_PEER_TIMEOUT}
270 Switch_To_BGP_Application_Peer_Console
271 Start_Console_Tool ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${scritp_uri_opt} ${BGP_APP_PEER_OPTIONS}
272 Wait_Until_Console_Tool_Finish ${BGP_APP_PEER_TIMEOUT}
273 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_all_tc3.log
275 TC3_Check_Example-IPv4-Topology_Is_Empty
276 [Documentation] See new routes are deleted.
278 Wait_For_Topology_To_Change_To ${empty_json} 031_Empty.json
280 TC3_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes
281 [Documentation] Check incomming updates for new routes
283 Switch_To_BGP_Peer_Console
284 BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 3
285 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.0/28 1
286 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.16/28 1
287 Check_File_For_Word_Count bgp_peer.log withdrawn_prefix_received: 8.0.1.32/28 1
288 Check_File_For_Word_Count bgp_peer.log nlri_prefix_received: 3
291 [Documentation] Stop BGP peer tool
293 Switch_To_BGP_Peer_Console
295 Store_File_To_Workspace bgp_peer.log bgp_peer_tc3.log
297 Delete_Bgp_Peer_Configuration
298 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
300 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
301 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
303 Delete_Bgp_Application_Peer_Configuration
304 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
306 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} NAME=${BGP_PEER_APP_NAME} IP=${ODL_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
307 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer mapping=${mapping} session=${CONFIG_SESSION}
311 [Documentation] Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
312 ... prepare directories for responses, put Python tool to mininet machine, setup imported resources.
313 SetupUtils.Setup_Utils_For_Setup_And_Teardown
314 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
315 Open_BGP_Peer_Console
316 SSHKeywords.Require_Python
317 SSHKeywords.Assure_Library_Ipaddr target_dir=.
318 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
319 Open_BGP_Aplicationp_Peer_Console
320 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/bgp_app_peer.py
321 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/ipv4-routes-template.xml*
322 OperatingSystem.Remove_Directory ${EXPECTED_RESPONSES_FOLDER} recursive=True
323 OperatingSystem.Remove_Directory ${ACTUAL_RESPONSES_FOLDER} recursive=True
324 # The previous suite may have been using the same directories.
325 OperatingSystem.Create_Directory ${EXPECTED_RESPONSES_FOLDER}
326 OperatingSystem.Create_Directory ${ACTUAL_RESPONSES_FOLDER}
327 RequestsLibrary.Create_Session operational http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${OPERATIONAL_TOPO_API} auth=${AUTH}
328 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
329 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_LOG_LEVEL}
330 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
331 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol
332 ${scritp_uri_opt}= Set Variable --uri config/bgp-rib:application-rib/${ODL_SYSTEM_IP}/tables/bgp-types:ipv4-address-family/bgp-types:unicast-subsequent-address-family/bgp-inet:ipv4-routes
333 BuiltIn.Set_Suite_Variable ${scritp_uri_opt}
336 [Documentation] Create and Log the diff between expected and actual responses, make sure Python tool was killed.
337 ... Tear down imported Resources.
338 ${diff}= OperatingSystem.Run diff -dur ${EXPECTED_RESPONSES_FOLDER} ${ACTUAL_RESPONSES_FOLDER}
340 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
341 KillPythonTool.Search_And_Kill_Remote_Python 'bgp_app_peer\.py'
342 RequestsLibrary.Delete_All_Sessions
343 SSHLibrary.Close_All_Connections
345 Open_BGP_Peer_Console
346 [Documentation] Create a session for BGP peer.
347 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_peer_console
348 SSHKeywords.Flexible_Mininet_Login
350 Open_BGP_Aplicationp_Peer_Console
351 [Documentation] Create a session for BGP peer.
352 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_app_peer_console
353 SSHKeywords.Flexible_Mininet_Login
355 Switch_To_BGP_Peer_Console
356 SSHLibrary.Switch Connection bgp_peer_console
358 Switch_To_BGP_Application_Peer_Console
359 SSHLibrary.Switch Connection bgp_app_peer_console
361 Wait_For_Topology_To_Change_To
362 [Arguments] ${json_topology} ${filename} ${timeout}=10s ${refresh}=1s
363 [Documentation] Normalize the expected json topology and save it to ${EXPECTED_RESPONSES_FOLDER}.
364 ... Wait until Compare_Topology matches. ${ACTUAL_RESPONSES_FOLDER} will hold its last result.
365 ${topology_normalized}= Normalize_And_Save_Expected_Json ${json_topology} ${filename} ${EXPECTED_RESPONSES_FOLDER}
366 BuiltIn.Wait_Until_Keyword_Succeeds ${timeout} ${refresh} Compare_Topology ${topology_normalized} ${filename}
368 Verify_That_Topology_Does_Not_Change_From
369 [Arguments] ${json_topology} ${filename} ${timeout}=10s ${refresh}=1s
370 [Documentation] Normalize the expected json topology and save it to ${EXPECTED_RESPONSES_FOLDER}.
371 ... Verify that Compare_Topology keeps passing. ${ACTUAL_RESPONSES_FOLDER} will hold its last result.
372 ${topology_normalized}= Normalize_And_Save_Expected_Json ${json_topology} ${filename} ${EXPECTED_RESPONSES_FOLDER}
373 WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout ${timeout} ${refresh} Compare_Topology ${topology_normalized} ${filename}
376 [Arguments] ${expected_normalized} ${filename}
377 [Documentation] Get current example-ipv4-topology as json, normalize it, save to ${ACTUAL_RESPONSES_FOLDER}.
378 ... Check that status code is 200, check that normalized jsons match exactly.
379 ${response}= RequestsLibrary.Get Request operational topology/example-ipv4-topology
380 BuiltIn.Log ${response.status_code}
381 BuiltIn.Log ${response.text}
382 ${actual_normalized}= Normalize_And_Save_Expected_Json ${response.text} ${filename} ${ACTUAL_RESPONSES_FOLDER}
383 BuiltIn.Should_Be_Equal_As_Strings ${response.status_code} 200
384 BuiltIn.Should_Be_Equal ${expected_normalized} ${actual_normalized}
386 Normalize_And_Save_Expected_Json
387 [Arguments] ${json_text} ${filename} ${directory}
388 [Documentation] Normalize given json using norm_json library. Log and save the result to given filename under given directory.
389 ${json_normalized}= norm_json.normalize_json_text ${json_text}
390 BuiltIn.Log ${json_normalized}
391 OperatingSystem.Create_File ${directory}${/}${filename} ${json_normalized}
392 # TODO: Should we prepend .json to the filename? When we detect it is not already prepended?
393 [Return] ${json_normalized}