b4c9cb8fe2c6ff58337325e969e3bb9a88945a69
[integration/test.git] / csit / suites / bgpcep / bgpuser / ebgp_peers_basic.robot
1 *** Settings ***
2 Documentation       Basic tests for eBGP application peers.
3 ...
4 ...                 Copyright (c) 2015-2016 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 eBGP functional tests:
11 ...                 Two eBGP peers advertise the same group of prefixes (aka BGP HA)
12 ...                 https://wiki.opendaylight.org/view/BGP_LS_PCEP:BGP
13 ...                 Reported bugs:
14 ...                 Bug 4834 - ODL controller announces the same route twice (two eBGP scenario aka HA)
15 ...                 Bug 4835 - Routes not withdrawn when eBGP peers are disconnected (the same prefixes announced)
16 ...
17 ...                 For versions Fluorine and above, there are test cases:
18 ...                 TC_LAS (test case local AS)
19 ...                 - configuration of ebgp with local-as and ibgp without local-as
20 ...                 - connect bgp speakers (play.py) to both peers and check their connection
21 ...                 - check adj-rib-out on both peers, expecting local-as in as-sequence on both peers.
22 ...
23 ...                 TODO: Extend testsuite by tests dedicated to path selection algorithm
24 ...                 TODO: Choose keywords used by more than one test suite to be placed in a common place.
25
26 Library             Collections
27 Library             OperatingSystem
28 Library             RequestsLibrary
29 Resource            ../../../libraries/BGPcliKeywords.robot
30 Resource            ../../../libraries/BgpOperations.robot
31 Resource            ../../../libraries/BGPSpeaker.robot
32 Resource            ../../../libraries/CompareStream.robot
33 Resource            ../../../libraries/FailFast.robot
34 Resource            ../../../libraries/SetupUtils.robot
35 Resource            ../../../libraries/SSHKeywords.robot
36 Resource            ../../../libraries/TemplatedRequests.robot
37 Resource            ../../../variables/Variables.robot
38
39 Suite Setup         Setup_Everything
40 Suite Teardown      BgpOperations.Teardown_Everything
41 Test Setup          SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
42 Test Teardown       FailFast.Start_Failing_Fast_If_This_Failed
43
44
45 *** Variables ***
46 ${BGP_VARIABLES_FOLDER}                 ${CURDIR}/../../../variables/bgpuser/
47 ${BGP_PEER_LOG_LEVEL}                   debug
48 ${CONFIG_SESSION}                       config-session
49 ${HOLDTIME}                             180
50 ${ODL_LOG_LEVEL}                        INFO
51 ${ODL_BGP_LOG_LEVEL}                    DEFAULT
52 ${iBGP_PEER1_IP}                        127.0.0.1
53 ${eBGP_PEER1_IP}                        127.0.0.3
54 ${eBGP_PEER2_IP}                        127.0.0.4
55 ${iBGP_PEER1_FIRST_PREFIX_IP}           8.1.0.0
56 ${eBGP_PEERS_FIRST_PREFIX_IP}           8.0.0.0
57 ${eBGP_PEER1_FIRST_PREFIX_IP}           ${eBGP_PEERS_FIRST_PREFIX_IP}
58 ${eBGP_PEER2_FIRST_PREFIX_IP}           ${eBGP_PEERS_FIRST_PREFIX_IP}
59 ${eBGP_PEER1_NEXT_HOP}                  1.1.1.1
60 ${eBGP_PEER2_NEXT_HOP}                  2.2.2.2
61 ${PREFIX_LEN}                           28
62 ${iBGP_PEER1_PREFIX_LEN}                ${PREFIX_LEN}
63 ${eBGP_PEER1_PREFIX_LEN}                ${PREFIX_LEN}
64 ${eBGP_PEER2_PREFIX_LEN}                ${PREFIX_LEN}
65 ${PREFIX_COUNT}                         2
66 ${iBGP_PEER1_PREFIX_COUNT}              0
67 ${eBGP_PEER1_PREFIX_COUNT}              ${PREFIX_COUNT}
68 ${eBGP_PEER2_PREFIX_COUNT}              ${PREFIX_COUNT}
69 ${eBGP_PEERS_AS}                        32768
70 ${eBGP_PEER1_AS}                        ${eBGP_PEERS_AS}
71 ${eBGP_PEER2_AS}                        ${eBGP_PEERS_AS}
72 ${iBGP_PEER1_LOG_FILE}                  bgp_peer1.log
73 ${eBGP_PEER1_LOG_FILE}                  ebgp_peer1.log
74 ${eBGP_PEER2_LOG_FILE}                  ebgp_peer2.log
75 ${iBGP_PEER1_COMMAND}
76 ...                                     python3 play.py --firstprefix ${iBGP_PEER1_FIRST_PREFIX_IP} --prefixlen ${iBGP_PEER1_PREFIX_LEN} --amount ${iBGP_PEER1_PREFIX_COUNT} --myip=${iBGP_PEER1_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL} --logfile ${iBGP_PEER1_LOG_FILE}
77 ${eBGP_PEER1_COMMAND}
78 ...                                     python3 play.py --firstprefix ${eBGP_PEER1_FIRST_PREFIX_IP} --prefixlen ${eBGP_PEER1_PREFIX_LEN} --amount ${eBGP_PEER1_PREFIX_COUNT} --myip=${eBGP_PEER1_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --nexthop ${eBGP_PEER1_NEXT_HOP} --asnumber ${eBGP_PEER1_AS} --${BGP_PEER_LOG_LEVEL} --logfile ${eBGP_PEER1_LOG_FILE}
79 ${eBGP_PEER2_COMMAND}
80 ...                                     python3 play.py --firstprefix ${eBGP_PEER2_FIRST_PREFIX_IP} --prefixlen ${eBGP_PEER2_PREFIX_LEN} --amount ${eBGP_PEER2_PREFIX_COUNT} --myip=${eBGP_PEER2_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --nexthop ${eBGP_PEER2_NEXT_HOP} --asnumber ${eBGP_PEER2_AS} --${BGP_PEER_LOG_LEVEL} --logfile ${eBGP_PEER2_LOG_FILE}
81 ${iBGP_PEER1_OPTIONS}                   &>${iBGP_PEER1_LOG_FILE}
82 ${eBGP_PEER1_OPTIONS}                   &>${eBGP_PEER1_LOG_FILE}
83 ${eBGP_PEER2_OPTIONS}                   &>${eBGP_PEER2_LOG_FILE}
84 ${DEFAULT_LOG_CHECK_TIMEOUT}            20s
85 ${DEFAULT_LOG_CHECK_PERIOD}             1s
86 ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}       10s
87 ${DEFAULT_TOPOLOGY_CHECK_PERIOD}        1s
88 ${RIB_INSTANCE}                         example-bgp-rib
89 ${PROTOCOL_OPENCONFIG}                  ${RIB_INSTANCE}
90 ${DEVICE_NAME}                          controller-config
91 ${DEFAULT_AS}                           64496
92 ${LOCAL_AS}                             65432
93 ${eBGP_AS}                              64497
94
95
96 *** Test Cases ***
97 Configure_BGP_Peers
98     [Documentation]    Configure an iBGP and two eBGP peers
99     [Tags]    critical
100     &{mapping}    BuiltIn.Create_Dictionary
101     ...    DEVICE_NAME=${DEVICE_NAME}
102     ...    NAME=example-ibgp-peer1
103     ...    IP=${iBGP_PEER1_IP}
104     ...    HOLDTIME=${HOLDTIME}
105     ...    PEER_PORT=${BGP_TOOL_PORT}
106     ...    PEER_ROLE=ibgp
107     ...    INITIATE=false
108     ...    BGP_RIB=${RIB_INSTANCE}
109     ...    PASSIVE_MODE=true
110     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
111     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
112     ...    RR_CLIENT=false
113     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers    mapping=${mapping}
114     &{mapping}    BuiltIn.Create_Dictionary
115     ...    DEVICE_NAME=${DEVICE_NAME}
116     ...    NAME=example-ebgp-peer1
117     ...    IP=${eBGP_PEER1_IP}
118     ...    HOLDTIME=${HOLDTIME}
119     ...    PEER_PORT=${BGP_TOOL_PORT}
120     ...    PEER_ROLE=ebgp
121     ...    INITIATE=false
122     ...    BGP_RIB=${RIB_INSTANCE}
123     ...    PASSIVE_MODE=true
124     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
125     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
126     ...    RR_CLIENT=false
127     ...    AS_NUMBER=${eBGP_PEER1_AS}
128     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}ebgp_peers    mapping=${mapping}
129     &{mapping}    BuiltIn.Create_Dictionary
130     ...    DEVICE_NAME=${DEVICE_NAME}
131     ...    NAME=example-ebgp-peer2
132     ...    IP=${eBGP_PEER2_IP}
133     ...    HOLDTIME=${HOLDTIME}
134     ...    PEER_PORT=${BGP_TOOL_PORT}
135     ...    PEER_ROLE=ebgp
136     ...    INITIATE=false
137     ...    BGP_RIB=${RIB_INSTANCE}
138     ...    PASSIVE_MODE=true
139     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
140     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
141     ...    RR_CLIENT=false
142     ...    AS_NUMBER=${eBGP_PEER2_AS}
143     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}ebgp_peers    mapping=${mapping}
144
145 Connect_iBGP_Peer1
146     [Documentation]    Connect BGP peer
147     [Tags]    critical
148     SSHLibrary.Switch Connection    ibgp_peer1_console
149     Start_Console_Tool    ${iBGP_PEER1_COMMAND}    ${iBGP_PEER1_OPTIONS}
150     Read_And_Fail_If_Prompt_Is_Seen
151     BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain    ${CONFIG_SESSION}    prefix
152
153 Connect_eBGP_Peer1
154     [Documentation]    Connect BGP peer
155     [Tags]    critical
156     SSHLibrary.Switch Connection    ebgp_peer1_console
157     Start_Console_Tool    ${eBGP_PEER1_COMMAND}    ${eBGP_PEER1_OPTIONS}
158     Read_And_Fail_If_Prompt_Is_Seen
159
160 Check_IPv4_Topology_For_First_Path
161     [Documentation]    The IPv4 topology shall contain the route announced by the first eBGP
162     BuiltIn.Wait_Until_Keyword_Succeeds
163     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
164     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
165     ...    BgpOperations.Check_Example_IPv4_Topology_Content
166     ...    ${CONFIG_SESSION}
167     ...    "node-id":"${eBGP_PEER1_NEXT_HOP}"
168     BgpOperations.Check_Example_IPv4_Topology_Content
169     ...    ${CONFIG_SESSION}
170     ...    "prefix":"${eBGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}"
171
172 iBGP_Check_Log_For_Introduced_Prefixes
173     [Documentation]    Check incomming updates for introduced routes
174     [Tags]    critical
175     SSHLibrary.Switch Connection    ibgp_peer1_console
176     ${total_prefix_count}    BuiltIn.Evaluate    ${eBGP_PEER1_PREFIX_COUNT}
177     BuiltIn.Wait_Until_Keyword_Succeeds
178     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
179     ...    ${DEFAULT_LOG_CHECK_PERIOD}
180     ...    Check_File_For_Word_Count
181     ...    ${iBGP_PEER1_LOG_FILE}
182     ...    nlri_prefix_received:
183     ...    ${total_prefix_count}
184     ${count}    Count_Key_Value_Pairs
185     ...    ${iBGP_PEER1_LOG_FILE}
186     ...    Network Address of Next Hop
187     ...    ${eBGP_PEER1_NEXT_HOP}
188     BuiltIn.Should_Be_Equal_As_Integers    ${count}    ${eBGP_PEER1_PREFIX_COUNT}
189     ${count}    Count_Key_Value_Pairs
190     ...    ${iBGP_PEER1_LOG_FILE}
191     ...    Network Address of Next Hop
192     ...    ${eBGP_PEER2_NEXT_HOP}
193     BuiltIn.Should_Be_Equal_As_Integers    ${count}    0
194
195 Connect_eBGP_Peer2
196     [Documentation]    Connect BGP peer and check empty topology
197     [Tags]    critical
198     SSHLibrary.Switch Connection    ebgp_peer2_console
199     Start_Console_Tool    ${eBGP_PEER2_COMMAND}    ${eBGP_PEER2_OPTIONS}
200     Read_And_Fail_If_Prompt_Is_Seen
201
202 Disconnect_eBGP_Peer1
203     [Documentation]    Stop BGP peer, log topology and store logs
204     [Tags]    critical
205     SSHLibrary.Switch Connection    ebgp_peer1_console
206     Stop_Console_Tool
207     Store_File_To_Workspace    ${eBGP_PEER1_LOG_FILE}    ${eBGP_PEER1_LOG_FILE}
208
209 Check_IPv4_Topology_For_Second_Path
210     [Documentation]    The IPv4 topology shall contain the route announced by the second eBGP now
211     BuiltIn.Wait_Until_Keyword_Succeeds
212     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
213     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
214     ...    BgpOperations.Check_Example_IPv4_Topology_Content
215     ...    ${CONFIG_SESSION}
216     ...    "node-id":"${eBGP_PEER2_NEXT_HOP}"
217     BgpOperations.Check_Example_IPv4_Topology_Content
218     ...    ${CONFIG_SESSION}
219     ...    "prefix":"${eBGP_PEER2_FIRST_PREFIX_IP}/${PREFIX_LEN}"
220
221 iBGP_Check_Log_For_Updated_Prefixes
222     [Documentation]    Check incomming updates for updated routes
223     [Tags]    critical
224     SSHLibrary.Switch Connection    ibgp_peer1_console
225     ${total_prefix_count}    BuiltIn.Evaluate    ${eBGP_PEER1_PREFIX_COUNT} + ${eBGP_PEER2_PREFIX_COUNT}
226     BuiltIn.Wait_Until_Keyword_Succeeds
227     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
228     ...    ${DEFAULT_LOG_CHECK_PERIOD}
229     ...    Check_File_For_Word_Count
230     ...    ${iBGP_PEER1_LOG_FILE}
231     ...    nlri_prefix_received:
232     ...    ${total_prefix_count}
233     ${count}    Count_Key_Value_Pairs
234     ...    ${iBGP_PEER1_LOG_FILE}
235     ...    Network Address of Next Hop
236     ...    ${eBGP_PEER1_NEXT_HOP}
237     BuiltIn.Should_Be_Equal_As_Integers    ${count}    ${eBGP_PEER1_PREFIX_COUNT}
238     ${count}    Count_Key_Value_Pairs
239     ...    ${iBGP_PEER1_LOG_FILE}
240     ...    Network Address of Next Hop
241     ...    ${eBGP_PEER2_NEXT_HOP}
242     BuiltIn.Should_Be_Equal_As_Integers    ${count}    ${eBGP_PEER2_PREFIX_COUNT}
243     [Teardown]    Report_Failure_Due_To_Bug    4834
244
245 Disconnect_eBGP_Peer2
246     [Documentation]    Stop BGP peer, store logs and wait for empty topology
247     [Tags]    critical
248     SSHLibrary.Switch Connection    ebgp_peer2_console
249     Stop_Console_Tool
250     Store_File_To_Workspace    ${eBGP_PEER2_LOG_FILE}    ${eBGP_PEER2_LOG_FILE}
251
252 Check_For_Empty_IPv4_Topology
253     [Documentation]    The IPv4 topology shall be empty
254     BuiltIn.Wait_Until_Keyword_Succeeds
255     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
256     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
257     ...    BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain
258     ...    ${CONFIG_SESSION}
259     ...    prefix
260     [Teardown]    Report_Failure_Due_To_Bug    4835
261
262 iBGP_Check_Log_For_Withdrawn_Prefixes
263     [Documentation]    Check incomming updates for withdrawn routes
264     [Tags]    critical
265     SSHLibrary.Switch Connection    ibgp_peer1_console
266     ${prefixes_to_be_removed}    BuiltIn.Evaluate    max(${eBGP_PEER1_PREFIX_COUNT}, ${eBGP_PEER2_PREFIX_COUNT})
267     BuiltIn.Wait_Until_Keyword_Succeeds
268     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
269     ...    ${DEFAULT_LOG_CHECK_PERIOD}
270     ...    Check_File_For_Word_Count
271     ...    ${iBGP_PEER1_LOG_FILE}
272     ...    withdrawn_prefix_received:
273     ...    ${prefixes_to_be_removed}
274     [Teardown]    Report_Failure_Due_To_Bug    4835
275
276 Disconnect_iBGP_Peer1
277     [Documentation]    Stop BGP peer, log topology and store logs
278     [Tags]    critical
279     SSHLibrary.Switch Connection    ibgp_peer1_console
280     Stop_Console_Tool
281     Store_File_To_Workspace    ${iBGP_PEER1_LOG_FILE}    ${iBGP_PEER1_LOG_FILE}
282
283 Delete_BGP_Peers_Configuration
284     [Documentation]    Delete all previously configured BGP peers.
285     [Tags]    critical
286     &{mapping}    BuiltIn.Create_Dictionary
287     ...    DEVICE_NAME=${DEVICE_NAME}
288     ...    NAME=example-ibgp-peer1
289     ...    IP=${iBGP_PEER1_IP}
290     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
291     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers    mapping=${mapping}
292     Collections.Set To Dictionary    ${mapping}    NAME=example-ebgp-peer1    IP=${eBGP_PEER1_IP}
293     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}ebgp_peers    mapping=${mapping}
294     Collections.Set To Dictionary    ${mapping}    NAME=example-ebgp-peer2    IP=${eBGP_PEER2_IP}
295     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}ebgp_peers    mapping=${mapping}
296
297 TC_LAS_Reconfigure_Odl_To_Accept_Connection
298     [Documentation]    Configure neighbors. One ibgp and one ebgp neighbor with local-as configured.
299     CompareStream.Run_Keyword_If_Less_Than_Fluorine
300     ...    BuiltIn.Pass_Execution
301     ...    Test case valid only for versions fluorine and above.
302     &{mapping}    Create Dictionary
303     ...    IP=${iBGP_PEER1_IP}
304     ...    HOLDTIME=${HOLDTIME}
305     ...    PEER_PORT=${BGP_TOOL_PORT}
306     ...    PASSIVE_MODE=true
307     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
308     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}
309     &{mapping}    Create Dictionary
310     ...    IP=${eBGP_PEER1_IP}
311     ...    HOLDTIME=${HOLDTIME}
312     ...    PEER_PORT=${BGP_TOOL_PORT}
313     ...    PASSIVE_MODE=true
314     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
315     ...    AS_NUMBER=${LOCAL_AS}
316     ...    PEER_AS=${eBGP_AS}
317     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}local_as/ebgp_peer    mapping=${mapping}
318     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
319
320 TC_LAS_Start_iBgp_Speaker_And_Verify_Connected
321     [Documentation]    Verify that peer is present in odl's rib. Peer is configured with local-as.
322     [Tags]    critical
323     CompareStream.Run_Keyword_If_Less_Than_Fluorine
324     ...    BuiltIn.Pass_Execution
325     ...    Test case valid only for versions fluorine and above.
326     SSHLibrary.Switch Connection    ibgp_peer1_console
327     ${speaker_args}    BuiltIn.Set_Variable
328     ...    --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
329     ${output}    BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected
330     ...    ${speaker_args}
331     ...    session=default
332     ...    speaker_ip=${iBGP_PEER1_IP}
333     BuiltIn.Log    ${output}
334
335 TC_LAS_Start_eBgp_Speaker_And_Verify_Connected
336     [Documentation]    Verify that peer is present in odl's rib. Peer is configured with local-as.
337     [Tags]    critical
338     CompareStream.Run_Keyword_If_Less_Than_Fluorine
339     ...    BuiltIn.Pass_Execution
340     ...    Test case valid only for versions fluorine and above.
341     SSHLibrary.Switch Connection    ebgp_peer1_console
342     ${speaker_args}    BuiltIn.Set_Variable
343     ...    --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
344     ${output}    BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected
345     ...    ${speaker_args}
346     ...    session=default
347     ...    speaker_ip=${eBGP_PEER1_IP}
348     BuiltIn.Log    ${output}
349
350 TC_LAS_Verify_iBGP_Rib_Out
351     [Documentation]    Verifies iBGP's adj-rib-out output. Expects local-as, and ebgp peer-as presence.
352     [Tags]    critical
353     CompareStream.Run_Keyword_If_Less_Than_Fluorine
354     ...    BuiltIn.Pass_Execution
355     ...    Test case valid only for versions fluorine and above.
356     &{mapping}    Create Dictionary
357     ...    IP=${iBGP_PEER1_IP}
358     ...    HOLDTIME=${HOLDTIME}
359     ...    PEER_PORT=${BGP_TOOL_PORT}
360     ...    PASSIVE_MODE=true
361     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
362     ...    AS_NUMBER=${LOCAL_AS}
363     ...    PEER_AS=${eBGP_AS}
364     ...    PREFIXLEN=${eBGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}
365     BuiltIn.Wait_Until_Keyword_Succeeds
366     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
367     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
368     ...    TemplatedRequests.Get_As_Json_Templated
369     ...    ${BGP_VARIABLES_FOLDER}${/}local_as/adj_rib_out
370     ...    mapping=${mapping}
371     ...    verify=True
372
373 TC_LAS_Verify_eBGP_Rib_Out
374     [Documentation]    Verifies eBGP's adj-rib-out output. Expects local-as, and ibgp peer-as presence.
375     [Tags]    critical
376     CompareStream.Run_Keyword_If_Less_Than_Fluorine
377     ...    BuiltIn.Pass_Execution
378     ...    Test case valid only for versions fluorine and above.
379     &{mapping}    Create Dictionary
380     ...    IP=${eBGP_PEER1_IP}
381     ...    HOLDTIME=${HOLDTIME}
382     ...    PEER_PORT=${BGP_TOOL_PORT}
383     ...    PASSIVE_MODE=true
384     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
385     ...    AS_NUMBER=${LOCAL_AS}
386     ...    PEER_AS=${DEFAULT_AS}
387     ...    PREFIXLEN=${iBGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}
388     BuiltIn.Wait_Until_Keyword_Succeeds
389     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
390     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
391     ...    TemplatedRequests.Get_As_Json_Templated
392     ...    ${BGP_VARIABLES_FOLDER}${/}local_as/adj_rib_out
393     ...    mapping=${mapping}
394     ...    verify=True
395
396 TC_LAS_Kill_iBgp_Speaker_After_Talking
397     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
398     [Tags]    critical
399     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
400     CompareStream.Run_Keyword_If_Less_Than_Fluorine
401     ...    BuiltIn.Pass_Execution
402     ...    Test case valid only for versions fluorine and above.
403     SSHLibrary.Switch Connection    ibgp_peer1_console
404     BGPSpeaker.Kill_BGP_Speaker
405     FailFast.Do_Not_Fail_Fast_From_Now_On
406     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
407     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
408
409 TC_LAS_Kill_eBgp_Speaker_After_Talking
410     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
411     [Tags]    critical
412     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
413     CompareStream.Run_Keyword_If_Less_Than_Fluorine
414     ...    BuiltIn.Pass_Execution
415     ...    Test case valid only for versions fluorine and above.
416     SSHLibrary.Switch Connection    ebgp_peer1_console
417     BGPSpeaker.Kill_BGP_Speaker
418     FailFast.Do_Not_Fail_Fast_From_Now_On
419     # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
420     [Teardown]    FailFast.Do_Not_Start_Failing_If_This_Failed
421
422 TC_LAS_Delete_Bgp_Peer_Configurations
423     [Documentation]    Delete peer configuration.
424     CompareStream.Run_Keyword_If_Less_Than_Fluorine
425     ...    BuiltIn.Pass_Execution
426     ...    Test case valid only for versions fluorine and above.
427     &{mapping}    Create Dictionary    IP=${iBGP_PEER1_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
428     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}
429     &{mapping}    Create Dictionary    IP=${eBGP_PEER1_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
430     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}local_as/ebgp_peer    mapping=${mapping}
431     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
432
433
434 *** Keywords ***
435 Setup_Everything
436     [Documentation]    Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
437     ...    prepare directories for responses, put Python tool to mininet machine, setup imported resources.
438     SetupUtils.Setup_Utils_For_Setup_And_Teardown
439     SSHLibrary.Set_Default_Configuration    prompt=${ODL_SYSTEM_PROMPT}
440     SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    alias=ibgp_peer1_console
441     SSHKeywords.Flexible_Controller_Login
442     SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    alias=ebgp_peer1_console
443     SSHKeywords.Flexible_Controller_Login
444     SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    alias=ebgp_peer2_console
445     SSHKeywords.Flexible_Controller_Login
446     SSHKeywords.Require_Python
447     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
448     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
449     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
450     TemplatedRequests.Create_Default_Session
451     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_LOG_LEVEL}
452     KarafKeywords.Execute_Controller_Karaf_Command_On_Background
453     ...    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
454     KarafKeywords.Execute_Controller_Karaf_Command_On_Background
455     ...    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol
456
457 Read_Text_Before_Prompt
458     [Documentation]    Log text gathered by SSHLibrary.Read_Until_Prompt.
459     ...    This needs to be a separate keyword just because how Read_And_Fail_If_Prompt_Is_Seen is implemented.
460     ${text}    SSHLibrary.Read_Until_Prompt
461     BuiltIn.Log    ${text}
462
463 Store_File_To_Workspace
464     [Documentation]    Store the ${source_file_name} to the workspace as ${target_file_name}.
465     [Arguments]    ${source_file_name}    ${target_file_name}
466     ${output_log}    SSHLibrary.Execute_Command    cat ${source_file_name}
467     BuiltIn.Log    ${output_log}
468     Create File    ${target_file_name}    ${output_log}