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