2 Documentation BGP performance of ingesting from 1 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 performance test cases for
11 ... BGP application peer. BGP application peer introduces routes -
12 ... using restconf - in two steps:
13 ... 1. introduces the ${PREFILL} number of routes in one POST request
14 ... 2. POSTs the rest of routes (up to the ${COUNT} number) one by one
15 ... Test suite checks that the prefixes are propagated to
16 ... IPv4 topology and announced to BGP peer via updates. Test case
17 ... where the BGP peer is disconnected and reconnected and all routes
18 ... are deleted by BGP application peer are performed as well.
19 ... Brief description how to configure BGP application peer and
20 ... how to use restconf application peer interface:
21 ... https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Application_Peer
22 ... https://wiki.opendaylight.org/view/BGP_LS_PCEP:Programmer_Guide#BGP
25 ... Bug 4689 - Not a reasonable duration of 1M prefix introduction from BGP application peer via restconf
26 ... Bug 4791 - BGPSessionImpl: Failed to send message Update logged even all UPDATE mesages received by iBGP peer
27 Suite Setup Setup_Everything
28 Suite Teardown Teardown_Everything
29 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
30 Test Teardown SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
32 Library SSHLibrary timeout=10s
33 Library RequestsLibrary
34 Variables ${CURDIR}/../../../variables/Variables.py
35 Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot
36 Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot
37 Resource ${CURDIR}/../../../libraries/ConfigViaRestconf.robot
38 Resource ${CURDIR}/../../../libraries/FailFast.robot
39 Resource ${CURDIR}/../../../libraries/KillPythonTool.robot
40 Resource ${CURDIR}/../../../libraries/PrefixCounting.robot
41 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
44 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpuser/
46 ${HOLDTIME_APP_PEER_PREFIX_COUNT} ${HOLDTIME}
49 ${COUNT_APP_PEER_PREFIX_COUNT} ${COUNT}
51 ${CHECK_PERIOD_APP_PEER_PREFIX_COUNT} ${CHECK_PERIOD}
52 ${REPETITIONS_APP_PEER_PREFIX_COUNT} 1
53 ${BGP_PEER_LOG_LEVEL} info
54 ${BGP_APP_PEER_LOG_LEVEL} info
55 ${CONTROLLER_LOG_LEVEL} INFO
56 ${CONTROLLER_BGP_LOG_LEVEL} DEFAULT
57 ${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}
58 ${BGP_PEER_OPTIONS} &>bgp_peer.log
59 ${BGP_APP_PEER_ID} 10.0.0.10
60 ${BGP_APP_PEER_INITIAL_COMMAND} python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command post --count ${PREFILL} --prefix 8.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL}
61 ${BGP_APP_PEER_PUT_COMMAND} python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command put --count ${PREFILL} --prefix 8.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL}
62 ${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}
63 ${BGP_APP_PEER_GET_COMMAND} python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command get --${BGP_APP_PEER_LOG_LEVEL}
64 ${BGP_APP_PEER_OPTIONS} &>bgp_app_peer.log
65 ${TEST_DURATION_MULTIPLIER} 30
66 ${last_prefix_count} -1
69 Check_For_Empty_Ipv4_Topology_Before_Starting
70 [Documentation] Wait for example-ipv4-topology to come up and empty. Give large timeout for case when BGP boots slower than restconf.
71 BuiltIn.Wait_Until_Keyword_Succeeds 120s 1s PrefixCounting.Check_Ipv4_Topology_Is_Empty
73 Reconfigure_ODL_To_Accept_Connection
74 [Documentation] Configure BGP peer module with initiate-connection set to false.
75 ${template_as_string}= BuiltIn.Set_Variable {'NAME': 'example-bgp-peer', 'IP': '${TOOLS_SYSTEM_IP}', 'HOLDTIME': '${HOLDTIME_APP_PEER_PREFIX_COUNT}', 'PEER_PORT': '${BGP_TOOL_PORT}', 'INITIATE': 'false'}
76 ConfigViaRestconf.Put_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLES_FOLDER}${/}bgp_peer ${template_as_string}
78 Reconfigure_ODL_To_Accept_BGP_Application_Peer
79 [Documentation] Configure BGP application peer module.
80 ${template_as_string}= BuiltIn.Set_Variable {'NAME': 'example-bgp-peer-app', 'IP': '${BGP_APP_PEER_ID}'}
81 ConfigViaRestconf.Put_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer ${template_as_string}
84 [Documentation] Start BGP peer tool
85 SSHLibrary.Switch Connection bgp_peer_console
86 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
87 Read_And_Fail_If_Prompt_Is_Seen
89 BGP_Application_Peer_Prefill_Routes
90 [Documentation] Start BGP application peer tool and prefill routes.
91 SSHLibrary.Switch Connection bgp_app_peer_console
92 Start_Console_Tool ${BGP_APP_PEER_INITIAL_COMMAND} ${BGP_APP_PEER_OPTIONS}
93 Wait_Until_Console_Tool_Finish ${bgp_filling_timeout}
94 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_prefill.log
96 Wait_For_Ipv4_Topology_Is_Prefilled
97 [Documentation] Wait until example-ipv4-topology reaches the target prfix count.
98 BuiltIn.Wait Until Keyword Succeeds ${bgp_filling_timeout} 10s PrefixCounting.Check_Ipv4_Topology_Count ${PREFILL}
100 Check_Bgp_Peer_Updates_For_Prefilled_Routes
101 [Documentation] Count the routes introduced by updates.
102 [Setup] SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
103 BuiltIn.Wait Until Keyword Succeeds ${bgp_filling_timeout} 1s Check_File_For_Word_Count bgp_peer.log total_received_nlri_prefix_counter: ${PREFILL} 2
105 BGP_Application_Peer_Introduce_Single_Routes
106 [Documentation] Start BGP application peer tool and introduce routes.
107 SSHLibrary.Switch Connection bgp_app_peer_console
108 Start_Console_Tool python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command add --count ${remaining_prefixes} --prefix 12.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL} ${BGP_APP_PEER_OPTIONS}
109 Wait_Until_Console_Tool_Finish ${bgp_filling_timeout}
110 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_singles.log
112 Wait_For_Ipv4_Topology_Is_Filled
113 [Documentation] Wait until example-ipv4-topology reaches the target prfix count.
114 BuiltIn.Wait Until Keyword Succeeds ${bgp_filling_timeout} 10s PrefixCounting.Check_Ipv4_Topology_Count ${COUNT_APP_PEER_PREFIX_COUNT}
116 Check_Bgp_Peer_Updates_For_All_Routes
117 [Documentation] Count the routes introduced by updates.
118 [Setup] SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
119 BuiltIn.Wait Until Keyword Succeeds ${bgp_filling_timeout} 1s Check_File_For_Word_Count bgp_peer.log total_received_nlri_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT} 2
122 [Documentation] Stop BGP peer tool
123 SSHLibrary.Switch Connection bgp_peer_console
125 Store_File_To_Workspace bgp_peer.log bgp_peer_reconnect.log
128 [Documentation] Start BGP peer tool
129 SSHLibrary.Switch Connection bgp_peer_console
130 Start_Console_Tool ${BGP_PEER_COMMAND} ${BGP_PEER_OPTIONS}
131 Read_And_Fail_If_Prompt_Is_Seen
133 Check_Bgp_Peer_Updates_For_Reintroduced_Routes
134 [Documentation] Count the routes introduced by updates.
135 [Setup] SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
136 BuiltIn.Wait Until Keyword Succeeds ${bgp_filling_timeout} 1s Check_File_For_Word_Count bgp_peer.log total_received_nlri_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT} 2
138 BGP_Application_Peer_Delete_All_Routes
139 [Documentation] Start BGP application peer tool and delete all routes.
140 SSHLibrary.Switch Connection bgp_app_peer_console
141 Start_Console_Tool ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${BGP_APP_PEER_OPTIONS}
142 Wait_Until_Console_Tool_Finish ${bgp_emptying_timeout}
143 Store_File_To_Workspace bgp_app_peer.log bgp_app_peer_delete_all.log
145 Wait_For_Stable_Topology_After_Deletion
146 [Documentation] Wait until example-ipv4-topology becomes stable again.
147 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_emptying_timeout} period=${CHECK_PERIOD_APP_PEER_PREFIX_COUNT} repetitions=${REPETITIONS_APP_PEER_PREFIX_COUNT} excluded_count=${COUNT_APP_PEER_PREFIX_COUNT}
149 Check_For_Empty_Ipv4_Topology_After_Deleting
150 [Documentation] Example-ipv4-topology should be empty now.
151 PrefixCounting.Check_Ipv4_Topology_Is_Empty
153 Check_Bgp_Peer_Updates_For_Prefix_Withdrawals
154 [Documentation] Count the routes withdrawn by updates.
155 [Setup] SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
156 BuiltIn.Wait Until Keyword Succeeds ${bgp_emptying_timeout} 1s Check_File_For_Word_Count bgp_peer.log total_received_withdrawn_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT} 2
159 [Documentation] Stop BGP peer tool
160 SSHLibrary.Switch Connection bgp_peer_console
162 Store_File_To_Workspace bgp_peer.log bgp_peer_reconnect.log
164 Delete_Bgp_Peer_Configuration
165 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
166 ${template_as_string}= BuiltIn.Set_Variable {'NAME': 'example-bgp-peer'}
167 ConfigViaRestconf.Delete_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLES_FOLDER}${/}bgp_peer ${template_as_string}
169 Delete_Bgp_Application_Peer_Configuration
170 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
171 ${template_as_string}= BuiltIn.Set_Variable {'NAME': 'example-bgp-peer-app'}
172 ConfigViaRestconf.Delete_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer ${template_as_string}
175 [Documentation] Check controller's log for errors
176 Check Karaf Log File Does Not Have Messages ${ODL_SYSTEM_IP} Failed to send message Update
180 [Documentation] Setup imported resources, SSH-login to tools system,
181 ... create HTTP session, put Python tool to tools system.
182 SetupUtils.Setup_Utils_For_Setup_And_Teardown
183 ConfigViaRestconf.Setup_Config_Via_Restconf
184 PrefixCounting.PC_Setup
185 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
186 RequestsLibrary.Create_Session operational http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH}
187 # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
188 # TODO: Alternatively, create variable in Variables which starts with http.
189 # Both TODOs would probably need to update every suite relying on current Variables.
190 Open_BGP_Peer_Console
191 Open_BGP_Aplicationp_Peer_Console
192 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
193 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/bgp_app_peer.py
194 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/ipv4-routes-template.xml
195 # Calculate the timeout value based on how many routes are going to be pushed.
196 # The offset (20) is set for keeping reasonable timeout for low COUNT values.
197 ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER} * ${COUNT_APP_PEER_PREFIX_COUNT} * 3.0 / 10000 + 20
198 Builtin.Set_Suite_Variable ${bgp_filling_timeout} ${timeout}
199 Builtin.Set_Suite_Variable ${bgp_emptying_timeout} ${bgp_filling_timeout*3.0/4}
200 ${result} = BuiltIn.Evaluate str(int(${COUNT_APP_PEER_PREFIX_COUNT}) - int(${PREFILL}))
201 Builtin.Set_Suite_Variable ${remaining_prefixes} ${result}
202 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${CONTROLLER_LOG_LEVEL}
203 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${CONTROLLER_BGP_LOG_LEVEL} org.opendaylight.bgpcep
204 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${CONTROLLER_BGP_LOG_LEVEL} org.opendaylight.protocol
207 [Documentation] Make sure Python tool was killed and tear down imported Resources.
208 SSHLibrary.Switch Connection bgp_peer_console
209 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
210 KillPythonTool.Search_And_Kill_Remote_Python 'bgp_app_peer\.py'
211 ConfigViaRestconf.Teardown_Config_Via_Restconf
212 RequestsLibrary.Delete_All_Sessions
213 SSHLibrary.Close_All_Connections
215 Open_BGP_Peer_Console
216 [Documentation] Create a session for BGP peer.
217 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_peer_console
218 Utils.Flexible_Mininet_Login
220 Open_BGP_Aplicationp_Peer_Console
221 [Documentation] Create a session for BGP peer.
222 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} alias=bgp_app_peer_console
223 Utils.Flexible_Mininet_Login