2 Documentation BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.
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
9 Library SSHLibrary timeout=10s
10 Library RequestsLibrary
11 Variables ${CURDIR}/../../../variables/Variables.py
12 Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot
13 Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot
14 Resource ${CURDIR}/../../../libraries/FailFast.robot
15 Resource ${CURDIR}/../../../libraries/KillPythonTool.robot
16 Resource ${CURDIR}/../../../libraries/PrefixCounting.robot
17 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
18 Resource ${CURDIR}/../../../libraries/ClusterManagement.robot
19 Resource ${CURDIR}/../../../libraries/ShardStability.robot
20 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
21 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
22 Resource ${CURDIR}/../../../libraries/ClusterAdmin.robot
25 ${BGP_TOOL_LOG_LEVEL} info
26 ${BGP_PEER_FOLDER} ${CURDIR}/../../../variables/bgpclustering/bgp_peer_openconf # used for configuration of bgp peer via openconfig
27 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpclustering/bgp_peer # used for configuration of bgp peer vie netconf connector
28 ${BGP_VARIABLES_FOLDER_OP} ${CURDIR}/../../../variables/bgpclustering/bgp_peer_operational
29 ${NETCONF_DEV_FOLDER} ${CURDIR}/../../../variables/netconf/device/full-uri-device
30 ${NETCONF_MOUNT_FOLDER} ${CURDIR}/../../../variables/netconf/device/full-uri-mount
34 ${KARAF_LOG_LEVEL} INFO
35 ${KARAF_BGPCEP_LOG_LEVEL} ${KARAF_LOG_LEVEL}
36 ${KARAF_PROTOCOL_LOG_LEVEL} ${KARAF_BGPCEP_LOG_LEVEL}
39 ${RESULTS_FILE_NAME} bgp.csv
40 ${TEST_DURATION_MULTIPLIER} 1
43 ${INITIAL_RESTCONF_TIMEOUT} 30s
44 ${KARAF_HOME} ${WORKSPACE}/${BUNDLEFOLDER}
45 ${SHARD_DEFAULT_CONFIG} shard-default-config
46 ${SHARD_DEFAULT_OPERATIONAL} shard-default-operational
47 ${CONFIG_SESSION} config-session
48 ${CONFIGURATION_1} operational-1
49 ${CONFIGURATION_2} operational-2
50 ${CONFIGURATION_3} operational-3
51 ${EXAMPLE_IPV4_TOPOLOGY} example-ipv4-topology
52 ${DEVICE_NAME} peer-controller-config
53 ${DEVICE_CHECK_TIMEOUT} 60s
54 ${RIB_INSTANCE} example-bgp-rib
55 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
56 ${BGP_PEER_NAME} example-bgp-peer
57 ${PEER_CHECK_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
58 @{SHARD_MONITOR_LIST} default:config default:operational topology:config topology:operational inventory:config inventory:operational
62 [Documentation] Setup imported resources, SSH-login to tools system,
63 ... create HTTP session, put Python tool to tools system.
64 SetupUtils.Setup_Utils_For_Setup_And_Teardown
65 RequestsLibrary.Create_Session ${CONFIGURATION_1} http://${ODL_SYSTEM_1_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH} timeout=40 max_retries=0
66 RequestsLibrary.Create_Session ${CONFIGURATION_2} http://${ODL_SYSTEM_2_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH} timeout=40 max_retries=0
67 RequestsLibrary.Create_Session ${CONFIGURATION_3} http://${ODL_SYSTEM_3_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH} timeout=40 max_retries=0
68 PrefixCounting.PC_Setup
69 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
70 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP}
71 Utils.Flexible_Mininet_Login
72 # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
73 # TODO: Alternatively, create variable in Variables which starts with http.
74 # Both TODOs would probably need to update every suite relying on current Variables.
75 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
76 SSHKeywords.Require_Python
77 SSHKeywords.Assure_Library_Ipaddr target_dir=.
78 # Calculate the timeout value based on how many routes are going to be pushed
79 # TODO: Replace 35 with some formula from period and repetitions.
80 ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER} * (${COUNT} * 6.0 / 10000 + 35)
81 Builtin.Set_Suite_Variable ${bgp_filling_timeout} ${timeout}
82 Builtin.Set_Suite_Variable ${bgp_emptying_timeout} ${bgp_filling_timeout*3.0/4}
83 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${KARAF_LOG_LEVEL}
84 ${init_shard_details} = ShardStability.Shards_Stability_Get_Details ${SHARD_MONITOR_LIST}
85 BuiltIn.Set_Suite_Variable ${init_shard_details}
88 [Documentation] Make sure Python tool was killed and tear down imported Resources.
89 # TODO: This keyword is not specific to prefix counting. Find a better place for it.
90 # Environment issue may have dropped the SSH connection, but we do not want Teardown to fail.
91 BuiltIn.Run_Keyword_And_Ignore_Error KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
92 RequestsLibrary.Delete_All_Sessions
93 SSHLibrary.Close_All_Connections
95 Configure_Netconf_Device_And_Check_Mounted
96 [Arguments] ${mapping}
97 [Documentation] Configures netconf device
98 # TODO: This keyword is not specific to prefix counting. Find a better place for it.
99 TemplatedRequests.Put_As_Xml_Templated ${NETCONF_DEV_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
100 BuiltIn.Wait_Until_Keyword_Succeeds 10x 3s TemplatedRequests.Get_As_Xml_Templated ${NETCONF_MOUNT_FOLDER} mapping=${mapping} session=${CONFIG_SESSION}
103 [Arguments] ${peerip}=${rib_owner_node_id}
104 [Documentation] Starts bgp peer and verifies that the peer runs.
105 # TODO: This keyword is not specific to prefix counting. Find a better place for it.
106 BGPSpeaker.Start_BGP_Speaker --amount ${COUNT} --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${peerip} --peerport=${ODL_BGP_PORT} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}
108 Start_Bgp_Peer_And_Verify_Connected
109 [Arguments] ${connection_retries}=${1} ${peerip}=${rib_owner_node_id}
110 [Documentation] Starts the peer and verifies its connection. The verification is done by checking the presence
111 ... of the peer in the bgp rib.
112 # TODO: This keyword is not specific to prefix counting. Find a better place for it.
113 : FOR ${idx} IN RANGE ${connection_retries}
114 \ Start_Bgp_Peer peerip=${peerip}
115 \ ${status} ${value}= BuiltIn.Run_Keyword_And_Ignore_Error BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s
116 \ ... Verify_Bgp_Peer_Connection ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP} connected=${True}
117 \ BuiltIn.Run_Keyword_Unless "${status}" == "PASS" BGPSpeaker.Kill_BGP_Speaker
118 \ BuiltIn.Return_From_Keyword_If "${status}" == "PASS"
119 BuiltIn.Fail Unable to connect bgp peer to ODL
121 Verify_Bgp_Peer_Connection
122 [Arguments] ${session} ${peer_ip} ${connected}=${True}
123 [Documentation] Checks peer presence in operational datastore
124 # TODO: This keyword is not specific to prefix counting. Find a better place for it.
125 ${exp_status_code}= BuiltIn.Set_Variable_If ${connected} ${200} ${404}
126 ${rsp}= RequestsLibrary.Get Request ${session} ${PEER_CHECK_URL}${peer_ip}
127 BuiltIn.Log ${rsp.content}
128 BuiltIn.Should_Be_Equal_As_Numbers ${exp_status_code} ${rsp.status_code}
130 Set_Shard_Leaders_Location_And_Verify
131 [Arguments] ${requested_shard_localtion_idx}
132 [Documentation] Move default/topology config/operational shard location to local or remote node as requested
133 ... towards the given rib singleton instance location.
134 ShardStability.Set_Shard_Location ${requested_shard_localtion_idx}
135 BuiltIn.Wait_Until_Keyword_Succeeds 30s 5s ShardStability.Verify_Shard_Leader_Located_As_Expected ${requested_shard_localtion_idx} http_timeout=125s
136 ${init_shard_details} = ShardStability.Shards_Stability_Get_Details ${SHARD_MONITOR_LIST}
137 BuiltIn.Set_Suite_Variable ${init_shard_details}