*** Settings ***
Documentation BGP performance of ingesting from many iBGP peers, data change counter is used.
...
-... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+... Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved.
...
... This program and the accompanying materials are made available under the
... terms of the Eclipse Public License v1.0 which accompanies this distribution,
... TODO: Figure out how to make it configurable.
... As peer IP adresses are set incrementally, we need ipaddr to be used in Robot somehow.
...
+... Brief description how to configure BGP peer can be found here:
+... https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer
+... http://docs.opendaylight.org/en/stable-boron/user-guide/bgp-user-guide.html#bgp-peering
+...
... TODO: Is there a need for version of this suite where ODL connects to pers?
... Note that configuring ODL is slow, which may affect measured performance singificantly.
... Advanced TODO: Give manager ability to start pushing on trigger long after connections are established.
Library DateTime
Library RequestsLibrary
Library SSHLibrary timeout=10s
-Variables ${CURDIR}/../../../variables/Variables.py
-Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot
-Resource ${CURDIR}/../../../libraries/ChangeCounter.robot
-Resource ${CURDIR}/../../../libraries/ConfigViaRestconf.robot
-Resource ${CURDIR}/../../../libraries/FailFast.robot
-Resource ${CURDIR}/../../../libraries/KillPythonTool.robot
-Resource ${CURDIR}/../../../libraries/PrefixCounting.robot
-Resource ${CURDIR}/../../../libraries/SetupUtils.robot
-Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
+Resource ../../../libraries/BGPcliKeywords.robot
+Resource ../../../libraries/BGPSpeaker.robot
+Resource ../../../libraries/ChangeCounter.robot
+Resource ../../../libraries/CompareStream.robot
+Resource ../../../libraries/FailFast.robot
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../libraries/KillPythonTool.robot
+Resource ../../../libraries/PrefixCounting.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/SSHKeywords.robot
+Resource ../../../libraries/TemplatedRequests.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/Variables.robot
*** Variables ***
${BGP_TOOL_LOG_LEVEL} info
${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpuser/
-${CHECK_PERIOD} 1
+${CHECK_PERIOD} 60
${CHECK_PERIOD_CHANGE_COUNT} ${CHECK_PERIOD}
${CHECK_PERIOD_CHANGE_COUNT_MANY} ${CHECK_PERIOD_CHANGE_COUNT}
-${COUNT} 1000000
+${COUNT} 600000
${COUNT_CHANGE_COUNT} ${COUNT}
${COUNT_CHANGE_COUNT_MANY} ${COUNT_CHANGE_COUNT}
${FIRST_PEER_IP} 127.0.0.1
${MULTIPLICITY} 2 # May be increased after Bug 4488 is fixed.
${MULTIPLICITY_CHANGE_COUNT} ${MULTIPLICITY}
${MULTIPLICITY_CHANGE_COUNT_MANY} ${MULTIPLICITY_CHANGE_COUNT}
+${PEER_GROUP} internal-neighbors
${REPETITIONS} 1 # Should be increased depending on multiplicity.
${REPETITIONS_CHANGE_COUNT} ${REPETITIONS}
${REPETITIONS_CHANGE_COUNT_MANY} ${REPETITIONS_CHANGE_COUNT}
${TEST_DURATION_MULTIPLIER} 1
${TEST_DURATION_MULTIPLIER_CHANGE_COUNT} ${TEST_DURATION_MULTIPLIER}
${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_MANY} ${TEST_DURATION_MULTIPLIER_CHANGE_COUNT}
+${RIB_INSTANCE} example-bgp-rib
+${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
+${DEVICE_NAME} controller-config
# TODO: Option names can be better.
-${last_change_count_many} -1
+${last_change_count_many} 1
*** Test Cases ***
Check_For_Empty_Ipv4_Topology_Before_Talking
Reconfigure_ODL_To_Accept_Connections
[Documentation] Configure BGP peer modules with initiate-connection set to false.
+ ... In Versions Fluorine and above, it sets peer-group as template, and than sets all neighbors using it.
+ CompareStream.Run_Keyword_If_At_Least_Fluorine Configure_Peer_Group
: FOR ${index} IN RANGE 1 ${MULTIPLICITY_CHANGE_COUNT_MANY}+1
\ ${peer_name} = BuiltIn.Set_Variable example-bgp-peer-${index}
\ ${peer_ip} = BuiltIn.Evaluate str(ipaddr.IPAddress('${FIRST_PEER_IP}') + ${index} - 1) modules=ipaddr
- \ ${template_as_string} = BuiltIn.Set_Variable {'NAME': '${peer_name}', 'IP': '${peer_ip}', 'PEER_PORT': '${BGP_TOOL_PORT}', 'HOLDTIME': '${HOLDTIME_CHANGE_COUNT_MANY}', 'INITIATE': 'false'}
- \ ConfigViaRestconf.Put_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLES_FOLDER}${/}bgp_peer ${template_as_string}
+ \ &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${peer_name} IP=${peer_ip} HOLDTIME=${HOLDTIME_CHANGE_COUNT_MANY}
+ \ ... PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_INSTANCE} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ \ ... RIB_INSTANCE_NAME=${RIB_INSTANCE} PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
+ \ CompareStream.Run_Keyword_If_At_Least_Fluorine TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group mapping=${mapping}
+ \ CompareStream.Run_Keyword_If_Less_Than_Fluorine TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping}
# FIXME: Add testcase to change bgpcep and protocol log levels, when a Keyword that does it without messing with current connection is ready.
-Wait_For_Data_Change_Counter_Ready
- [Documentation] Data change counter might have been slower to start than ipv4 topology, wait for it.
- BuiltIn.Wait_Until_Keyword_Succeeds 60s 1s ChangeCounter.Get_Change_Count
-
Reconfigure_Data_Change_Counter
[Documentation] Configure data change counter to count transactions in example-ipv4-topology instead of example-linkstate-topology.
ChangeCounter.Reconfigure_Topology_Name example-ipv4-topology
+Verify_For_Data_Change_Counter_Ready
+ [Documentation] Data change counter might have been slower to start than ipv4 topology, wait for it.
+ BuiltIn.Wait_Until_Keyword_Succeeds 5s 1s ChangeCounter.Get_Change_Count
+
Change_Karaf_Logging_Levels
[Documentation] We may want to set more verbose logging here after configuration is done.
KarafKeywords.Set_Bgpcep_Log_Levels bgpcep_level=${KARAF_BGPCEP_LOG_LEVEL} protocol_level=${KARAF_PROTOCOL_LOG_LEVEL}
[Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
Store_Change_Count
BGPSpeaker.Kill_BGP_Speaker
+ BGPcliKeywords.Store_File_To_Workspace play.py.out manypeers_cc_play.log
FailFast.Do_Not_Fail_Fast_From_Now_On
# NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
[Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
[Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
# TODO: Is it useful to extract peer naming logic to separate Keyword?
: FOR ${index} IN RANGE 1 ${MULTIPLICITY_CHANGE_COUNT_MANY}+1
- \ ${template_as_string}= BuiltIn.Set_Variable {'NAME': 'example-bgp-peer-${index}'}
- \ ConfigViaRestconf.Delete_Xml_Template_Folder_Config_Via_Restconf ${BGP_VARIABLESFOLDER}${/}bgp_peer ${template_as_string}
+ \ ${peer_name} = BuiltIn.Set_Variable example-bgp-peer-${index}
+ \ ${peer_ip} = BuiltIn.Evaluate str(ipaddr.IPAddress('${FIRST_PEER_IP}') + ${index} - 1) modules=ipaddr
+ \ &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${peer_name} IP=${peer_ip} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ \ ... PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
+ \ CompareStream.Run_Keyword_If_At_Least_Fluorine TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group mapping=${mapping}
+ \ CompareStream.Run_Keyword_If_Less_Than_Fluorine TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping}
+ CompareStream.Run_Keyword_If_At_Least_Fluorine Deconfigure_Peer_Group
*** Keywords ***
Setup_Everything
[Documentation] Setup imported resources, SSH-login to ODL system,
... create HTTP session, put Python tool to ODL system.
SetupUtils.Setup_Utils_For_Setup_And_Teardown
- ConfigViaRestconf.Setup_Config_Via_Restconf
+ TemplatedRequests.Create_Default_Session
ChangeCounter.CC_Setup
PrefixCounting.PC_Setup
KarafKeywords.Open Controller Karaf Console On Background
- SSHLibrary.Set_Default_Configuration prompt=${ODL_SYSTEM_PROMPT}
- SSHLibrary.Open_Connection ${ODL_SYSTEM_IP}
- Utils.Flexible_Controller_Login
- RequestsLibrary.Create_Session operational http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${OPERATIONAL_API} auth=${AUTH}
+ RequestsLibrary.Create_Session operational http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} timeout=125 max_retries=0
# TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
# TODO: Alternatively, create variable in Variables which starts with http.
# Both TODOs would probably need to update every suite relying on current Variables.
+ SSHLibrary.Set_Default_Configuration prompt=${ODL_SYSTEM_PROMPT}
+ SSHLibrary.Open_Connection ${ODL_SYSTEM_IP}
+ SSHKeywords.Flexible_Controller_Login
SSHKeywords.Require_Python
- SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
SSHKeywords.Assure_Library_Ipaddr target_dir=.
+ SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
# Calculate the timeout value based on how many routes are going to be pushed
${period} = DateTime.Convert_Time ${CHECK_PERIOD_CHANGE_COUNT_MANY} result_format=number
- ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_MANY} * (${COUNT_CHANGE_COUNT_MANY} * 3.0 / 10000 + ${period} * (${REPETITIONS_CHANGE_COUNT_MANY} + 1))
+ ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_MANY} * (${COUNT_CHANGE_COUNT_MANY} * 3.0 / 10000 + ${period} * (${REPETITIONS_CHANGE_COUNT_MANY} + 1)) + 20
Builtin.Set_Suite_Variable ${bgp_filling_timeout} ${timeout}
- ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_MANY} * (${COUNT_CHANGE_COUNT_MANY} * 2.0 / 10000 + ${period} * (${REPETITIONS_CHANGE_COUNT_MANY} + 1))
+ ${timeout} = BuiltIn.Evaluate ${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_MANY} * (${COUNT_CHANGE_COUNT_MANY} * 2.0 / 10000 + ${period} * (${REPETITIONS_CHANGE_COUNT_MANY} + 1)) + 20
Builtin.Set_Suite_Variable ${bgp_emptying_timeout} ${timeout}
KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${KARAF_LOG_LEVEL}
[Documentation] Make sure Python tool was killed and tear down imported Resources.
# Environment issue may have dropped the SSH connection, but we do not want Teardown to fail.
BuiltIn.Run_Keyword_And_Ignore_Error KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
- ConfigViaRestconf.Teardown_Config_Via_Restconf
+ BuiltIn.Run_Keyword_And_Ignore_Error Utils.Get_Sysstat_Statistics
RequestsLibrary.Delete_All_Sessions
SSHLibrary.Close_All_Connections
[Documentation] Get the count of changes from BGP change counter. Ignore error or store the value.
${status} ${count} = BuiltIn.Run_Keyword_And_Ignore_Error ChangeCounter.Get_Change_Count
BuiltIn.Run_Keyword_If '${status}' == 'PASS' BuiltIn.Set_Suite_Variable ${last_change_count_many} ${count}
+
+Configure_Peer_Group
+ [Documentation] Configures peer group which is template for all the neighbors which are going
+ ... to be configured. Also after PUT, this case verifies presence of peer group within
+ ... peer-groups. This test case is specific to versions Fluorine and above.
+ &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} HOLDTIME=${HOLDTIME_CHANGE_COUNT_MANY} PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_INSTANCE}
+ ... PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} RIB_INSTANCE_NAME=${RIB_INSTANCE} PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
+ TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}peer_group mapping=${mapping}
+ TemplatedRequests.Get_As_Json_Templated ${BGP_VARIABLES_FOLDER}${/}verify_peer_group mapping=${mapping} verify=True
+
+Deconfigure_Peer_Group
+ [Documentation] Deconfigures peer group which is template for all the neighbors.
+ ... This test case is specific to versions Fluorine and above.
+ &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} HOLDTIME=${HOLDTIME_CHANGE_COUNT_MANY} PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_INSTANCE}
+ ... PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} RIB_INSTANCE_NAME=${RIB_INSTANCE} PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}peer_group mapping=${mapping}