2 Documentation This library contains keywords related to the BGP functionality.
5 Library BgpRpcClient.py ${TOOLS_SYSTEM_IP}
6 Resource ../variables/Variables.robot
7 Resource CompareStream.robot
9 Resource KillPythonTool.robot
10 Resource TemplatedRequests.robot
13 ${BGP_BMP_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/filled_structure
14 ${BGP_BMP_FEAT_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/empty_structure
15 ${BGP_RIB_URI} ${OPERATIONAL_API}/bgp-rib:bgp-rib/rib/example-bgp-rib
16 ${BGP_TOPOLOGY_URI} ${OPERATIONAL_TOPO_API}/topology/example-ipv4-topology
17 ${VAR_BASE_BGP} ${CURDIR}/../variables/bgpfunctional
18 ${RIB_NAME} example-bgp-rib
19 ${OLD_AS_PATH} \n"as-path": {},
20 ${NEW_AS_PATH} ${EMPTY}
21 &{APP_PEER} IP=${ODL_SYSTEM_IP} BGP_RIB=${RIB_NAME}
22 ${NEW_IPV4_ROUTES_LINE} ${EMPTY}
23 ${OLD_IPV4_ROUTES_LINE} \n"bgp-inet:ipv4-routes": {},
24 ${BGP_CONFIG_SERVER_CMD} bgp-connect -h ${ODL_SYSTEM_IP} -p 7644 add
25 ${DISPLAY_VPN4_ALL} show-bgp --cmd "ip bgp ${VPNV4_ADDR_FAMILY} all"
28 Start Quagga Processes On ODL
30 [Documentation] To start the zrpcd processes on ODL VM
31 ${conn_id}= Open_Connection_To_ODL_System ip_address=${odl_ip}
32 Switch Connection ${conn_id}
33 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
34 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
35 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
36 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
37 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
40 Restart BGP Processes On ODL
42 [Documentation] To restart the bgpd , qthriftd processes on ODL VM
43 ${conn_id} = Open_Connection_To_ODL_System ip_address=${odl_ip}
44 Switch Connection ${conn_id}
45 Write Commands Until Expected Prompt sudo pkill -f bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
46 Start Quagga Processes On ODL ${odl_ip}
48 Start Quagga Processes On DCGW
49 [Arguments] ${dcgw_ip}
50 [Documentation] To start the zrpcd, bgpd,and zebra processes on DCGW
51 ${dcgw_conn_id} = Open_Connection_To_Tools_System ip_address=${dcgw_ip}
52 Switch Connection ${dcgw_conn_id}
53 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
54 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
55 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
56 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
57 Write Commands Until Expected Prompt cd /opt/quagga/sbin/ ${DEFAULT_LINUX_PROMPT_STRICT}
58 ${output} = Write sudo ./bgpd &
59 ${output} = Read Until pid
61 ${output} = Write sudo ./zebra &
64 Write Commands Until Expected Prompt ps -ef | grep bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
65 Write Commands Until Expected Prompt ps -ef | grep zebra ${DEFAULT_LINUX_PROMPT_STRICT}
66 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
68 Restart BGP Processes On DCGW
69 [Arguments] ${dcgw_ip}
70 [Documentation] To Restart the zrpcd, bgpd and zebra processes on DCGW
71 ${dcgw_conn_id} = Open_Connection_To_Tools_System ip_address=${dcgw_ip}
72 Switch Connection ${dcgw_conn_id}
73 Write Commands Until Expected Prompt sudo pkill -f bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
74 Start Quagga Processes On DCGW ${dcgw_ip}
76 Stop BGP Processes On Node
77 [Arguments] ${node_ip}
78 [Documentation] To stop the bgpd , qthriftd processes on specific node given by user.
79 Utils.Run Command On Remote System ${node_ip} sudo pkill -f bgpd
80 Utils.Run Command On Remote System ${node_ip} sudo pkill -f zrpcd
82 Show Quagga Configuration On ODL
83 [Arguments] ${odl_ip} ${rd}
84 [Documentation] Show quagga config from ODL
85 Create Quagga Telnet Session ${odl_ip} bgpd sdncbgpc
86 Execute Command On Quagga Telnet Session show running-config
87 Execute Command On Quagga Telnet Session show bgp neighbors
88 Execute Command On Quagga Telnet Session show ip bgp vrf ${rd}
89 Execute Command On Quagga Telnet Session exit
92 Create Quagga Telnet Session
93 [Arguments] ${ip} ${user} ${password}
94 [Documentation] Create telnet session for Quagga
95 ${conn_id}= Open_Connection_To_Tools_System ip_address=${ip}
96 Switch Connection ${conn_id}
97 ${output} = Write telnet localhost ${user}
98 ${output} = Read Until Password:
99 ${output} = Write ${password}
101 ${output} = Write terminal length 512
104 Execute Command On Quagga Telnet Session
105 [Arguments] ${command}
106 [Documentation] Execute command on Quagga telnet session(session should exist) and returns the output.
107 SSHLibrary.Write ${command}
108 ${output} = SSHLibrary.Read
112 Configure BGP And Add Neighbor On DCGW
113 [Arguments] ${dcgw_ip} ${as_id} ${router_id} ${neighbor_ip} ${vrf_name} ${rd}
115 [Documentation] Configure BGP and add neighbor on the dcgw
116 Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
117 Execute Command On Quagga Telnet Session configure terminal
118 Execute Command On Quagga Telnet Session router bgp ${as_id}
119 Execute Command On Quagga Telnet Session bgp router-id ${router_id}
120 Execute Command On Quagga Telnet Session redistribute static
121 Execute Command On Quagga Telnet Session redistribute connected
122 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} send-remote-as ${as_id}
123 Execute Command On Quagga Telnet Session vrf ${vrf_name}
124 Execute Command On Quagga Telnet Session rd ${rd}
125 Execute Command On Quagga Telnet Session rt import ${rd}
126 Execute Command On Quagga Telnet Session rt export ${rd}
127 Execute Command On Quagga Telnet Session exit
128 Execute Command On Quagga Telnet Session address-family vpnv4 unicast
129 Execute Command On Quagga Telnet Session network ${loopback_ip}/32 rd ${rd} tag ${as_id}
130 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} activate
131 Execute Command On Quagga Telnet Session end
132 Execute Command On Quagga Telnet Session show running-config
133 Execute Command On Quagga Telnet Session exit
135 Add Loopback Interface On DCGW
136 [Arguments] ${dcgw_ip} ${loopback_name} ${loopback_ip} ${user}=zebra ${password}=zebra
137 [Documentation] Add loopback interface on DCGW
138 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
139 Execute Command On Quagga Telnet Session enable
140 Execute Command On Quagga Telnet Session ${password}
141 Execute Command On Quagga Telnet Session configure terminal
142 Execute Command On Quagga Telnet Session interface ${loopback_name}
143 Execute Command On Quagga Telnet Session ip address ${loopback_ip}/32
144 Execute Command On Quagga Telnet Session exit
145 Execute Command On Quagga Telnet Session end
146 Execute Command On Quagga Telnet Session show running-config
147 Execute Command On Quagga Telnet Session exit
149 Execute Show Command On Quagga
150 [Arguments] ${dcgw_ip} ${cmd} ${user}=bgpd ${password}=sdncbgpc
151 [Documentation] Execute command on quagga and returns the ouput.
152 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
153 ${output} = Execute Command On Quagga Telnet Session ${cmd}
155 Execute Command On quagga Telnet Session exit
158 Verify BGP Neighbor Status On Quagga
159 [Arguments] ${dcgw_ip} ${neighbor_ip}
160 [Documentation] Verify bgp neighbor status on quagga
161 ${output} = Execute Show Command On quagga ${dcgw_ip} show bgp neighbors ${neighbor_ip}
163 Should Contain ${output} BGP state = Established
165 Setup BGP Peering On ODL
166 [Arguments] ${odl_ip} ${as_id} ${nbr_ip}
167 [Documentation] Setup BGP peering between ODL and given neighbor IP.
168 ... Configuring and starting BGP on ODL node with given AS number
169 ... Adding and verifying BGP neighbor
170 KarafKeywords.Issue Command On Karaf Console ${BGP_CONFIG_SERVER_CMD}
171 BgpOperations.Create BGP Configuration On ODL localas=${as_id} routerid=${odl_ip}
172 BgpOperations.AddNeighbor To BGP Configuration On ODL remoteas=${as_id} neighborAddr=${nbr_ip}
173 ${output} = BgpOperations.Get BGP Configuration On ODL session
174 BuiltIn.Should Contain ${output} ${nbr_ip}
176 Setup BGP Peering On DCGW
177 [Arguments] ${dcgw_ip} ${as_id} ${nbr_ip} ${vrf_name} ${rd} ${loopback_ip}
178 [Documentation] Setup BGP peering between DCGW and given neighbor IP.
179 ... Configuring,adding neighbor on DCGW node and verifying BGP neighbor.
180 BgpOperations.Configure BGP And Add Neighbor On DCGW ${dcgw_ip} ${as_id} ${dcgw_ip} ${nbr_ip} ${vrf_name} ${rd}
182 ${output} = BgpOperations.Execute Show Command On Quagga ${dcgw_ip} ${RUN_CONFIG}
183 BuiltIn.Should Contain ${output} ${nbr_ip}
185 Verify Routes On Quagga
186 [Arguments] ${dcgw_ip} ${rd} ${ip_list}
187 [Documentation] Verify routes on quagga
188 ${output} = Execute Show Command On quagga ${dcgw_ip} show ip bgp vrf ${rd}
190 : FOR ${ip} IN @{ip_list}
191 \ Should Contain ${output} ${ip}
193 Delete BGP Config On Quagga
194 [Arguments] ${dcgw_ip} ${bgp_id} ${user}=bgpd ${password}=sdncbgpc
195 [Documentation] Delete BGP Config on Quagga
196 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
197 Execute Command On Quagga Telnet Session configure terminal
198 Execute Command On Quagga Telnet Session no router bgp ${bgp_id}
199 Execute Command On Quagga Telnet Session end
200 ${output} = Execute Command On Quagga Telnet Session show running-config
201 Execute Command On Quagga Telnet Session exit
205 [Arguments] ${dcgw_ip} ${as_id} ${vpn_name} ${rd}
206 [Documentation] Creating L3VPN on DCGW
207 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
208 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
209 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${as_id}
210 BgpOperations.Execute Command On Quagga Telnet Session vrf ${vpn_name}
211 BgpOperations.Execute Command On Quagga Telnet Session rd ${rd}
212 BgpOperations.Execute Command On Quagga Telnet Session rt export ${rd}
213 BgpOperations.Execute Command On Quagga Telnet Session rt import ${rd}
214 BgpOperations.Execute Command On Quagga Telnet Session end
217 [Arguments] ${dcgw_ip} ${as_id} @{vpns}
218 [Documentation] Deleting L3VPN on DCGW
219 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
220 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
221 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${as_id}
222 : FOR ${vpn} IN @{vpns}
223 \ BgpOperations.Execute Command On Quagga Telnet Session no vrf ${vpn}
224 BgpOperations.Execute Command On Quagga Telnet Session end
227 [Arguments] ${dcgw_ip} ${vpn_name} ${rd}
228 [Documentation] Verify L3VPN vrf name and rd value on DCGW
229 ${output} = BgpOperations.Execute Show Command On Quagga ${dcgw_ip} show running-config
230 BuiltIn.Should Contain ${output} vrf ${vpn_name}
231 BuiltIn.Should Contain ${output} rd ${rd}
234 [Arguments] ${dcgw_ip} ${rd} ${network_ip} ${label}
235 [Documentation] Add routes on DCGW
236 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
237 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
238 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${AS_ID}
239 BgpOperations.Execute Command On Quagga Telnet Session address-family vpnv4 unicast
240 BgpOperations.Execute Command On Quagga Telnet Session network ${network_ip}/32 rd ${rd} tag ${label}
241 BgpOperations.Execute Command On Quagga Telnet Session end
243 Create BGP Configuration On ODL
244 [Arguments] &{Kwargs}
245 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
246 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_bgp mapping=${Kwargs} session=session
248 AddNeighbor To BGP Configuration On ODL
249 [Arguments] &{Kwargs}
250 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
251 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/addNeighbor_bgp mapping=${Kwargs} session=session
253 Get BGP Configuration On ODL
254 [Arguments] ${odl_session}
255 [Documentation] Get bgp configuration
256 ${resp} = RequestsLibrary.Get Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
258 [Return] ${resp.content}
260 Delete BGP Configuration On ODL
261 [Arguments] ${odl_session}
262 [Documentation] Delete BGP
263 ${resp} = RequestsLibrary.Delete Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
265 Should Be Equal As Strings ${resp.status_code} 200
266 [Return] ${resp.content}
268 Create External Tunnel Endpoint Configuration
269 [Arguments] &{Kwargs}
270 [Documentation] Create Tunnel End point
271 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_etep mapping=${Kwargs} session=session
273 Delete External Tunnel Endpoint Configuration
274 [Arguments] &{Kwargs}
275 [Documentation] Delete Tunnel End point
276 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/delete_etep mapping=${Kwargs} session=session
278 Get External Tunnel Endpoint Configuration
280 [Documentation] Get bgp configuration
281 ${resp} = RequestsLibrary.Get Request session ${CONFIG_API}/itm:dc-gateway-ip-list/dc-gateway-ip/${ip}/
283 [Return] ${resp.content}
286 [Documentation] Create and Log the diff between expected and actual responses, make sure Python tool was killed.
287 ... Tear down imported Resources.
288 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
289 RequestsLibrary.Delete_All_Sessions
290 SSHLibrary.Close_All_Connections
292 Check_Example_Bgp_Rib_Content
293 [Arguments] ${session} ${substr} ${error_message}=${JSONKEYSTR} not found, but expected.
294 [Documentation] Check the example-bgp-rib content for string
295 ${response}= RequestsLibrary.Get Request ${session} ${BGP_RIB_URI}
296 BuiltIn.Log ${response.status_code}
297 BuiltIn.Log ${response.text}
298 BuiltIn.Should_Contain ${response.text} ${substr} ${error_message} values=False
300 Check_Example_Bgp_Rib_Does_Not_Contain
301 [Arguments] ${session} ${substr} ${error_message}=${JSONKEYSTR} found, but not expected.
302 [Documentation] Check the example-bgp-rib does not contain the string
303 ${response}= RequestsLibrary.Get Request ${session} ${BGP_RIB_URI}
304 BuiltIn.Log ${response.status_code}
305 BuiltIn.Log ${response.text}
306 BuiltIn.Should_Not_Contain ${response.text} ${substr} ${error_message} values=False
308 Check_Example_IPv4_Topology_Content
309 [Arguments] ${session} ${string_to_check}=${EMPTY}
310 [Documentation] Check the example-ipv4-topology content for string
311 ${response}= RequestsLibrary.Get Request ${session} ${BGP_TOPOLOGY_URI}
312 BuiltIn.Log ${response.status_code}
313 BuiltIn.Log ${response.text}
314 BuiltIn.Should_Contain ${response.text} ${string_to_check}
316 Check_Example_IPv4_Topology_Does_Not_Contain
317 [Arguments] ${session} ${string_to_check}
318 [Documentation] Check the example-ipv4-topology does not contain the string
319 ${response}= RequestsLibrary.Get Request ${session} ${BGP_TOPOLOGY_URI}
320 BuiltIn.Log ${response.status_code}
321 BuiltIn.Log ${response.text}
322 BuiltIn.Should_Not_Contain ${response.text} ${string_to_check}
324 Bmp_Monitor_Precondition
325 [Arguments] ${session}
326 [Documentation] Verify example-bmp-monitor presence in bmp-monitors
327 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP}
328 BuiltIn.Wait_Until_Keyword_Succeeds 6x 10s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_FEAT_DIR} mapping=${mapping} verify=True
329 ... session=${session}
331 Bmp_Monitor_Postcondition
332 [Arguments] ${session}
333 [Documentation] Verifies if example-bmp-monitor data contains one peer.
334 ${routes_line} = CompareStream.Set_Variable_If_At_Least_Neon ${NEW_IPV4_ROUTES_LINE} ${OLD_IPV4_ROUTES_LINE}
335 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP} ROUTES_LINE=${routes_line}
336 ${output} BuiltIn.Wait_Until_Keyword_Succeeds 10x 5s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_DIR} mapping=${mapping}
337 ... session=${session} verify=True
338 BuiltIn.Log ${output}
341 [Arguments] ${totest} ${dir} ${remove}=True
342 ${announce_hex} = OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
343 ${announce_hex} = String.Remove_String ${announce_hex} \n
344 ${withdraw_hex} = OperatingSystem.Get_File ${dir}/${totest}/withdraw_${totest}.hex
345 ${withdraw_hex} = String.Remove_String ${withdraw_hex} \n
346 BuiltIn.Run_Keyword_If '${remove}' == 'True' BgpRpcClient.play_clean
347 TemplatedRequests.Post_As_Xml_Templated ${dir}/${totest}/app mapping=${APP_PEER} session=${CONFIG_SESSION}
348 ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
349 Verify_Two_Hex_Messages_Are_Equal ${update} ${announce_hex}
350 BgpRpcClient.play_clean
351 Remove_Configured_Routes ${totest} ${dir}
352 ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
353 Verify_Two_Hex_Messages_Are_Equal ${update} ${withdraw_hex}
354 [Teardown] Remove_Configured_Routes ${totest} ${dir}
357 [Arguments] ${totest} ${dir} ${ipv}=ipv4
358 ${as_path} = CompareStream.Set_Variable_If_At_Least_Neon ${NEW_AS_PATH} ${OLD_AS_PATH}
359 &{adj_rib_in} BuiltIn.Create_Dictionary PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/adj-rib-in BGP_RIB=${RIB_NAME} AS_PATH=${as_path}
360 &{effective_rib_in} BuiltIn.Create_Dictionary PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/effective-rib-in BGP_RIB=${RIB_NAME} AS_PATH=${as_path}
361 &{loc_rib} BuiltIn.Create_Dictionary PATH=loc-rib BGP_RIB=${RIB_NAME} AS_PATH=${as_path}
362 ${announce_hex} = OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
363 ${withdraw_hex} = OperatingSystem.Get_File ${dir}/${totest}/withdraw_${totest}.hex
364 BgpRpcClient.play_clean
365 BgpRpcClient.play_send ${announce_hex}
366 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${adj_rib_in} session=${CONFIG_SESSION}
368 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${effective_rib_in} session=${CONFIG_SESSION}
370 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${loc_rib} session=${CONFIG_SESSION}
372 BgpRpcClient.play_send ${withdraw_hex}
373 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/empty_routes/${ipv} mapping=${loc_rib} session=${CONFIG_SESSION}
375 [Teardown] BgpRpcClient.play_send ${withdraw_hex}
377 Play_To_Odl_Non_Removal_Template
378 [Arguments] ${totest} ${dir} ${ipv}=ipv4
379 ${announce_hex} = OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
380 BgpRpcClient.play_clean
381 BgpRpcClient.play_send ${announce_hex}
382 ${as_path} = CompareStream.Set_Variable_If_At_Least_Neon ${NEW_AS_PATH} ${OLD_AS_PATH}
383 &{loc_rib} BuiltIn.Create_Dictionary PATH=loc-rib BGP_RIB=${RIB_NAME} AS_PATH=${as_path}
384 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${loc_rib} session=${CONFIG_SESSION}
388 [Documentation] Returns hex update message.
389 ${update} = BgpRpcClient.play_get
390 BuiltIn.Should_Not_Be_Equal ${update} ${Empty}
393 Remove_Configured_Routes
394 [Arguments] ${totest} ${dir}
395 [Documentation] Removes the route if present.
396 BuiltIn.Run_Keyword_And_Ignore_Error TemplatedRequests.Delete_Templated ${dir}/${totest}/app mapping=${APP_PEER} session=${CONFIG_SESSION}
398 Verify_Two_Hex_Messages_Are_Equal
399 [Arguments] ${hex_1} ${hex_2}
400 [Documentation] Verifies two hex messages are equal even in case, their arguments are misplaced.
401 ... Compares length of the hex messages and sums hex messages arguments as integers and compares results.
402 ${len_1} = BuiltIn.Get_Length ${hex_1}
403 ${len_2} = BuiltIn.Get_Length ${hex_2}
404 BuiltIn.Should_Be_Equal ${len_1} ${len_2}
405 ${sum_1} = Sum_Hex_Message_Arguments_To_Integer ${hex_1}
406 ${sum_2} = Sum_Hex_Message_Arguments_To_Integer ${hex_2}
407 BuiltIn.Should_Be_Equal ${sum_1} ${sum_2}
409 Sum_Hex_Message_Arguments_To_Integer
410 [Arguments] ${hex_string}
411 [Documentation] Converts hex message arguments to integers and sums them up and returns the sum.
412 ${final_sum} = BuiltIn.Evaluate sum(map(lambda x: int(x, 16), re.compile('[a-f\d]{2}').findall('${hex_string}'[32:]))) modules=re
413 [Return] ${final_sum}
415 Check BGP VPNv4 Nbr On ODL
416 [Arguments] ${dcgw_count} ${flag}=True ${start}=${START_VALUE}
417 [Documentation] Check all BGP VPNv4 neighbor on ODL
418 ${output} = KarafKeywords.Issue Command On Karaf Console ${DISPLAY_VPN4_ALL}
419 : FOR ${index} IN RANGE ${start} ${dcgw_count}
420 \ BuiltIn.Run Keyword If ${flag}==True BuiltIn.Should Contain ${output} ${DCGW_IP_LIST[${index}]}
421 \ ... ELSE BuiltIn.Should Not Contain ${output} ${DCGW_IP_LIST[${index}]}