f1b66863b9d195a2e6409896798a9703f9c72fd5
[integration/test.git] / csit / suites / bgpcep / bgpuser / basic.robot
1 *** Settings ***
2 Documentation     Basic tests for odl-bgpcep-bgp-all feature.
3 ...
4 ...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
5 ...
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 ...
10 ...               Test suite performs basic BGP functional test cases:
11 ...               BGP peer initiated connection
12 ...               - introduce and check 3 prefixes in one update message
13 ...               ODL controller initiated connection:
14 ...               - introduce and check 3 prefixes in one update message
15 ...               - introduce 2 prefixes in first update message and then additional 2 prefixes
16 ...               in another update while the very first prefix is withdrawn
17 ...               - introduce 3 prefixes and try to withdraw the first one
18 ...               (to be ignored by controller) in a single update message
19 ...
20 ...               TC_R (test case reset) tests session-reset functionality.
21 ...               Resets the session, and than verifies that example-ipv4-topology is empty again.
22 ...
23 ...               TC_LA (test case local address) tests configuration of internal peer
24 ...               with local-address configured
25 ...               - configure peer with local-address and connect bgp-speaker to it
26 ...               with tools_system_ip
27 ...               - check filled topology
28 ...
29 ...               TC_PG (test case peer group) tests configuration and reconfiguration
30 ...               of peer-groups and neighbors configured by them.
31 ...               - configure peer-group, and assign neighbor to this peer-group
32 ...               - check filled topology
33 ...               - reconfigure peer-group without ipv4 unicast afi-safi
34 ...               - check empty topology
35 ...               - reconfigre neighbor without peer-group, delete peer-group
36 ...
37 ...               Brief description how to perform BGP functional test:
38 ...               https://wiki.opendaylight.org/view/BGP_LS_PCEP:Lithium_Feature_Tests#How_to_test_2
39 Suite Setup       Setup_Everything
40 Suite Teardown    Teardown_Everything
41 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
42 Test Teardown     FailFast.Start_Failing_Fast_If_This_Failed
43 Library           OperatingSystem
44 Library           SSHLibrary    timeout=10s
45 Library           RequestsLibrary
46 Resource          ../../../libraries/BGPcliKeywords.robot
47 Resource          ../../../libraries/BGPSpeaker.robot
48 Resource          ../../../libraries/CompareStream.robot
49 Resource          ../../../libraries/FailFast.robot
50 Resource          ../../../libraries/KarafKeywords.robot
51 Resource          ../../../libraries/KillPythonTool.robot
52 Resource          ../../../libraries/SetupUtils.robot
53 Resource          ../../../libraries/SSHKeywords.robot
54 Resource          ../../../libraries/TemplatedRequests.robot
55 Resource          ../../../variables/Variables.robot
56 Resource          ../../../libraries/WaitForFailure.robot
57
58 *** Variables ***
59 ${BGP_PEER_NAME}    example-bgp-peer
60 ${BGP_TOOL_LOG_LEVEL}    info
61 ${BGP_VARIABLES_FOLDER}    ${CURDIR}/../../../variables/bgpuser/
62 ${CONFIG_SESSION}    session
63 ${DEVICE_NAME}    controller-config
64 ${HOLDTIME}       180
65 ${ODL_BGP_LOG_LEVEL}    DEFAULT
66 ${ODL_LOG_LEVEL}    INFO
67 ${PEER_GROUP}     internal-neighbors
68 ${RIB_NAME}       example-bgp-rib
69 ${TOOLS_SYSTEM_PROMPT}    ${DEFAULT_LINUX_PROMPT}
70
71 *** Test Cases ***
72 Check_For_Empty_Topology_Before_Talking
73     [Documentation]    Sanity check example-ipv4-topology is up but empty.
74     [Tags]    critical
75     Wait_For_Topology_To_Change_To    empty_topology    timeout=180s
76
77 TC_LA_Reconfigure_Odl_To_Initiate_Connection
78     [Documentation]    Configure ibgp peer with local-address.
79     &{mapping}    Create Dictionary    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}    PASSIVE_MODE=false    BGP_RIB_OPENCONFIG=${RIB_NAME}
80     ...    LOCAL=${ODL_SYSTEM_IP}
81     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}ibgp_local_address    mapping=${mapping}    session=${CONFIG_SESSION}
82     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
83
84 TC_LA_Start_Bgp_Speaker_And_Verify_Connected
85     [Documentation]    Verify that peer is present in odl's rib under local-address ip.
86     [Tags]    critical
87     ${speaker_args}    BuiltIn.Set_Variable    --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --debug
88     ${output}    BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected    ${speaker_args}    session=${CONFIG_SESSION}    speaker_ip=${TOOLS_SYSTEM_IP}
89     BuiltIn.Log    ${output}
90
91 TC_LA_Kill_Bgp_Speaker
92     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
93     [Tags]    critical
94     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
95     BGPSpeaker.Kill_BGP_Speaker
96     FailFast.Do_Not_Fail_Fast_From_Now_On
97     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
98     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
99
100 TC_LA_Delete_Bgp_Peer_Configuration
101     [Documentation]    Delete peer configuration.
102     &{mapping}    Create Dictionary    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${RIB_NAME}
103     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}ibgp_local_address    mapping=${mapping}    session=${CONFIG_SESSION}
104
105 Reconfigure_ODL_To_Accept_Connection
106     [Documentation]    Configure BGP peer module with initiate-connection set to false.
107     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
108     ...    INITIATE=false    BGP_RIB=${RIB_NAME}    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${RIB_NAME}
109     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
110     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
111
112 Start_Talking_BGP_speaker
113     [Documentation]    Start Python speaker to connect to ODL, verify that the tool does not promptly exit.
114     # Myport value is needed for checking whether connection at precise port was established.
115     BGPSpeaker.Start_BGP_Speaker    --amount 3 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_TOOL_LOG_LEVEL}
116     Read_And_Fail_If_Prompt_Is_Seen
117
118 Check_Talking_Connection_Is_Established
119     [Documentation]    See TCP (BGP) connection in established state.
120     # This case is separate from the previous one, to resemble structure of the second half of this suite more closely.
121     Check_Speaker_Is_Connected
122
123 Check_Talking_Topology_Is_Filled
124     [Documentation]    See new routes in example-ipv4-topology as a proof that synchronization was correct.
125     [Tags]    critical
126     Wait_For_Topology_To_Change_To    filled_topology
127
128 TC_R_Reset_Bgp_Peer_Session
129     [Documentation]    Reset Peer Session
130     [Tags]    Critical
131     &{mapping}    Create Dictionary    IP=${TOOLS_SYSTEM_IP}    RIB_INSTANCE_NAME=${RIB_NAME}
132     TemplatedRequests.Post_As_Xml_Templated    folder=${BGP_VARIABLES_FOLDER}${/}peer_session/restart    mapping=${mapping}    session=${CONFIG_SESSION}
133
134 TC_R_Check_For_Empty_Topology_After_Resetting
135     [Documentation]    See example-ipv4-topology empty after resetting session
136     [Tags]    critical
137     Wait_For_Topology_To_Change_To    empty_topology
138
139 TC_PG_Reconfigure_ODL_With_Peer_Group_To_Accept_Connection
140     [Documentation]    Configure BGP peer module with initiate-connection set to false.
141     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${RIB_NAME}
142     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
143     Configure_Peer_Group
144     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
145     ...    PEER_GROUP_NAME=${PEER_GROUP}    INITIATE=false    BGP_RIB=${RIB_NAME}    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${RIB_NAME}
146     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group    mapping=${mapping}    session=${CONFIG_SESSION}
147     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
148
149 TC_PG_Restart_Talking_BGP_Speaker
150     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
151     [Tags]    critical
152     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
153     Restart_Talking_BGP_Speaker
154     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
155
156 TC_PG_Check_Talking_Topology_Is_Filled
157     [Documentation]    See new routes in example-ipv4-topology as a proof that synchronization was correct.
158     [Tags]    critical
159     Wait_For_Topology_To_Change_To    filled_topology
160
161 TC_PG_Reconfigure_ODL_With_Peer_Group_Without_Ipv4_Unicast
162     [Documentation]    Configure BGP peer module with initiate-connection set to false.
163     Configure_Peer_Group    peer_group_folder=peer_group_without_ipv4
164     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
165
166 TC_PG_Check_For_Empty_Topology_After_Deconfiguration
167     [Documentation]    See example-ipv4-topology empty after resetting session.
168     [Tags]    critical
169     Wait_For_Topology_To_Change_To    empty_topology
170
171 TC_PG_Reconfigure_ODL_To_Accept_Connection
172     [Documentation]    Configure BGP peer module with initiate-connection set to false.
173     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
174     ...    PEER_GROUP_NAME=${PEER_GROUP}    INITIATE=false    BGP_RIB=${RIB_NAME}    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${RIB_NAME}
175     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group    mapping=${mapping}    session=${CONFIG_SESSION}
176     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
177     Deconfigure_Peer_Group
178     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
179
180 Kill_Talking_BGP_Speaker
181     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
182     [Tags]    critical
183     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
184     BGPSpeaker.Kill_BGP_Speaker
185     FailFast.Do_Not_Fail_Fast_From_Now_On
186     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
187     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
188
189 Check_For_Empty_Topology_After_Talking
190     [Documentation]    See example-ipv4-topology empty again.
191     [Tags]    critical
192     Wait_For_Topology_To_Change_To    empty_topology
193
194 Start_Listening_BGP_Speaker
195     [Documentation]    Start Python speaker in listening mode, verify that the tool does not exit quickly.
196     BGPSpeaker.Start_BGP_Speaker    --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --${BGP_TOOL_LOG_LEVEL}
197     Read_And_Fail_If_Prompt_Is_Seen
198
199 Check_Listening_Connection_Is_Not_Established_Yet
200     [Documentation]    See no TCP connection, as both ODL and tool are in listening mode.
201     Check_Speaker_Is_Not_Connected
202
203 Check_For_Empty_Topology_Before_Listening
204     [Documentation]    Sanity check example-ipv4-topology is still empty.
205     [Tags]    critical
206     Verify_That_Topology_Does_Not_Change_From    empty_topology
207
208 Reconfigure_ODL_To_Initiate_Connection
209     [Documentation]    Replace BGP peer config module, now with initiate-connection set to true.
210     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
211     ...    INITIATE=true    BGP_RIB=${RIB_NAME}    PASSIVE_MODE=false    BGP_RIB_OPENCONFIG=${RIB_NAME}
212     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
213
214 Check_Listening_Connection_Is_Established
215     [Documentation]    See TCP (BGP) connection in established state.
216     Check_Speaker_Is_Connected
217
218 Check_Listening_Topology_Is_Filled
219     [Documentation]    See new routes in example-ipv4-topology as a proof that synchronization was correct.
220     [Tags]    critical
221     Wait_For_Topology_To_Change_To    filled_topology
222
223 Kill_Listening_BGP_Speaker
224     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
225     [Tags]    critical
226     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
227     BGPSpeaker.Kill_BGP_Speaker
228     FailFast.Do_Not_Fail_Fast_From_Now_On
229     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
230     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
231
232 Check_For_Empty_Topology_After_Listening
233     [Documentation]    Post-condition: Check example-ipv4-topology is empty again.
234     [Tags]    critical
235     Wait_For_Topology_To_Change_To    empty_topology
236
237 Start_Listening_BGP_Speaker_Case_2
238     [Documentation]    BGP Speaker introduces 2 prefixes in the first update & another 2 prefixes while the very first is withdrawn in 2nd update
239     BGPSpeaker.Start_BGP_Speaker    --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --prefill=2 --insert=2 --withdraw=1 --updates=single --firstprefix=8.0.0.240 --${BGP_TOOL_LOG_LEVEL}
240     Read_And_Fail_If_Prompt_Is_Seen
241
242 Check_Listening_Connection_Is_Established_Case_2
243     [Documentation]    See TCP (BGP) connection in established state.
244     Check_Speaker_Is_Connected
245
246 Check_Listening_Topology_Is_Filled_Case_2
247     [Documentation]    See new routes in example-ipv4-topology as a proof that synchronization was correct.
248     [Tags]    critical
249     Wait_For_Topology_To_Change_To    filled_topology
250
251 Kill_Listening_BGP_Speaker_Case_2
252     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
253     [Tags]    critical
254     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
255     BGPSpeaker.Kill_BGP_Speaker
256     FailFast.Do_Not_Fail_Fast_From_Now_On
257     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
258     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
259
260 Check_For_Empty_Topology_After_Listening_Case_2
261     [Documentation]    Post-condition: Check example-ipv4-topology is empty again.
262     [Tags]    critical
263     Wait_For_Topology_To_Change_To    empty_topology
264
265 Start_Listening_BGP_Speaker_Case_3
266     [Documentation]    BGP Speaker introduces 3 prefixes while the first one occures again in the withdrawn list (to be ignored by controller)
267     BGPSpeaker.Start_BGP_Speaker    --amount 2 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --prefill=0 --insert=3 --withdraw=1 --updates=single --${BGP_TOOL_LOG_LEVEL}
268     Read_And_Fail_If_Prompt_Is_Seen
269
270 Check_Listening_Connection_Is_Established_Case_3
271     [Documentation]    See TCP (BGP) connection in established state.
272     Check_Speaker_Is_Connected
273
274 Check_Listening_Topology_Is_Filled_Case_3
275     [Documentation]    See new routes in example-ipv4-topology as a proof that synchronization was correct.
276     [Tags]    critical
277     Wait_For_Topology_To_Change_To    filled_topology
278
279 Kill_Listening_BGP_Speaker_Case_3
280     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
281     [Tags]    critical
282     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
283     BGPSpeaker.Kill_BGP_Speaker
284     FailFast.Do_Not_Fail_Fast_From_Now_On
285     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
286     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
287
288 Check_For_Empty_Topology_After_Listening_Case_3
289     [Documentation]    Post-condition: Check example-ipv4-topology is empty again.
290     [Tags]    critical
291     Wait_For_Topology_To_Change_To    empty_topology
292
293 Delete_Bgp_Peer_Configuration
294     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
295     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${RIB_NAME}
296     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
297
298 *** Keywords ***
299 Setup_Everything
300     [Documentation]    Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
301     ...    put Python tool to mininet machine, setup imported resources.
302     SetupUtils.Setup_Utils_For_Setup_And_Teardown
303     SSHLibrary.Set_Default_Configuration    prompt=${TOOLS_SYSTEM_PROMPT}
304     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}
305     SSHKeywords.Flexible_Mininet_Login
306     SSHKeywords.Require_Python
307     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
308     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
309     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
310     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_LOG_LEVEL}
311     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
312     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol
313
314 Teardown_Everything
315     [Documentation]    Make sure Python tool was killed, delete all sessions, tear down imported Resources.
316     KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
317     RequestsLibrary.Delete_All_Sessions
318     SSHLibrary.Close_All_Connections
319
320 Wait_For_Topology_To_Change_To
321     [Arguments]    ${folder_name}    ${timeout}=10s    ${refresh}=1s
322     [Documentation]    Wait until Compare_Topology matches expected result.
323     BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    ${refresh}    Compare_Topology    ${folder_name}
324
325 Verify_That_Topology_Does_Not_Change_From
326     [Arguments]    ${folder_name}    ${timeout}=10s    ${refresh}=1s
327     [Documentation]    Verify that Compare_Topology keeps passing, it will hold its last result.
328     WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout    ${timeout}    ${refresh}    Compare_Topology    ${folder_name}
329
330 Compare_Topology
331     [Arguments]    ${folder_name}
332     [Documentation]    Get current example-ipv4-topology as json, and compare it to expected result.
333     TemplatedRequests.Get_As_Json_Templated    ${BGP_VARIABLES_FOLDER}${/}${folder_name}    session=${CONFIG_SESSION}    verify=True
334
335 Check_Speaker_Is_Not_Connected
336     [Documentation]    Give it a few tries to see zero established connections.
337     BuiltIn.Wait_Until_Keyword_Succeeds    3s    1s    Check_Number_Of_Speaker_Connections    0
338
339 Check_Speaker_Is_Connected
340     [Documentation]    Give it several tries to see exactly one established connection.
341     BuiltIn.Wait_Until_Keyword_Succeeds    5s    1s    Check_Number_Of_Speaker_Connections    1
342
343 Check_Number_Of_Speaker_Connections
344     [Arguments]    ${howmany}
345     [Documentation]    Run netstat in mininet machine and parse it for number of established connections. Check it is ${howmany}.
346     ${output}=    SSHKeywords.Count_Port_Occurences    17900    ESTABLISHED    python
347     BuiltIn.Should_Be_Equal_As_Strings    ${output}    ${howmany}
348
349 Configure_Peer_Group
350     [Arguments]    ${peer_group_folder}=peer_group
351     [Documentation]    Configures peer group which is template for all the neighbors which are going
352     ...    to be configured. Also after PUT, this case verifies presence of peer group within
353     ...    peer-groups.
354     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}    INITIATE=false    BGP_RIB=${RIB_NAME}
355     ...    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${RIB_NAME}    PEER_GROUP_NAME=${PEER_GROUP}    RR_CLIENT=false
356     ${verify_peer_group_folder}    CompareStream.Run_Keyword_If_At_Least_Else    sulfur    BuiltIn.Set Variable    verify_${peer_group_folder}.sulfur
357     ...    ELSE    BuiltIn.Set Variable    verify_${peer_group_folder}
358     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}${peer_group_folder}    mapping=${mapping}    session=${CONFIG_SESSION}
359     TemplatedRequests.Get_As_Json_Templated    ${BGP_VARIABLES_FOLDER}${/}${verify_peer_group_folder}    mapping=${mapping}    session=${CONFIG_SESSION}    verify=True
360
361 Deconfigure_Peer_Group
362     [Documentation]    Deconfigures peer group which is template for all the neighbors
363     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}    INITIATE=false    BGP_RIB=${RIB_NAME}
364     ...    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${RIB_NAME}    PEER_GROUP_NAME=${PEER_GROUP}    RR_CLIENT=false
365     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}peer_group    mapping=${mapping}    session=${CONFIG_SESSION}
366
367 Restart_Talking_BGP_Speaker
368     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast. And Start it again.
369     ...    We have to restart it this way because we reset session before
370     BGPSpeaker.Kill_BGP_Speaker
371     FailFast.Do_Not_Fail_Fast_From_Now_On
372     BGPSpeaker.Start_BGP_Speaker    --amount 3 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_TOOL_LOG_LEVEL}
373     Read_And_Fail_If_Prompt_Is_Seen