Update Robot Framework format - step 1
[integration/test.git] / csit / libraries / BgpOperations.robot
1 *** Settings ***
2 Documentation       This library contains keywords related to the BGP functionality.
3
4 Library             SSHLibrary
5 Library             String
6 Library             BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
7 Resource            ../variables/Variables.robot
8 Resource            CompareStream.robot
9 Resource            Utils.robot
10 Resource            KillPythonTool.robot
11 Resource            TemplatedRequests.robot
12
13
14 *** Variables ***
15 ${BGP_BMP_DIR}              ${CURDIR}/../variables/bgpfunctional/bmp_basic/filled_structure
16 ${BGP_BMP_FEAT_DIR}         ${CURDIR}/../variables/bgpfunctional/bmp_basic/empty_structure
17 ${BGP_RIB_URI}              bgp-rib:bgp-rib/rib=example-bgp-rib
18 ${BGP_TOPOLOGY_URI}         ${TOPOLOGY_URL}=example-ipv4-topology
19 ${VAR_BASE_BGP}             ${CURDIR}/../variables/bgpfunctional
20 ${RIB_NAME}                 example-bgp-rib
21 ${OLD_AS_PATH}              \n"as-path": {},
22 ${NEW_AS_PATH}              ${EMPTY}
23 &{APP_PEER}                 IP=${ODL_SYSTEM_IP}    BGP_RIB=${RIB_NAME}
24 ${NEW_IPV4_ROUTES_LINE}     ${EMPTY}
25 ${OLD_IPV4_ROUTES_LINE}     \n"bgp-inet:ipv4-routes": {},
26 ${BGP_CONFIG_SERVER_CMD}    bgp-connect -h ${ODL_SYSTEM_IP} -p 7644 add
27 ${VPNV4_ADDR_FAMILY}        vpnv4
28 ${DISPLAY_VPN4_ALL}         show-bgp --cmd "ip bgp ${VPNV4_ADDR_FAMILY} all"
29
30
31 *** Keywords ***
32 Start Quagga Processes On ODL
33     [Documentation]    To start the zrpcd processes on ODL VM
34     [Arguments]    ${odl_ip}
35     ${conn_id} =    Open_Connection_To_ODL_System    ip_address=${odl_ip}
36     Switch Connection    ${conn_id}
37     Write Commands Until Expected Prompt    cd /opt/quagga/etc/    ${DEFAULT_LINUX_PROMPT_STRICT}
38     Write Commands Until Expected Prompt    sudo cp zebra.conf.sample zebra.conf    ${DEFAULT_LINUX_PROMPT_STRICT}
39     Write Commands Until Expected Prompt    sudo /opt/quagga/etc/init.d/zrpcd start    ${DEFAULT_LINUX_PROMPT_STRICT}
40     Write Commands Until Expected Prompt    ps -ef | grep zrpcd    ${DEFAULT_LINUX_PROMPT_STRICT}
41     Write Commands Until Expected Prompt    netstat -nap | grep 7644    ${DEFAULT_LINUX_PROMPT_STRICT}
42     Close Connection
43
44 Restart BGP Processes On ODL
45     [Documentation]    To restart the bgpd , qthriftd processes on ODL VM
46     [Arguments]    ${odl_ip}
47     ${conn_id} =    Open_Connection_To_ODL_System    ip_address=${odl_ip}
48     Switch Connection    ${conn_id}
49     Write Commands Until Expected Prompt    sudo pkill -f bgpd    ${DEFAULT_LINUX_PROMPT_STRICT}
50     Start Quagga Processes On ODL    ${odl_ip}
51
52 Start Quagga Processes On DCGW
53     [Documentation]    To start the zrpcd, bgpd,and zebra processes on DCGW
54     [Arguments]    ${dcgw_ip}
55     ${dcgw_conn_id} =    Open_Connection_To_Tools_System    ip_address=${dcgw_ip}
56     Switch Connection    ${dcgw_conn_id}
57     Write Commands Until Expected Prompt    cd /opt/quagga/etc/    ${DEFAULT_LINUX_PROMPT_STRICT}
58     Write Commands Until Expected Prompt    sudo cp zebra.conf.sample zebra.conf    ${DEFAULT_LINUX_PROMPT_STRICT}
59     Write Commands Until Expected Prompt    sudo /opt/quagga/etc/init.d/zrpcd start    ${DEFAULT_LINUX_PROMPT_STRICT}
60     Write Commands Until Expected Prompt    ps -ef | grep zrpcd    ${DEFAULT_LINUX_PROMPT_STRICT}
61     Write Commands Until Expected Prompt    cd /opt/quagga/sbin/    ${DEFAULT_LINUX_PROMPT_STRICT}
62     ${output} =    Write    sudo ./bgpd &
63     ${output} =    Read Until    pid
64     Log    ${output}
65     ${output} =    Write    sudo ./zebra &
66     ${output} =    Read
67     Log    ${output}
68     Write Commands Until Expected Prompt    ps -ef | grep bgpd    ${DEFAULT_LINUX_PROMPT_STRICT}
69     Write Commands Until Expected Prompt    ps -ef | grep zebra    ${DEFAULT_LINUX_PROMPT_STRICT}
70     Write Commands Until Expected Prompt    netstat -nap | grep 7644    ${DEFAULT_LINUX_PROMPT_STRICT}
71
72 Restart BGP Processes On DCGW
73     [Documentation]    To Restart the zrpcd, bgpd and zebra processes on DCGW
74     [Arguments]    ${dcgw_ip}
75     ${dcgw_conn_id} =    Open_Connection_To_Tools_System    ip_address=${dcgw_ip}
76     Switch Connection    ${dcgw_conn_id}
77     Write Commands Until Expected Prompt    sudo pkill -f bgpd    ${DEFAULT_LINUX_PROMPT_STRICT}
78     Start Quagga Processes On DCGW    ${dcgw_ip}
79
80 Stop BGP Processes On Node
81     [Documentation]    To stop the bgpd , qthriftd processes on specific node given by user.
82     [Arguments]    ${node_ip}
83     Utils.Run Command On Remote System    ${node_ip}    sudo pkill -f bgpd
84     Utils.Run Command On Remote System    ${node_ip}    sudo pkill -f zrpcd
85
86 Show Quagga Configuration On ODL
87     [Documentation]    Show quagga config from ODL
88     [Arguments]    ${odl_ip}    ${rd}
89     Create Quagga Telnet Session    ${odl_ip}    bgpd    sdncbgpc
90     Execute Command On Quagga Telnet Session    show running-config
91     Execute Command On Quagga Telnet Session    show bgp neighbors
92     Execute Command On Quagga Telnet Session    show ip bgp vrf ${rd}
93     Execute Command On Quagga Telnet Session    exit
94     Close Connection
95
96 Create Quagga Telnet Session
97     [Documentation]    Create telnet session for Quagga
98     [Arguments]    ${ip}    ${user}    ${password}
99     ${conn_id} =    Open_Connection_To_Tools_System    ip_address=${ip}
100     Switch Connection    ${conn_id}
101     ${output} =    Write    telnet localhost ${user}
102     ${output} =    Read Until    Password:
103     ${output} =    Write    ${password}
104     ${output} =    Read
105     ${output} =    Write    terminal length 512
106     ${output} =    Read
107
108 Execute Command On Quagga Telnet Session
109     [Documentation]    Execute command on Quagga telnet session(session should exist) and returns the output.
110     [Arguments]    ${command}
111     SSHLibrary.Write    ${command}
112     ${output} =    SSHLibrary.Read
113     Log    ${output}
114     RETURN    ${output}
115
116 Configure BGP And Add Neighbor On DCGW
117     [Documentation]    Configure BGP and add neighbor on the dcgw
118     [Arguments]    ${dcgw_ip}    ${as_id}    ${router_id}    ${neighbor_ip}    ${vrf_name}    ${rd}
119     ...    ${loopback_ip}
120     Create Quagga Telnet Session    ${dcgw_ip}    bgpd    sdncbgpc
121     Execute Command On Quagga Telnet Session    configure terminal
122     Execute Command On Quagga Telnet Session    router bgp ${as_id}
123     Execute Command On Quagga Telnet Session    bgp router-id ${router_id}
124     Execute Command On Quagga Telnet Session    redistribute static
125     Execute Command On Quagga Telnet Session    redistribute connected
126     Execute Command On Quagga Telnet Session    neighbor ${neighbor_ip} send-remote-as ${as_id}
127     Execute Command On Quagga Telnet Session    vrf ${vrf_name}
128     Execute Command On Quagga Telnet Session    rd ${rd}
129     Execute Command On Quagga Telnet Session    rt import ${rd}
130     Execute Command On Quagga Telnet Session    rt export ${rd}
131     Execute Command On Quagga Telnet Session    exit
132     Execute Command On Quagga Telnet Session    address-family vpnv4 unicast
133     Execute Command On Quagga Telnet Session    network ${loopback_ip}/32 rd ${rd} tag ${as_id}
134     Execute Command On Quagga Telnet Session    neighbor ${neighbor_ip} activate
135     Execute Command On Quagga Telnet Session    end
136     Execute Command On Quagga Telnet Session    show running-config
137     Execute Command On Quagga Telnet Session    exit
138
139 Add Loopback Interface On DCGW
140     [Documentation]    Add loopback interface on DCGW
141     [Arguments]    ${dcgw_ip}    ${loopback_name}    ${loopback_ip}    ${user}=zebra    ${password}=zebra
142     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
143     Execute Command On Quagga Telnet Session    enable
144     Execute Command On Quagga Telnet Session    ${password}
145     Execute Command On Quagga Telnet Session    configure terminal
146     Execute Command On Quagga Telnet Session    interface ${loopback_name}
147     Execute Command On Quagga Telnet Session    ip address ${loopback_ip}/32
148     Execute Command On Quagga Telnet Session    exit
149     Execute Command On Quagga Telnet Session    end
150     Execute Command On Quagga Telnet Session    show running-config
151     Execute Command On Quagga Telnet Session    exit
152
153 Execute Show Command On Quagga
154     [Documentation]    Execute command on quagga and returns the ouput.
155     [Arguments]    ${dcgw_ip}    ${cmd}    ${user}=bgpd    ${password}=sdncbgpc
156     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
157     ${output} =    Execute Command On Quagga Telnet Session    ${cmd}
158     Log    ${output}
159     Execute Command On quagga Telnet Session    exit
160     RETURN    ${output}
161
162 Verify BGP Neighbor Status On Quagga
163     [Documentation]    Verify bgp neighbor status on quagga
164     [Arguments]    ${dcgw_ip}    ${neighbor_ip}
165     ${output} =    Execute Show Command On quagga    ${dcgw_ip}    show bgp neighbors ${neighbor_ip}
166     Log    ${output}
167     Should Contain    ${output}    BGP state = Established
168
169 Setup BGP Peering On ODL
170     [Documentation]    Setup BGP peering between ODL and given neighbor IP.
171     ...    Configuring and starting BGP on ODL node with given AS number
172     ...    Adding and verifying BGP neighbor
173     [Arguments]    ${odl_ip}    ${as_id}    ${nbr_ip}
174     KarafKeywords.Issue Command On Karaf Console    ${BGP_CONFIG_SERVER_CMD}
175     BgpOperations.Create BGP Configuration On ODL    localas=${as_id}    routerid=${odl_ip}
176     BgpOperations.AddNeighbor To BGP Configuration On ODL    remoteas=${as_id}    neighborAddr=${nbr_ip}
177     ${output} =    BgpOperations.Get BGP Configuration On ODL    session
178     BuiltIn.Should Contain    ${output}    ${nbr_ip}
179
180 Setup BGP Peering On DCGW
181     [Documentation]    Setup BGP peering between DCGW and given neighbor IP.
182     ...    Configuring,adding neighbor on DCGW node and verifying BGP neighbor.
183     [Arguments]    ${dcgw_ip}    ${as_id}    ${nbr_ip}    ${vrf_name}    ${rd}    ${loopback_ip}
184     BgpOperations.Configure BGP And Add Neighbor On DCGW
185     ...    ${dcgw_ip}
186     ...    ${as_id}
187     ...    ${dcgw_ip}
188     ...    ${nbr_ip}
189     ...    ${vrf_name}
190     ...    ${rd}
191     ...    ${loopback_ip}
192     ${output} =    BgpOperations.Execute Show Command On Quagga    ${dcgw_ip}    ${RUN_CONFIG}
193     BuiltIn.Should Contain    ${output}    ${nbr_ip}
194
195 Verify Routes On Quagga
196     [Documentation]    Verify routes on quagga
197     [Arguments]    ${dcgw_ip}    ${rd}    ${ip_list}
198     ${output} =    Execute Show Command On quagga    ${dcgw_ip}    show ip bgp vrf ${rd}
199     Log    ${output}
200     FOR    ${ip}    IN    @{ip_list}
201         Should Contain    ${output}    ${ip}
202     END
203
204 Delete BGP Config On Quagga
205     [Documentation]    Delete BGP Config on Quagga
206     [Arguments]    ${dcgw_ip}    ${bgp_id}    ${user}=bgpd    ${password}=sdncbgpc
207     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
208     Execute Command On Quagga Telnet Session    configure terminal
209     Execute Command On Quagga Telnet Session    no router bgp ${bgp_id}
210     Execute Command On Quagga Telnet Session    end
211     ${output} =    Execute Command On Quagga Telnet Session    show running-config
212     Execute Command On Quagga Telnet Session    exit
213     RETURN    ${output}
214
215 Create L3VPN on DCGW
216     [Documentation]    Creating L3VPN on DCGW
217     [Arguments]    ${dcgw_ip}    ${as_id}    ${vpn_name}    ${rd}
218     BgpOperations.Create Quagga Telnet Session    ${dcgw_ip}    bgpd    sdncbgpc
219     BgpOperations.Execute Command On Quagga Telnet Session    configure terminal
220     BgpOperations.Execute Command On Quagga Telnet Session    router bgp ${as_id}
221     BgpOperations.Execute Command On Quagga Telnet Session    vrf ${vpn_name}
222     BgpOperations.Execute Command On Quagga Telnet Session    rd ${rd}
223     BgpOperations.Execute Command On Quagga Telnet Session    rt export ${rd}
224     BgpOperations.Execute Command On Quagga Telnet Session    rt import ${rd}
225     BgpOperations.Execute Command On Quagga Telnet Session    end
226
227 Delete L3VPN on DCGW
228     [Documentation]    Deleting L3VPN on DCGW
229     [Arguments]    ${dcgw_ip}    ${as_id}    @{vpns}
230     BgpOperations.Create Quagga Telnet Session    ${dcgw_ip}    bgpd    sdncbgpc
231     BgpOperations.Execute Command On Quagga Telnet Session    configure terminal
232     BgpOperations.Execute Command On Quagga Telnet Session    router bgp ${as_id}
233     FOR    ${vpn}    IN    @{vpns}
234         BgpOperations.Execute Command On Quagga Telnet Session    no vrf ${vpn}
235     END
236     BgpOperations.Execute Command On Quagga Telnet Session    end
237
238 Verify L3VPN On DCGW
239     [Documentation]    Verify L3VPN vrf name and rd value on DCGW
240     [Arguments]    ${dcgw_ip}    ${vpn_name}    ${rd}
241     ${output} =    BgpOperations.Execute Show Command On Quagga    ${dcgw_ip}    show running-config
242     BuiltIn.Should Contain    ${output}    vrf ${vpn_name}
243     BuiltIn.Should Contain    ${output}    rd ${rd}
244
245 Add Routes On DCGW
246     [Documentation]    Add routes on DCGW
247     [Arguments]    ${dcgw_ip}    ${rd}    ${network_ip}    ${label}
248     BgpOperations.Create Quagga Telnet Session    ${dcgw_ip}    bgpd    sdncbgpc
249     BgpOperations.Execute Command On Quagga Telnet Session    configure terminal
250     BgpOperations.Execute Command On Quagga Telnet Session    router bgp ${AS_ID}
251     BgpOperations.Execute Command On Quagga Telnet Session    address-family vpnv4 unicast
252     BgpOperations.Execute Command On Quagga Telnet Session    network ${network_ip}/32 rd ${rd} tag ${label}
253     BgpOperations.Execute Command On Quagga Telnet Session    end
254
255 Create BGP Configuration On ODL
256     [Documentation]    Associate the created L3VPN to a network-id received as dictionary argument
257     [Arguments]    &{Kwargs}
258     TemplatedRequests.Post_As_Json_Templated
259     ...    folder=${VAR_BASE_BGP}/create_bgp
260     ...    mapping=${Kwargs}
261     ...    session=session
262
263 AddNeighbor To BGP Configuration On ODL
264     [Documentation]    Associate the created L3VPN to a network-id received as dictionary argument
265     [Arguments]    &{Kwargs}
266     CompareStream.Run_Keyword_If_Less_Than_Magnesium
267     ...    TemplatedRequests.Post_As_Json_Templated
268     ...    folder=${VAR_BASE_BGP}/addNeighbor_bgp
269     ...    mapping=${Kwargs}
270     ...    session=session
271     CompareStream.Run_Keyword_If_At_Least_Magnesium
272     ...    TemplatedRequests.Post_As_Json_Templated
273     ...    folder=${VAR_BASE_BGP}/addNeighborsContainer_bgp
274     ...    mapping=${Kwargs}
275     ...    session=session
276
277 Get BGP Configuration On ODL
278     [Documentation]    Get bgp configuration
279     [Arguments]    ${odl_session}
280     ${resp} =    RequestsLibrary.Get Request    ${odl_session}    ${CONFIG_API}/ebgp:bgp/
281     Log    ${resp.text}
282     RETURN    ${resp.text}
283
284 Delete BGP Configuration On ODL
285     [Documentation]    Delete BGP
286     [Arguments]    ${odl_session}
287     ${resp} =    RequestsLibrary.Delete Request    ${odl_session}    ${CONFIG_API}/ebgp:bgp/
288     Log    ${resp.text}
289     Should Be Equal As Strings    ${resp.status_code}    200
290     RETURN    ${resp.text}
291
292 Create External Tunnel Endpoint Configuration
293     [Documentation]    Create Tunnel End point
294     [Arguments]    &{Kwargs}
295     TemplatedRequests.Post_As_Json_Templated
296     ...    folder=${VAR_BASE_BGP}/create_etep
297     ...    mapping=${Kwargs}
298     ...    session=session
299
300 Delete External Tunnel Endpoint Configuration
301     [Documentation]    Delete Tunnel End point
302     [Arguments]    &{Kwargs}
303     TemplatedRequests.Post_As_Json_Templated
304     ...    folder=${VAR_BASE_BGP}/delete_etep
305     ...    mapping=${Kwargs}
306     ...    session=session
307
308 Get External Tunnel Endpoint Configuration
309     [Documentation]    Get bgp configuration
310     [Arguments]    ${ip}
311     ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_API}/itm:dc-gateway-ip-list/dc-gateway-ip/${ip}/
312     Log    ${resp.text}
313     RETURN    ${resp.text}
314
315 Teardown_Everything
316     [Documentation]    Create and Log the diff between expected and actual responses, make sure Python tool was killed.
317     ...    Tear down imported Resources.
318     KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
319     RequestsLibrary.Delete_All_Sessions
320     SSHLibrary.Close_All_Connections
321
322 Check_Example_Bgp_Rib_Content
323     [Documentation]    Check the example-bgp-rib content for string
324     [Arguments]    ${session}    ${substr}    ${error_message}=${JSONKEYSTR} not found, but expected.
325     ${response} =    RequestsLibrary.Get Request    ${session}    ${REST_API}/${BGP_RIB_URI}?content=nonconfig
326     BuiltIn.Log    ${response.status_code}
327     BuiltIn.Log    ${response.text}
328     BuiltIn.Should_Contain    ${response.text}    ${substr}    ${error_message}    values=False
329
330 Check_Example_Bgp_Rib_Does_Not_Contain
331     [Documentation]    Check the example-bgp-rib does not contain the string
332     [Arguments]    ${session}    ${substr}    ${error_message}=${JSONKEYSTR} found, but not expected.
333     ${response} =    RequestsLibrary.Get Request    ${session}    ${REST_API}/${BGP_RIB_URI}?content=nonconfig
334     BuiltIn.Log    ${response.status_code}
335     BuiltIn.Log    ${response.text}
336     BuiltIn.Should_Not_Contain    ${response.text}    ${substr}    ${error_message}    values=False
337
338 Check_Example_IPv4_Topology_Content
339     [Documentation]    Check the example-ipv4-topology content for string
340     [Arguments]    ${session}    ${string_to_check}=${EMPTY}
341     ${response} =    RequestsLibrary.Get Request    ${session}    ${REST_API}/${BGP_TOPOLOGY_URI}?content=nonconfig
342     BuiltIn.Log    ${response.status_code}
343     BuiltIn.Log    ${response.text}
344     BuiltIn.Should_Contain    ${response.text}    ${string_to_check}
345
346 Check_Example_IPv4_Topology_Does_Not_Contain
347     [Documentation]    Check the example-ipv4-topology does not contain the string
348     [Arguments]    ${session}    ${string_to_check}
349     ${response} =    RequestsLibrary.Get Request    ${session}    ${REST_API}/${BGP_TOPOLOGY_URI}?content=nonconfig
350     BuiltIn.Log    ${response.status_code}
351     BuiltIn.Log    ${response.text}
352     BuiltIn.Should_Not_Contain    ${response.text}    ${string_to_check}
353
354 Bmp_Monitor_Precondition
355     [Documentation]    Verify example-bmp-monitor presence in bmp-monitors
356     [Arguments]    ${session}
357     &{mapping} =    BuiltIn.Create_Dictionary    TOOL_IP=${TOOLS_SYSTEM_IP}
358     BuiltIn.Wait_Until_Keyword_Succeeds
359     ...    6x
360     ...    10s
361     ...    TemplatedRequests.Get_As_Json_Templated
362     ...    folder=${BGP_BMP_FEAT_DIR}
363     ...    mapping=${mapping}
364     ...    verify=True
365     ...    session=${session}
366
367 Bmp_Monitor_Postcondition
368     [Documentation]    Verifies if example-bmp-monitor data contains one peer.
369     [Arguments]    ${session}
370     ${routes_line} =    CompareStream.Set_Variable_If_At_Least_Neon
371     ...    ${NEW_IPV4_ROUTES_LINE}
372     ...    ${OLD_IPV4_ROUTES_LINE}
373     &{mapping} =    BuiltIn.Create_Dictionary    TOOL_IP=${TOOLS_SYSTEM_IP}    ROUTES_LINE=${routes_line}
374     ${output} =    BuiltIn.Wait_Until_Keyword_Succeeds
375     ...    10x
376     ...    5s
377     ...    TemplatedRequests.Get_As_Json_Templated
378     ...    folder=${BGP_BMP_DIR}
379     ...    mapping=${mapping}
380     ...    session=${session}
381     ...    verify=True
382     BuiltIn.Log    ${output}
383
384 Odl_To_Play_Template
385     [Arguments]    ${totest}    ${dir}    ${remove}=True
386     ${announce_hex} =    OperatingSystem.Get_File    ${dir}/${totest}/announce_${totest}.hex
387     ${announce_hex} =    String.Remove_String    ${announce_hex}    \n
388     ${withdraw_hex} =    OperatingSystem.Get_File    ${dir}/${totest}/withdraw_${totest}.hex
389     ${withdraw_hex} =    String.Remove_String    ${withdraw_hex}    \n
390     IF    '${remove}' == 'True'    BgpRpcClient.play_clean
391     TemplatedRequests.Post_As_Xml_Templated    ${dir}/${totest}/app    mapping=${APP_PEER}    session=${CONFIG_SESSION}
392     ${update} =    BuiltIn.Wait_Until_Keyword_Succeeds    3x    2s    Get_Update_Message
393     Verify_Two_Hex_Messages_Are_Equal    ${update}    ${announce_hex}
394     BgpRpcClient.play_clean
395     Remove_Configured_Routes    ${totest}    ${dir}
396     ${update} =    BuiltIn.Wait_Until_Keyword_Succeeds    3x    2s    Get_Update_Message
397     Verify_Two_Hex_Messages_Are_Equal    ${update}    ${withdraw_hex}
398     [Teardown]    Remove_Configured_Routes    ${totest}    ${dir}
399
400 Play_To_Odl_Template
401     [Arguments]    ${totest}    ${dir}    ${ipv}=ipv4
402     ${as_path} =    CompareStream.Set_Variable_If_At_Least_Neon    ${NEW_AS_PATH}    ${OLD_AS_PATH}
403     &{adj_rib_in} =    BuiltIn.Create_Dictionary
404     ...    PATH=peer\=bgp:%2F%2F${TOOLS_SYSTEM_IP}/adj-rib-in
405     ...    BGP_RIB=${RIB_NAME}
406     ...    AS_PATH=${as_path}
407     &{effective_rib_in} =    BuiltIn.Create_Dictionary
408     ...    PATH=peer\=bgp:%2F%2F${TOOLS_SYSTEM_IP}/effective-rib-in
409     ...    BGP_RIB=${RIB_NAME}
410     ...    AS_PATH=${as_path}
411     &{loc_rib} =    BuiltIn.Create_Dictionary    PATH=loc-rib    BGP_RIB=${RIB_NAME}    AS_PATH=${as_path}
412     ${announce_hex} =    OperatingSystem.Get_File    ${dir}/${totest}/announce_${totest}.hex
413     ${withdraw_hex} =    OperatingSystem.Get_File    ${dir}/${totest}/withdraw_${totest}.hex
414     BgpRpcClient.play_clean
415     BgpRpcClient.play_send    ${announce_hex}
416     BuiltIn.Wait_Until_Keyword_Succeeds
417     ...    3x
418     ...    2s
419     ...    TemplatedRequests.Get_As_Json_Templated
420     ...    ${dir}/${totest}/rib
421     ...    mapping=${adj_rib_in}
422     ...    session=${CONFIG_SESSION}
423     ...    verify=True
424     BuiltIn.Wait_Until_Keyword_Succeeds
425     ...    3x
426     ...    2s
427     ...    TemplatedRequests.Get_As_Json_Templated
428     ...    ${dir}/${totest}/rib
429     ...    mapping=${effective_rib_in}
430     ...    session=${CONFIG_SESSION}
431     ...    verify=True
432     BuiltIn.Wait_Until_Keyword_Succeeds
433     ...    3x
434     ...    2s
435     ...    TemplatedRequests.Get_As_Json_Templated
436     ...    ${dir}/${totest}/rib
437     ...    mapping=${loc_rib}
438     ...    session=${CONFIG_SESSION}
439     ...    verify=True
440     BgpRpcClient.play_send    ${withdraw_hex}
441     BuiltIn.Wait_Until_Keyword_Succeeds
442     ...    3x
443     ...    2s
444     ...    TemplatedRequests.Get_As_Json_Templated
445     ...    ${dir}/empty_routes/${ipv}
446     ...    mapping=${loc_rib}
447     ...    session=${CONFIG_SESSION}
448     ...    verify=True
449     [Teardown]    BgpRpcClient.play_send    ${withdraw_hex}
450
451 Play_To_Odl_Non_Removal_Template
452     [Arguments]    ${totest}    ${dir}    ${ipv}=ipv4
453     ${announce_hex} =    OperatingSystem.Get_File    ${dir}/${totest}/announce_${totest}.hex
454     BgpRpcClient.play_clean
455     BgpRpcClient.play_send    ${announce_hex}
456     ${as_path} =    CompareStream.Set_Variable_If_At_Least_Neon    ${NEW_AS_PATH}    ${OLD_AS_PATH}
457     &{loc_rib} =    BuiltIn.Create_Dictionary    PATH=loc-rib    BGP_RIB=${RIB_NAME}    AS_PATH=${as_path}
458     BuiltIn.Wait_Until_Keyword_Succeeds
459     ...    3x
460     ...    2s
461     ...    TemplatedRequests.Get_As_Json_Templated
462     ...    ${dir}/${totest}/rib
463     ...    mapping=${loc_rib}
464     ...    session=${CONFIG_SESSION}
465     ...    verify=True
466
467 Get_Update_Message
468     [Documentation]    Returns hex update message.
469     ${update} =    BgpRpcClient.play_get
470     BuiltIn.Should_Not_Be_Equal    ${update}    ${Empty}
471     RETURN    ${update}
472
473 Remove_Configured_Routes
474     [Documentation]    Removes the route if present.
475     [Arguments]    ${totest}    ${dir}
476     BuiltIn.Run_Keyword_And_Ignore_Error
477     ...    TemplatedRequests.Delete_Templated
478     ...    ${dir}/${totest}/app
479     ...    mapping=${APP_PEER}
480     ...    session=${CONFIG_SESSION}
481
482 Verify_Two_Hex_Messages_Are_Equal
483     [Documentation]    Verifies two hex messages are equal even in case, their arguments are misplaced.
484     ...    Compares length of the hex messages and sums hex messages arguments as integers and compares results.
485     [Arguments]    ${hex_1}    ${hex_2}
486     ${len_1} =    BuiltIn.Get_Length    ${hex_1}
487     ${len_2} =    BuiltIn.Get_Length    ${hex_2}
488     BuiltIn.Should_Be_Equal    ${len_1}    ${len_2}
489     ${sum_1} =    BgpRpcClient.Sum_Hex_Message    ${hex_1}
490     ${sum_2} =    BgpRpcClient.Sum_Hex_Message    ${hex_2}
491     BuiltIn.Should_Be_Equal    ${sum_1}    ${sum_2}
492
493 Check BGP VPNv4 Nbr On ODL
494     [Documentation]    Check all BGP VPNv4 neighbor on ODL
495     [Arguments]    ${dcgw_count}    ${flag}=True    ${start}=${START_VALUE}
496     ${output} =    KarafKeywords.Issue Command On Karaf Console    ${DISPLAY_VPN4_ALL}
497     FOR    ${index}    IN RANGE    ${start}    ${dcgw_count}
498         IF    ${flag}==True
499             BuiltIn.Should Contain    ${output}    ${DCGW_IP_LIST[${index}]}
500         ELSE
501             BuiltIn.Should Not Contain    ${output}    ${DCGW_IP_LIST[${index}]}
502         END
503     END