e35dae70a1d674c017b1696a61b5a33ebc296fed
[integration/test.git] / csit / suites / bgpcep / bgpuser / ibgp_peers_basic.robot
1 *** Settings ***
2 Documentation       Basic tests for iBGP peers.
3 ...
4 ...                 Copyright (c) 2015-2018 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 iBGP functional test cases for
11 ...                 BGP peers in different roles (iBGP, iBGP RR-client):
12 ...
13 ...                 Test Case 1: Two iBGP RR-client peers introduce prefixes
14 ...                 Expected result: controller forwards updates towards both peers
15 ...
16 ...                 Test Case 2: Two iBGP peers: one RR client and one non-client introduces prefixes
17 ...                 Expected result: controller forwards updates towards both peers
18 ...
19 ...                 Test Case 3: Two iBGP RR non-client peers introduce prefixes
20 ...                 Expected result: controller does not forward any update towards peers
21 ...
22 ...                 Test Case 4: Two iBGP(play.py) RR-client peers configured, first of them configured
23 ...                 with route-reflector-cluster-id, second inherits it's cluster-id from global config.
24 ...                 Each of them introduces 3 prefixes.
25 ...                 Expected result: controller forwards updates towards both peers and each of their
26 ...                 adj-rib-in contains routes. First peer should contain default cluster-id and
27 ...                 second cluster-id from first peers configuration.
28 ...
29 ...                 For polices see: https://wiki.opendaylight.org/view/BGP_LS_PCEP:BGP
30
31 Library             OperatingSystem
32 Library             RequestsLibrary
33 Library             DateTime
34 Resource            ../../../variables/Variables.robot
35 Resource            ../../../libraries/BGPcliKeywords.robot
36 Resource            ../../../libraries/BgpOperations.robot
37 Resource            ../../../libraries/FailFast.robot
38 Resource            ../../../libraries/SetupUtils.robot
39 Resource            ../../../libraries/SSHKeywords.robot
40 Resource            ../../../libraries/TemplatedRequests.robot
41 Resource            ../../../libraries/CompareStream.robot
42
43 Suite Setup         Setup_Everything
44 Suite Teardown      BgpOperations.Teardown_Everything
45 Test Setup          SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
46 Test Teardown       FailFast.Start_Failing_Fast_If_This_Failed
47
48
49 *** Variables ***
50 ${BGP_VARIABLES_FOLDER}                 ${CURDIR}/../../../variables/bgpuser/
51 ${HOLDTIME}                             180
52 ${BGP_PEER_LOG_LEVEL}                   debug
53 ${ODL_LOG_LEVEL}                        INFO
54 ${ODL_BGP_LOG_LEVEL}                    DEFAULT
55 ${DEVICE_NAME}                          controller-config
56 ${BGP_PEER1_IP}                         127.0.0.1
57 ${BGP_PEER2_IP}                         127.0.0.2
58 ${BGP_PEER1_FIRST_PREFIX_IP}            8.1.0.0
59 ${BGP_PEER2_FIRST_PREFIX_IP}            8.2.0.0
60 ${PREFIX_LEN}                           28
61 ${BGP_PEER1_PREFIX_LEN}                 ${PREFIX_LEN}
62 ${BGP_PEER2_PREFIX_LEN}                 ${PREFIX_LEN}
63 ${PREFIX_COUNT}                         3
64 ${BGP_PEER1_PREFIX_COUNT}               ${PREFIX_COUNT}
65 ${BGP_PEER2_PREFIX_COUNT}               ${PREFIX_COUNT}
66 ${BGP_PEER1_LOG_FILE}                   bgp_peer1.log
67 ${BGP_PEER2_LOG_FILE}                   bgp_peer2.log
68 ${BGP_PEER1_COMMAND}
69 ...                                     python3 play.py --firstprefix ${BGP_PEER1_FIRST_PREFIX_IP} --prefixlen ${BGP_PEER1_PREFIX_LEN} --amount ${BGP_PEER1_PREFIX_COUNT} --myip=${BGP_PEER1_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL} --logfile ${BGP_PEER1_LOG_FILE}
70 ${BGP_PEER2_COMMAND}
71 ...                                     python3 play.py --firstprefix ${BGP_PEER2_FIRST_PREFIX_IP} --prefixlen ${BGP_PEER2_PREFIX_LEN} --amount ${BGP_PEER2_PREFIX_COUNT} --myip=${BGP_PEER2_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL} --logfile ${BGP_PEER2_LOG_FILE}
72 ${BGP_PEER1_OPTIONS}                    &>${BGP_PEER1_LOG_FILE}
73 ${BGP_PEER2_OPTIONS}                    &>${BGP_PEER2_LOG_FILE}
74 ${DEFAULT_LOG_CHECK_TIMEOUT}            20s
75 ${DEFAULT_LOG_CHECK_PERIOD}             1s
76 ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}       10s
77 ${DEFAULT_TOPOLOGY_CHECK_PERIOD}        1s
78 ${CONFIG_SESSION}                       session
79 ${RIB_INSTANCE}                         example-bgp-rib
80 ${PROTOCOL_OPENCONFIG}                  ${RIB_INSTANCE}
81
82
83 *** Test Cases ***
84 TC1_Configure_Two_iBGP_Route_Reflector_Client_Peers
85     [Documentation]    Configure two iBGP peers as routing reflector clients.
86     [Tags]    critical
87     &{mapping}    BuiltIn.Create_Dictionary
88     ...    DEVICE_NAME=${DEVICE_NAME}
89     ...    NAME=example-bgp-peer1
90     ...    IP=${BGP_PEER1_IP}
91     ...    HOLDTIME=${HOLDTIME}
92     ...    PEER_PORT=${BGP_TOOL_PORT}
93     ...    PEER_ROLE=rr-client
94     ...    INITIATE=false
95     ...    BGP_RIB=${RIB_INSTANCE}
96     ...    PASSIVE_MODE=true
97     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
98     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
99     ...    RR_CLIENT=true
100     TemplatedRequests.Put_As_Xml_Templated
101     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
102     ...    mapping=${mapping}
103     ...    session=${CONFIG_SESSION}
104     &{mapping}    BuiltIn.Create_Dictionary
105     ...    DEVICE_NAME=${DEVICE_NAME}
106     ...    NAME=example-bgp-peer2
107     ...    IP=${BGP_PEER2_IP}
108     ...    HOLDTIME=${HOLDTIME}
109     ...    PEER_PORT=${BGP_TOOL_PORT}
110     ...    PEER_ROLE=rr-client
111     ...    INITIATE=false
112     ...    BGP_RIB=${RIB_INSTANCE}
113     ...    PASSIVE_MODE=true
114     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
115     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
116     ...    RR_CLIENT=true
117     TemplatedRequests.Put_As_Xml_Templated
118     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
119     ...    mapping=${mapping}
120     ...    session=${CONFIG_SESSION}
121
122 TC1_Connect_BGP_Peer1
123     [Documentation]    Connect BGP peer
124     [Tags]    critical
125     SSHLibrary.Switch Connection    bgp_peer1_console
126     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER1_COMMAND}    ${BGP_PEER1_OPTIONS}
127     BuiltIn.Wait_Until_Keyword_Succeeds
128     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
129     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
130     ...    BgpOperations.Check_Example_IPv4_Topology_Content
131     ...    ${CONFIG_SESSION}
132     ...    {"prefix":"${BGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
133
134 TC1_Connect_BGP_Peer2
135     [Documentation]    Connect BGP peer
136     [Tags]    critical
137     SSHLibrary.Switch Connection    bgp_peer2_console
138     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER2_COMMAND}    ${BGP_PEER2_OPTIONS}
139     BuiltIn.Wait_Until_Keyword_Succeeds
140     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
141     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
142     ...    BgpOperations.Check_Example_IPv4_Topology_Content
143     ...    ${CONFIG_SESSION}
144     ...    {"prefix":"${BGP_PEER2_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
145
146 TC1_BGP_Peer1_Check_Log_For_Introduced_Prefixes
147     [Documentation]    Check incomming updates for new routes
148     [Tags]    critical
149     SSHLibrary.Switch Connection    bgp_peer1_console
150     BuiltIn.Wait_Until_Keyword_Succeeds
151     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
152     ...    ${DEFAULT_LOG_CHECK_PERIOD}
153     ...    BGPCliKeywords.Check_File_For_Word_Count
154     ...    ${BGP_PEER1_LOG_FILE}
155     ...    nlri_prefix_received:
156     ...    ${BGP_PEER2_PREFIX_COUNT}
157     BGPCliKeywords.Check_File_For_Word_Count
158     ...    ${BGP_PEER1_LOG_FILE}
159     ...    nlri_prefix_received: ${BGP_PEER2_FIRST_PREFIX_IP}/${BGP_PEER2_PREFIX_LEN}
160     ...    1
161     BGPCliKeywords.Check_File_For_Word_Count    ${BGP_PEER1_LOG_FILE}    withdrawn_prefix_received:    0
162
163 TC1_BGP_Peer2_Check_Log_For_Introduced_Prefixes
164     [Documentation]    Check incomming updates for new routes
165     [Tags]    critical
166     SSHLibrary.Switch Connection    bgp_peer2_console
167     BuiltIn.Wait_Until_Keyword_Succeeds
168     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
169     ...    ${DEFAULT_LOG_CHECK_PERIOD}
170     ...    BGPCliKeywords.Check_File_For_Word_Count
171     ...    ${BGP_PEER2_LOG_FILE}
172     ...    nlri_prefix_received:
173     ...    ${BGP_PEER1_PREFIX_COUNT}
174     BGPCliKeywords.Check_File_For_Word_Count
175     ...    ${BGP_PEER2_LOG_FILE}
176     ...    nlri_prefix_received: ${BGP_PEER1_FIRST_PREFIX_IP}/${BGP_PEER1_PREFIX_LEN}
177     ...    1
178     BGPCliKeywords.Check_File_For_Word_Count    ${BGP_PEER2_LOG_FILE}    withdrawn_prefix_received:    0
179
180 TC1_Disconnect_BGP_Peer1
181     [Documentation]    Stop BGP peer & store logs
182     [Tags]    critical
183     SSHLibrary.Switch Connection    bgp_peer1_console
184     BGPCliKeywords.Stop_Console_Tool
185     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER1_LOG_FILE}    tc1_${BGP_PEER1_LOG_FILE}
186
187 TC1_BGP_Peer2_Check_Log_For_Withdrawn_Prefixes
188     [Documentation]    Check incomming updates for withdrawn routes
189     [Tags]    critical
190     SSHLibrary.Switch Connection    bgp_peer2_console
191     BuiltIn.Wait_Until_Keyword_Succeeds
192     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
193     ...    ${DEFAULT_LOG_CHECK_PERIOD}
194     ...    BGPCliKeywords.Check_File_For_Word_Count
195     ...    ${BGP_PEER2_LOG_FILE}
196     ...    withdrawn_prefix_received:
197     ...    ${BGP_PEER1_PREFIX_COUNT}
198     BGPCliKeywords.Check_File_For_Word_Count
199     ...    ${BGP_PEER2_LOG_FILE}
200     ...    withdrawn_prefix_received: ${BGP_PEER1_FIRST_PREFIX_IP}/${BGP_PEER1_PREFIX_LEN}
201     ...    1
202
203 TC1_Disconnect_BGP_Peer2
204     [Documentation]    Stop BGP peer & store logs
205     [Tags]    critical
206     SSHLibrary.Switch Connection    bgp_peer2_console
207     BGPCliKeywords.Stop_Console_Tool
208     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER2_LOG_FILE}    tc1_${BGP_PEER2_LOG_FILE}
209
210 TC_1_Check_for_Empty_IPv4_Topology
211     BuiltIn.Wait_Until_Keyword_Succeeds
212     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
213     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
214     ...    BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain
215     ...    ${CONFIG_SESSION}
216     ...    prefix
217
218 TC1_Delete_BGP_Peers_Configuration
219     [Documentation]    Delete all previously configured BGP peers.
220     [Tags]    critical
221     &{mapping}    BuiltIn.Create_Dictionary
222     ...    DEVICE_NAME=${DEVICE_NAME}
223     ...    NAME=example-bgp-peer1
224     ...    IP=${BGP_PEER1_IP}
225     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
226     TemplatedRequests.Delete_Templated
227     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
228     ...    mapping=${mapping}
229     ...    session=${CONFIG_SESSION}
230     &{mapping}    BuiltIn.Create_Dictionary
231     ...    DEVICE_NAME=${DEVICE_NAME}
232     ...    NAME=example-bgp-peer2
233     ...    IP=${BGP_PEER2_IP}
234     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
235     TemplatedRequests.Delete_Templated
236     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
237     ...    mapping=${mapping}
238     ...    session=${CONFIG_SESSION}
239
240 TC2_Configure_One_iBGP_Route_Reflector_Client_And_One_iBGP_Non_Client
241     [Documentation]    Configure iBGP peers: 1st one as RR client, 2nd one as RR non-client.
242     [Tags]    critical
243     &{mapping}    BuiltIn.Create_Dictionary
244     ...    DEVICE_NAME=${DEVICE_NAME}
245     ...    NAME=example-bgp-peer1
246     ...    IP=${BGP_PEER1_IP}
247     ...    HOLDTIME=${HOLDTIME}
248     ...    PEER_PORT=${BGP_TOOL_PORT}
249     ...    PEER_ROLE=rr-client
250     ...    INITIATE=false
251     ...    BGP_RIB=${RIB_INSTANCE}
252     ...    PASSIVE_MODE=true
253     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
254     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
255     ...    RR_CLIENT=true
256     TemplatedRequests.Put_As_Xml_Templated
257     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
258     ...    mapping=${mapping}
259     ...    session=${CONFIG_SESSION}
260     &{mapping}    BuiltIn.Create_Dictionary
261     ...    DEVICE_NAME=${DEVICE_NAME}
262     ...    NAME=example-bgp-peer2
263     ...    IP=${BGP_PEER2_IP}
264     ...    HOLDTIME=${HOLDTIME}
265     ...    PEER_PORT=${BGP_TOOL_PORT}
266     ...    PEER_ROLE=ibgp
267     ...    INITIATE=false
268     ...    BGP_RIB=${RIB_INSTANCE}
269     ...    PASSIVE_MODE=true
270     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
271     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
272     ...    RR_CLIENT=false
273     TemplatedRequests.Put_As_Xml_Templated
274     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
275     ...    mapping=${mapping}
276     ...    session=${CONFIG_SESSION}
277
278 TC2_Connect_BGP_Peer1
279     [Documentation]    Connect BGP peer
280     [Tags]    critical
281     SSHLibrary.Switch Connection    bgp_peer1_console
282     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER1_COMMAND}    ${BGP_PEER1_OPTIONS}
283     BuiltIn.Wait_Until_Keyword_Succeeds
284     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
285     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
286     ...    BgpOperations.Check_Example_IPv4_Topology_Content
287     ...    ${CONFIG_SESSION}
288     ...    {"prefix":"${BGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
289
290 TC2_Connect_BGP_Peer2
291     [Documentation]    Connect BGP peer
292     [Tags]    critical
293     SSHLibrary.Switch Connection    bgp_peer2_console
294     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER2_COMMAND}    ${BGP_PEER2_OPTIONS}
295     BuiltIn.Wait_Until_Keyword_Succeeds
296     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
297     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
298     ...    BgpOperations.Check_Example_IPv4_Topology_Content
299     ...    ${CONFIG_SESSION}
300     ...    {"prefix":"${BGP_PEER2_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
301
302 TC2_BGP_Peer1_Check_Log_For_Introduced_Prefixes
303     [Documentation]    Check incomming updates for new routes
304     [Tags]    critical
305     SSHLibrary.Switch Connection    bgp_peer1_console
306     BuiltIn.Wait_Until_Keyword_Succeeds
307     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
308     ...    ${DEFAULT_LOG_CHECK_PERIOD}
309     ...    BGPCliKeywords.Check_File_For_Word_Count
310     ...    ${BGP_PEER1_LOG_FILE}
311     ...    nlri_prefix_received:
312     ...    ${BGP_PEER2_PREFIX_COUNT}
313     BGPCliKeywords.Check_File_For_Word_Count
314     ...    ${BGP_PEER1_LOG_FILE}
315     ...    nlri_prefix_received: ${BGP_PEER2_FIRST_PREFIX_IP}/${BGP_PEER2_PREFIX_LEN}
316     ...    1
317     BGPCliKeywords.Check_File_For_Word_Count    ${BGP_PEER1_LOG_FILE}    withdrawn_prefix_received:    0
318
319 TC2_BGP_Peer2_Check_Log_For_Introduced_Prefixes
320     [Documentation]    Check incomming updates for new routes
321     [Tags]    critical
322     SSHLibrary.Switch Connection    bgp_peer2_console
323     BuiltIn.Wait_Until_Keyword_Succeeds
324     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
325     ...    ${DEFAULT_LOG_CHECK_PERIOD}
326     ...    BGPCliKeywords.Check_File_For_Word_Count
327     ...    ${BGP_PEER2_LOG_FILE}
328     ...    nlri_prefix_received:
329     ...    ${BGP_PEER1_PREFIX_COUNT}
330     BGPCliKeywords.Check_File_For_Word_Count
331     ...    ${BGP_PEER2_LOG_FILE}
332     ...    nlri_prefix_received: ${BGP_PEER1_FIRST_PREFIX_IP}/${BGP_PEER1_PREFIX_LEN}
333     ...    1
334     BGPCliKeywords.Check_File_For_Word_Count    ${BGP_PEER2_LOG_FILE}    withdrawn_prefix_received:    0
335
336 TC2_Disconnect_BGP_Peer1
337     [Documentation]    Stop BGP peer & store logs
338     [Tags]    critical
339     SSHLibrary.Switch Connection    bgp_peer1_console
340     BGPCliKeywords.Stop_Console_Tool
341     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER1_LOG_FILE}    tc2_${BGP_PEER1_LOG_FILE}
342
343 TC2_BGP_Peer2_Check_Log_For_Withdrawn_Prefixes
344     [Documentation]    Check incomming updates for withdrawn routes
345     [Tags]    critical
346     SSHLibrary.Switch Connection    bgp_peer2_console
347     BuiltIn.Wait_Until_Keyword_Succeeds
348     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
349     ...    ${DEFAULT_LOG_CHECK_PERIOD}
350     ...    BGPCliKeywords.Check_File_For_Word_Count
351     ...    ${BGP_PEER2_LOG_FILE}
352     ...    withdrawn_prefix_received:
353     ...    ${BGP_PEER1_PREFIX_COUNT}
354     BGPCliKeywords.Check_File_For_Word_Count
355     ...    ${BGP_PEER2_LOG_FILE}
356     ...    withdrawn_prefix_received: ${BGP_PEER1_FIRST_PREFIX_IP}/${BGP_PEER1_PREFIX_LEN}
357     ...    1
358
359 TC2_Disconnect_BGP_Peer2
360     [Documentation]    Stop BGP peer & store logs
361     [Tags]    critical
362     SSHLibrary.Switch Connection    bgp_peer2_console
363     BGPCliKeywords.Stop_Console_Tool
364     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER2_LOG_FILE}    tc2_${BGP_PEER2_LOG_FILE}
365
366 TC_2_Check_for_Empty_IPv4_Topology
367     BuiltIn.Wait_Until_Keyword_Succeeds
368     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
369     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
370     ...    BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain
371     ...    ${CONFIG_SESSION}
372     ...    prefix
373
374 TC2_Delete_BGP_Peers_Configuration
375     [Documentation]    Delete all previously configured BGP peers.
376     [Tags]    critical
377     &{mapping}    BuiltIn.Create_Dictionary
378     ...    DEVICE_NAME=${DEVICE_NAME}
379     ...    NAME=example-bgp-peer1
380     ...    IP=${BGP_PEER1_IP}
381     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
382     TemplatedRequests.Delete_Templated
383     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
384     ...    mapping=${mapping}
385     ...    session=${CONFIG_SESSION}
386     &{mapping}    BuiltIn.Create_Dictionary
387     ...    DEVICE_NAME=${DEVICE_NAME}
388     ...    NAME=example-bgp-peer2
389     ...    IP=${BGP_PEER2_IP}
390     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
391     TemplatedRequests.Delete_Templated
392     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
393     ...    mapping=${mapping}
394     ...    session=${CONFIG_SESSION}
395
396 TC3_Configure_Two_iBGP_Non_Client_Peers
397     [Documentation]    Configure iBGP peers: 1st one as RR client, 2nd one as RR non-client.
398     [Tags]    critical
399     &{mapping}    BuiltIn.Create_Dictionary
400     ...    DEVICE_NAME=${DEVICE_NAME}
401     ...    NAME=example-bgp-peer1
402     ...    IP=${BGP_PEER1_IP}
403     ...    HOLDTIME=${HOLDTIME}
404     ...    PEER_PORT=${BGP_TOOL_PORT}
405     ...    PEER_ROLE=ibgp
406     ...    INITIATE=false
407     ...    BGP_RIB=${RIB_INSTANCE}
408     ...    PASSIVE_MODE=true
409     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
410     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
411     ...    RR_CLIENT=false
412     TemplatedRequests.Put_As_Xml_Templated
413     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
414     ...    mapping=${mapping}
415     ...    session=${CONFIG_SESSION}
416     &{mapping}    BuiltIn.Create_Dictionary
417     ...    DEVICE_NAME=${DEVICE_NAME}
418     ...    NAME=example-bgp-peer2
419     ...    IP=${BGP_PEER2_IP}
420     ...    HOLDTIME=${HOLDTIME}
421     ...    PEER_PORT=${BGP_TOOL_PORT}
422     ...    PEER_ROLE=ibgp
423     ...    INITIATE=false
424     ...    BGP_RIB=${RIB_INSTANCE}
425     ...    PASSIVE_MODE=true
426     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
427     ...    RIB_INSTANCE_NAME=${RIB_INSTANCE}
428     ...    RR_CLIENT=false
429     TemplatedRequests.Put_As_Xml_Templated
430     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
431     ...    mapping=${mapping}
432     ...    session=${CONFIG_SESSION}
433
434 TC3_Connect_BGP_Peer1
435     [Documentation]    Connect BGP peer
436     [Tags]    critical
437     SSHLibrary.Switch Connection    bgp_peer1_console
438     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER1_COMMAND}    ${BGP_PEER1_OPTIONS}
439     BuiltIn.Wait_Until_Keyword_Succeeds
440     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
441     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
442     ...    BgpOperations.Check_Example_IPv4_Topology_Content
443     ...    ${CONFIG_SESSION}
444     ...    {"prefix":"${BGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
445
446 TC3_Connect_BGP_Peer2
447     [Documentation]    Connect BGP peer
448     [Tags]    critical
449     SSHLibrary.Switch Connection    bgp_peer2_console
450     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER2_COMMAND}    ${BGP_PEER2_OPTIONS}
451     BuiltIn.Wait_Until_Keyword_Succeeds
452     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
453     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
454     ...    BgpOperations.Check_Example_IPv4_Topology_Content
455     ...    ${CONFIG_SESSION}
456     ...    {"prefix":"${BGP_PEER2_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
457
458 TC3_BGP_Peer1_Check_Log_For_No_Updates
459     [Documentation]    Check for no updates received by iBGP peer No. 1
460     [Tags]    critical
461     SSHLibrary.Switch Connection    bgp_peer1_console
462     Comment    From neon onwards there is extra BGP End-Of-RIB message
463     ${update_messages}    CompareStream.Set_Variable_If_At_Most_Fluorine    0    1
464     BuiltIn.Wait_Until_Keyword_Succeeds
465     ...    ${DEFAULT_LOG_CHECK_TIMEOUT}
466     ...    ${DEFAULT_LOG_CHECK_PERIOD}
467     ...    BGPCliKeywords.Check_File_For_Word_Count
468     ...    ${BGP_PEER1_LOG_FILE}
469     ...    total_received_update_message_counter: ${update_messages}
470     ...    2
471
472 TC3_Disconnect_BGP_Peer1
473     [Documentation]    Stop BGP peer & store logs
474     [Tags]    critical
475     SSHLibrary.Switch Connection    bgp_peer1_console
476     BGPCliKeywords.Stop_Console_Tool
477     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER1_LOG_FILE}    tc3_${BGP_PEER1_LOG_FILE}
478
479 TC3_BGP_Peer2_Check_Log_For_No_Updates
480     [Documentation]    Consequent check for no updates received by iBGP peer No. 2
481     [Tags]    critical
482     SSHLibrary.Switch Connection    bgp_peer2_console
483     ${log_check_timeout}    DateTime.Convert_Time    ${DEFAULT_LOG_CHECK_TIMEOUT}    result_format=number
484     Comment    From neon onwards there is extra BGP End-Of-RIB message
485     ${update_messages}    CompareStream.Set_Variable_If_At_Most_Fluorine    0    1
486     BuiltIn.Wait_Until_Keyword_Succeeds
487     ...    ${log_check_timeout*2}
488     ...    ${DEFAULT_LOG_CHECK_PERIOD}
489     ...    BGPCliKeywords.Check_File_For_Word_Count
490     ...    ${BGP_PEER2_LOG_FILE}
491     ...    total_received_update_message_counter: ${update_messages}
492     ...    4
493
494 TC3_Disconnect_BGP_Peer2
495     [Documentation]    Stop BGP peer & store logs
496     [Tags]    critical
497     SSHLibrary.Switch Connection    bgp_peer2_console
498     BGPCliKeywords.Stop_Console_Tool
499     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER2_LOG_FILE}    tc3_${BGP_PEER2_LOG_FILE}
500
501 TC_3_Check_for_Empty_IPv4_Topology
502     BuiltIn.Wait_Until_Keyword_Succeeds
503     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
504     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
505     ...    BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain
506     ...    ${CONFIG_SESSION}
507     ...    prefix
508
509 TC3_Delete_BGP_Peers_Configuration
510     [Documentation]    Delete all previously configured BGP peers.
511     [Tags]    critical
512     &{mapping}    BuiltIn.Create_Dictionary
513     ...    DEVICE_NAME=${DEVICE_NAME}
514     ...    NAME=example-bgp-peer1
515     ...    IP=${BGP_PEER1_IP}
516     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
517     TemplatedRequests.Delete_Templated
518     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
519     ...    mapping=${mapping}
520     ...    session=${CONFIG_SESSION}
521     &{mapping}    BuiltIn.Create_Dictionary
522     ...    DEVICE_NAME=${DEVICE_NAME}
523     ...    NAME=example-bgp-peer2
524     ...    IP=${BGP_PEER2_IP}
525     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
526     TemplatedRequests.Delete_Templated
527     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
528     ...    mapping=${mapping}
529     ...    session=${CONFIG_SESSION}
530
531 TC4_Configure_Two_iBGP_RR_Clients_With_Cluster_Id
532     [Documentation]    Configure two iBGP peers as routing reflector clients with cluster-id argument.
533     [Tags]    critical
534     &{mapping}    BuiltIn.Create_Dictionary
535     ...    IP=${BGP_PEER1_IP}
536     ...    HOLDTIME=${HOLDTIME}
537     ...    PEER_PORT=${BGP_TOOL_PORT}
538     ...    PASSIVE_MODE=true
539     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
540     ...    RR_CLIENT=true
541     TemplatedRequests.Put_As_Xml_Templated
542     ...    ${BGP_VARIABLES_FOLDER}${/}cluster_id/ibgp_peer
543     ...    mapping=${mapping}
544     ...    session=${CONFIG_SESSION}
545     &{mapping}    BuiltIn.Create_Dictionary
546     ...    IP=${BGP_PEER2_IP}
547     ...    HOLDTIME=${HOLDTIME}
548     ...    PEER_PORT=${BGP_TOOL_PORT}
549     ...    PASSIVE_MODE=true
550     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
551     ...    RR_CLIENT=true
552     TemplatedRequests.Put_As_Xml_Templated
553     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
554     ...    mapping=${mapping}
555     ...    session=${CONFIG_SESSION}
556
557 TC4_Connect_BGP_Peers
558     [Documentation]    Connect BGP peers, each set to send 3 prefixes.
559     [Tags]    critical
560     SSHLibrary.Switch Connection    bgp_peer1_console
561     BuiltIn.Set_Suite_Variable    ${peer1_cluster_id}    127.0.0.4
562     BuiltIn.Set_Suite_Variable    ${default_cluster_id}    192.0.2.2
563     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER1_COMMAND} --cluster=${peer1_cluster_id}    ${BGP_PEER1_OPTIONS}
564     BuiltIn.Wait_Until_Keyword_Succeeds
565     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
566     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
567     ...    BgpOperations.Check_Example_IPv4_Topology_Content
568     ...    ${CONFIG_SESSION}
569     ...    {"prefix":"${BGP_PEER1_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
570     SSHLibrary.Switch Connection    bgp_peer2_console
571     BGPCliKeywords.Start_Console_Tool    ${BGP_PEER2_COMMAND} --cluster=${BGP_PEER2_IP}    ${BGP_PEER2_OPTIONS}
572     BuiltIn.Wait_Until_Keyword_Succeeds
573     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
574     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
575     ...    BgpOperations.Check_Example_IPv4_Topology_Content
576     ...    ${CONFIG_SESSION}
577     ...    {"prefix":"${BGP_PEER2_FIRST_PREFIX_IP}/${PREFIX_LEN}"}
578
579 TC4_BGP_Peer1_Check_Rib_Out_For_Introduced_Prefixes
580     [Documentation]    Check incomming updates for new routes and respective cluster-ids
581     ...    on first peer which should contain default-cluster id from global config reflected
582     ...    from the second peer equal to router-id.
583     [Tags]    critical
584     &{mapping}    BuiltIn.Create_Dictionary
585     ...    IP=${BGP_PEER1_IP}
586     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
587     ...    PEER_NUMBER=2
588     ...    CLUSTER_ID=${BGP_PEER2_IP}
589     ...    DEFAULT_ID=${default_cluster_id}
590     BuiltIn.Wait_Until_Keyword_Succeeds
591     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
592     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
593     ...    TemplatedRequests.Get_As_Json_Templated
594     ...    ${BGP_VARIABLES_FOLDER}${/}cluster_id/peer_rib_out
595     ...    mapping=${mapping}
596     ...    session=${CONFIG_SESSION}
597     ...    verify=True
598
599 TC4_BGP_Peer2_Check_Rib_Out_For_Introduced_Prefixes
600     [Documentation]    Check incomming updates for new routes and respective cluster-ids
601     ...    in second peer which has local route-reflector-cluster-id
602     [Tags]    critical
603     &{mapping}    BuiltIn.Create_Dictionary
604     ...    IP=${BGP_PEER2_IP}
605     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
606     ...    PEER_NUMBER=1
607     ...    CLUSTER_ID=${BGP_PEER1_IP}
608     ...    DEFAULT_ID=${peer1_cluster_id}
609     BuiltIn.Wait_Until_Keyword_Succeeds
610     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
611     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
612     ...    TemplatedRequests.Get_As_Json_Templated
613     ...    ${BGP_VARIABLES_FOLDER}${/}cluster_id/peer_rib_out
614     ...    mapping=${mapping}
615     ...    session=${CONFIG_SESSION}
616     ...    verify=True
617
618 TC4_Disconnect_BGP_Peers
619     [Documentation]    Stop BGP peer & store logs
620     [Tags]    critical
621     SSHLibrary.Switch Connection    bgp_peer1_console
622     BGPCliKeywords.Stop_Console_Tool
623     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER1_LOG_FILE}    tc4_${BGP_PEER1_LOG_FILE}
624     SSHLibrary.Switch Connection    bgp_peer2_console
625     BGPCliKeywords.Stop_Console_Tool
626     BGPCliKeywords.Store_File_To_Workspace    ${BGP_PEER2_LOG_FILE}    tc4_${BGP_PEER2_LOG_FILE}
627
628 TC4_Check_for_Empty_IPv4_Topology
629     [Documentation]    Checks for empty topology after
630     BuiltIn.Wait_Until_Keyword_Succeeds
631     ...    ${DEFAULT_TOPOLOGY_CHECK_TIMEOUT}
632     ...    ${DEFAULT_TOPOLOGY_CHECK_PERIOD}
633     ...    BgpOperations.Check_Example_IPv4_Topology_Does_Not_Contain
634     ...    ${CONFIG_SESSION}
635     ...    prefix
636
637 TC4_Delete_BGP_Peers_Configuration
638     [Documentation]    Delete all previously configured BGP peers.
639     [Tags]    critical
640     &{mapping}    BuiltIn.Create_Dictionary    IP=${BGP_PEER1_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
641     TemplatedRequests.Delete_Templated
642     ...    ${BGP_VARIABLES_FOLDER}${/}cluster_id/ibgp_peer
643     ...    mapping=${mapping}
644     ...    session=${CONFIG_SESSION}
645     &{mapping}    BuiltIn.Create_Dictionary    IP=${BGP_PEER2_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
646     TemplatedRequests.Delete_Templated
647     ...    ${BGP_VARIABLES_FOLDER}${/}ibgp_peers
648     ...    mapping=${mapping}
649     ...    session=${CONFIG_SESSION}
650
651
652 *** Keywords ***
653 Setup_Everything
654     [Documentation]    Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
655     ...    prepare directories for responses, put Python tool to mininet machine, setup imported resources.
656     # TODO: Choose keywords used by more than one test suite to be placed in a common place.
657     SetupUtils.Setup_Utils_For_Setup_And_Teardown
658     SSHLibrary.Set_Default_Configuration    prompt=${ODL_SYSTEM_PROMPT}
659     SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    alias=bgp_peer1_console
660     SSHKeywords.Flexible_Controller_Login
661     SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    alias=bgp_peer2_console
662     SSHKeywords.Flexible_Controller_Login
663     SSHKeywords.Require_Python
664     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
665     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
666     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
667     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_LOG_LEVEL}
668     KarafKeywords.Execute_Controller_Karaf_Command_On_Background
669     ...    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
670     KarafKeywords.Execute_Controller_Karaf_Command_On_Background
671     ...    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol