2 Documentation BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.
4 ... Copyright (c) 2015-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 uses play.py as single iBGP peer which talks to
11 ... single controller in three node cluster configuration.
12 ... Test suite checks changes of the the example-ipv4-topology-<dst_id> on all nodes.
13 ... RIB is not examined.
14 ... <dst-id> is recognized during the suite run, should be the Leader of default
15 ... operational Shard, otherwise the scenario would fail due to
16 ... https://bugs.opendaylight.org/show_bug.cgi?id=5536
17 Suite Setup Setup_Everything
18 Suite Teardown Teardown_Everything
19 Test Setup SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
20 Test Teardown SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
21 Library SSHLibrary timeout=10s
22 Library RequestsLibrary
23 Variables ${CURDIR}/../../../variables/Variables.py
24 Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot
25 Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot
26 Resource ${CURDIR}/../../../libraries/FailFast.robot
27 Resource ${CURDIR}/../../../libraries/KillPythonTool.robot
28 Resource ${CURDIR}/../../../libraries/PrefixCounting.robot
29 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
30 Resource ${CURDIR}/../../../libraries/ClusterKeywords.robot
31 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
32 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
35 ${BGP_TOOL_LOG_LEVEL} info
36 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpclustering/bgp_peer
37 ${BGP_VARIABLES_FOLDER_OP} ${CURDIR}/../../../variables/bgpclustering/bgp_peer_operational
38 ${NETCONF_DEV_FOLDER} ${CURDIR}/../../../variables/netconf/device/full-uri-device
39 ${NETCONF_MOUNT_FOLDER} ${CURDIR}/../../../variables/netconf/device/full-uri-mount
44 ${KARAF_LOG_LEVEL} INFO
45 ${KARAF_BGPCEP_LOG_LEVEL} ${KARAF_LOG_LEVEL}
46 ${KARAF_PROTOCOL_LOG_LEVEL} ${KARAF_BGPCEP_LOG_LEVEL}
49 ${RESULTS_FILE_NAME} bgp.csv
50 ${TEST_DURATION_MULTIPLIER} 1
53 ${INITIAL_RESTCONF_TIMEOUT} 30s
54 ${KARAF_HOME} ${WORKSPACE}/${BUNDLEFOLDER}
55 ${SHARD_DEFAULT_CONFIG} shard-default-config
56 ${SHARD_DEFAULT_OPERATIONAL} shard-default-operational
57 ${CONFIG_SESSION} config-session
58 ${CONFIGURATION_1} operational-1
59 ${CONFIGURATION_2} operational-2
60 ${CONFIGURATION_3} operational-3
61 ${EXAMPLE_IPV4_TOPOLOGY_PREF} example-ipv4-topology-
62 ${DEVICE_NAME} peer-controller-config
63 ${DEVICE_CHECK_TIMEOUT} 60s
64 ${RIB_INSTANCE} example-bgp-rib
65 ${BGP_PEER_NAME} example-bgp-peer
68 Get Default Operational Shard Leader
69 @{idx_list}= BuiltIn.Create List 1 2 3
70 ${dos_leader} ${dos_followers}= ClusterKeywords.Get Cluster Shard Status ${idx_list} operational default
71 BuiltIn.Set Suite variable ${dos_leader} ${dos_leader}
72 BuiltIn.Set Suite variable ${default_oper_shard_leader_node_ip} ${ODL_SYSTEM_${dos_leader}_IP}
73 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_${dos_leader}_IP}:${RESTCONFPORT} auth=${AUTH}
75 Check_For_Empty_Ipv4_Topology_Before_Talking_1
76 [Documentation] Wait for ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
78 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
79 BuiltIn.Wait_Until_Keyword_Succeeds ${INITIAL_RESTCONF_TIMEOUT} 1s PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_1} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
81 Check_For_Empty_Ipv4_Topology_Before_Talking_2
82 [Documentation] Wait for ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
84 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
85 BuiltIn.Wait_Until_Keyword_Succeeds ${INITIAL_RESTCONF_TIMEOUT} 1s PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_2} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
87 Check_For_Empty_Ipv4_Topology_Before_Talking_3
88 [Documentation] Wait for ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
90 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
91 BuiltIn.Wait_Until_Keyword_Succeeds ${INITIAL_RESTCONF_TIMEOUT} 1s PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_3} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
93 Configure_Netconf_Device
94 [Documentation] Configures and verifies netconf device configuration. If configuration is not successful, it de-configures the device before the next attempt.
95 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} DEVICE_PORT=1830 DEVICE_IP=${default_oper_shard_leader_node_ip} DEVICE_USER=admin DEVICE_PASSWORD=admin
96 # After the netconf device is configured, odl starts downloading schemas. If the downloading will not finish within akka timeout, more tries are needed, 3 is based on a user experience.
97 : FOR ${index} IN RANGE 0 3
98 \ ${status} ${value}= Run Keyword And Ignore Error Configure Netconf Device And Check Mounted ${mapping}
99 \ Exit For Loop If '${status}' == 'PASS'
100 \ Run Keyword Unless '${status}' == 'PASS' TemplatedRequests.Delete_Templated ${NETCONF_DEV_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
101 Run Keyword Unless '${status}' == 'PASS' Fail
103 Reconfigure_ODL_To_Accept_Connection
104 [Documentation] Configure BGP peer module with initiate-connection set to false.
105 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
106 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
107 ... INITIATE=false BGP_RIB=${RIB_INSTANCE}
108 TemplatedRequests.Put_As_Json_Templated ${BGP_VARIABLES_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
109 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
111 Start_Talking_BGP_Speaker
112 [Documentation] Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.
113 BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Start Bgp Peer
115 Wait_For_Stable_Talking_Ipv4_Topology_1
116 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable. This is done by checking stability of prefix count as seen from node 1.
117 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=0 session=${CONFIGURATION_1} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
119 Wait_For_Stable_Talking_Ipv4_Topology_2
120 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable. This is done by checking stability of prefix count as seen from node 2.
121 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=0 session=${CONFIGURATION_2} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
123 Wait_For_Stable_Talking_Ipv4_Topology_3
124 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable. This is done by checking stability of prefix count as seen from node 3.
125 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=0 session=${CONFIGURATION_3} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
127 Check_Talking_Ipv4_Topology_Count_1
128 [Documentation] Count the routes in ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} and fail if the count is not correct as seen from node 1.
130 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
131 PrefixCounting.Check_Ipv4_Topology_Count ${COUNT} session=${CONFIGURATION_1} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
133 Check_Talking_Ipv4_Topology_Count_2
134 [Documentation] Count the routes in ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} and fail if the count is not correct as seen from node 2.
136 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
137 PrefixCounting.Check_Ipv4_Topology_Count ${COUNT} session=${CONFIGURATION_2} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
139 Check_Talking_Ipv4_Topology_Count_3
140 [Documentation] Count the routes in ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} and fail if the count is not correct as seen from node 3.
142 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
143 PrefixCounting.Check_Ipv4_Topology_Count ${COUNT} session=${CONFIGURATION_3} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
145 Kill_Talking_BGP_Speaker
146 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
148 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
149 BGPSpeaker.Kill_BGP_Speaker
150 FailFast.Do_Not_Fail_Fast_From_Now_On
152 Wait_For_Stable_Ipv4_Topology_After_Listening_1
153 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable again as seen from node 1.
155 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=${COUNT} session=${CONFIGURATION_1} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
157 Wait_For_Stable_Ipv4_Topology_After_Listening_2
158 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable again as seen from node 2.
160 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=${COUNT} session=${CONFIGURATION_2} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
162 Wait_For_Stable_Ipv4_Topology_After_Listening_3
163 [Documentation] Wait until ${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader} becomes stable again as seen from node 3.
165 PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable timeout=${bgp_filling_timeout} period=${CHECK_PERIOD} repetitions=${REPETITIONS} excluded_count=${COUNT} session=${CONFIGURATION_3} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
167 Check_For_Empty_Ipv4_Topology_After_Listening_1
168 [Documentation] Example-ipv4-topology should be empty now as seen from node 1.
170 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
171 PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_1} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
173 Check_For_Empty_Ipv4_Topology_After_Listening_2
174 [Documentation] Example-ipv4-topology should be empty now as seen from node 2.
176 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
177 PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_2} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
179 Check_For_Empty_Ipv4_Topology_After_Listening_3
180 [Documentation] Example-ipv4-topology should be empty now as seen from node 3.
182 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
183 PrefixCounting.Check_Ipv4_Topology_Is_Empty session=${CONFIGURATION_3} topology=${EXAMPLE_IPV4_TOPOLOGY_PREF}${dos_leader}
185 Delete_Bgp_Peer_Configuration
186 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
187 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
188 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
189 ... INITIATE=false BGP_RIB=${RIB_INSTANCE}
190 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
192 Delete_Netconf_Device_Configuration
193 [Documentation] Revert the netconf configuration to the original stat
194 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
195 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} DEVICE_PORT=1830 DEVICE_IP=${default_oper_shard_leader_node_ip} DEVICE_USER=admin DEVICE_PASSWORD=admin
196 TemplatedRequests.Delete_Templated ${NETCONF_DEV_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
200 [Documentation] Setup imported resources, SSH-login to tools system,
201 ... create HTTP session, put Python tool to tools system.
202 SetupUtils.Setup_Utils_For_Setup_And_Teardown
203 RequestsLibrary.Create_Session ${CONFIGURATION_1} http://${ODL_SYSTEM_1_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH}
204 RequestsLibrary.Create_Session ${CONFIGURATION_2} http://${ODL_SYSTEM_2_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH}
205 RequestsLibrary.Create_Session ${CONFIGURATION_3} http://${ODL_SYSTEM_3_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH}
206 PrefixCounting.PC_Setup
207 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
208 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP}
209 Utils.Flexible_Mininet_Login
210 # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
211 # TODO: Alternatively, create variable in Variables which starts with http.
212 # Both TODOs would probably need to update every suite relying on current Variables.
213 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
214 SSHKeywords.Require_Python
215 SSHKeywords.Assure_Library_Ipaddr target_dir=.
216 # Calculate the timeout value based on how many routes are going to be pushed
217 # TODO: Replace 35 with some formula from period and repetitions.
218 ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER} * (${COUNT} * 6.0 / 10000 + 35)
219 Builtin.Set_Suite_Variable ${bgp_filling_timeout} ${timeout}
220 Builtin.Set_Suite_Variable ${bgp_emptying_timeout} ${bgp_filling_timeout*3.0/4}
221 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${KARAF_LOG_LEVEL}
222 ClusterKeywords.Create_Controller_Sessions
223 ${controller_list}= ClusterKeywords.Get_Controller_List
224 Builtin.Set_Suite_Variable ${controller_list}
225 BuiltIn.Log ${controller_list}
226 ${default_shard_leader_node_ip}= ClusterKeywords.Get_Leader_And_Verify ${SHARD_DEFAULT_CONFIG}
227 Builtin.Set_Suite_Variable ${default_shard_leader_node_ip}
228 BuiltIn.Log ${default_shard_leader_node_ip}
229 ${default_shard_follower_nodes_ip}= ClusterKeywords.Get_All_Followers ${SHARD_DEFAULT_CONFIG}
230 Builtin.Set_Suite_Variable ${default_shard_follower_nodes_ip}
231 BuiltIn.Log ${default_shard_follower_nodes_ip}
234 [Documentation] Make sure Python tool was killed and tear down imported Resources.
235 # Environment issue may have dropped the SSH connection, but we do not want Teardown to fail.
236 BuiltIn.Run_Keyword_And_Ignore_Error KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
237 RequestsLibrary.Delete_All_Sessions
238 SSHLibrary.Close_All_Connections
240 Store_File_To_Workspace
241 [Arguments] ${src_file_name} ${dst_file_name}
242 [Documentation] Store the provided file from the SSH client to workspace.
243 ${files}= SSHLibrary.List Files In Directory .
244 ${output_log}= SSHLibrary.Execute_Command cat ${src_file_name}
245 BuiltIn.Log ${output_log}
246 Create File ${dst_file_name} ${output_log}
248 Configure Netconf Device And Check Mounted
249 [Arguments] ${mapping}
250 TemplatedRequests.Put_As_Xml_Templated ${NETCONF_DEV_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
251 BuiltIn.Wait Until Keyword Succeeds 10x 3s TemplatedRequests.Get_As_Xml_Templated ${NETCONF_MOUNT_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
254 [Documentation] Starts bgp peer and verifies that the peer runs.
255 BGPSpeaker.Start_BGP_Speaker --amount ${COUNT} --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${default_oper_shard_leader_node_ip} --peerport=${ODL_BGP_PORT} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}
256 BGPcliKeywords.Read_And_Fail_If_Prompt_Is_Seen