+ &{mapping} BuiltIn.Create_Dictionary
+ ... DEVICE_NAME=${DEVICE_NAME}
+ ... NAME=example-ibgp-peer1
+ ... IP=${iBGP_PEER1_IP}
+ ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}ibgp_peers mapping=${mapping}
+ Collections.Set To Dictionary ${mapping} NAME=example-ebgp-peer1 IP=${eBGP_PEER1_IP}
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}ebgp_peers mapping=${mapping}
+ Collections.Set To Dictionary ${mapping} NAME=example-ebgp-peer2 IP=${eBGP_PEER2_IP}
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}ebgp_peers mapping=${mapping}
+
+TC_LAS_Reconfigure_Odl_To_Accept_Connection
+ [Documentation] Configure neighbors. One ibgp and one ebgp neighbor with local-as configured.
+ &{mapping} Create Dictionary
+ ... IP=${iBGP_PEER1_IP}
+ ... HOLDTIME=${HOLDTIME}
+ ... PEER_PORT=${BGP_TOOL_PORT}
+ ... PASSIVE_MODE=true
+ ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping}
+ &{mapping} Create Dictionary
+ ... IP=${eBGP_PEER1_IP}
+ ... HOLDTIME=${HOLDTIME}
+ ... PEER_PORT=${BGP_TOOL_PORT}
+ ... PASSIVE_MODE=true
+ ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ ... AS_NUMBER=${LOCAL_AS}
+ ... PEER_AS=${eBGP_AS}
+ TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}local_as/ebgp_peer mapping=${mapping}
+ [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+
+TC_LAS_Start_iBgp_Speaker_And_Verify_Connected
+ [Documentation] Verify that peer is present in odl's rib. Peer is configured with local-as.
+ [Tags] critical
+ SSHLibrary.Switch Connection ibgp_peer1_console
+ ${speaker_args} BuiltIn.Set_Variable
+ ... --firstprefix ${iBGP_PEER1_FIRST_PREFIX_IP} --prefixlen ${PREFIX_LEN} --amount 1 --myip=${iBGP_PEER1_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --debug
+ ${output} BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected
+ ... ${speaker_args}
+ ... session=default
+ ... speaker_ip=${iBGP_PEER1_IP}
+ BuiltIn.Log ${output}
+
+TC_LAS_Start_eBgp_Speaker_And_Verify_Connected
+ [Documentation] Verify that peer is present in odl's rib. Peer is configured with local-as.
+ [Tags] critical
+ SSHLibrary.Switch Connection ebgp_peer1_console
+ ${speaker_args} BuiltIn.Set_Variable
+ ... --firstprefix ${eBGP_PEER1_FIRST_PREFIX_IP} --prefixlen ${PREFIX_LEN} --amount 1 --asnumber=${eBGP_AS} --myip=${eBGP_PEER1_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --debug
+ ${output} BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected
+ ... ${speaker_args}
+ ... session=default
+ ... speaker_ip=${eBGP_PEER1_IP}
+ BuiltIn.Log ${output}
+
+TC_LAS_Verify_iBGP_Rib_Out
+ [Documentation] Verifies iBGP's adj-rib-out output. Expects local-as, and ebgp peer-as presence.
+ [Tags] critical
+ &{mapping} Create Dictionary
+ ... IP=${iBGP_PEER1_IP}
+ ... HOLDTIME=${HOLDTIME}
+ ... PEER_PORT=${BGP_TOOL_PORT}
+ ... PASSIVE_MODE=true
+ ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ ... AS_NUMBER=${LOCAL_AS}
+ ... PEER_AS=${eBGP_AS}
+ ... PREFIXLEN=${eBGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}
+ BuiltIn.Wait_Until_Keyword_Succeeds
+ ... ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
+ ... ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
+ ... TemplatedRequests.Get_As_Json_Templated
+ ... ${BGP_VARIABLES_FOLDER}${/}local_as/adj_rib_out
+ ... mapping=${mapping}
+ ... verify=True
+
+TC_LAS_Verify_eBGP_Rib_Out
+ [Documentation] Verifies eBGP's adj-rib-out output. Expects local-as, and ibgp peer-as presence.
+ [Tags] critical
+ &{mapping} Create Dictionary
+ ... IP=${eBGP_PEER1_IP}
+ ... HOLDTIME=${HOLDTIME}
+ ... PEER_PORT=${BGP_TOOL_PORT}
+ ... PASSIVE_MODE=true
+ ... BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ ... AS_NUMBER=${LOCAL_AS}
+ ... PEER_AS=${DEFAULT_AS}
+ ... PREFIXLEN=${iBGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}
+ BuiltIn.Wait_Until_Keyword_Succeeds
+ ... ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
+ ... ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
+ ... TemplatedRequests.Get_As_Json_Templated
+ ... ${BGP_VARIABLES_FOLDER}${/}local_as/adj_rib_out
+ ... mapping=${mapping}
+ ... verify=True
+
+TC_LAS_Kill_iBgp_Speaker_After_Talking
+ [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
+ [Tags] critical
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ SSHLibrary.Switch Connection ibgp_peer1_console
+ BGPSpeaker.Kill_BGP_Speaker
+ 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] FailFast.Do_Not_Start_Failing_If_This_Failed
+
+TC_LAS_Kill_eBgp_Speaker_After_Talking
+ [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
+ [Tags] critical
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ SSHLibrary.Switch Connection ebgp_peer1_console
+ BGPSpeaker.Kill_BGP_Speaker
+ 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] FailFast.Do_Not_Start_Failing_If_This_Failed
+
+TC_LAS_Delete_Bgp_Peer_Configurations
+ [Documentation] Delete peer configuration.
+ &{mapping} Create Dictionary IP=${iBGP_PEER1_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping}
+ &{mapping} Create Dictionary IP=${eBGP_PEER1_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
+ TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}local_as/ebgp_peer mapping=${mapping}
+ [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+