2 Documentation Library containing Keywords used for SXP testing
4 Library RequestsLibrary
8 Resource CompareStream.robot
9 Resource KarafKeywords.robot
11 Resource TemplatedRequests.robot
12 Variables ../variables/Variables.py
15 ${REST_CONTEXT} /restconf/operations/sxp-controller
19 [Arguments] ${session} ${path} ${DATA}
20 [Documentation] Post request to Controller and checks response
21 ${resp} Post Request ${session} ${REST_CONTEXT}:${path} data=${DATA} headers=${HEADERS_XML}
26 Should be Equal As Strings ${resp.status_code} 200
27 ${content} Evaluate json.loads('''${resp.content}''') json
28 ${content} Get From Dictionary ${content} output
29 ${content} Get From Dictionary ${content} result
30 Should Be True ${content}
33 [Arguments] ${node} ${password}=${EMPTY} ${version}=version4 ${port}=64999 ${session}=session ${ip}=${EMPTY}
34 [Documentation] Add node via RPC to ODL
35 ${DATA} Add Node Xml ${node} ${port} ${password} ${version} ${ip}
36 Post To Controller ${session} add-node ${DATA}
39 [Arguments] ${node} ${session}=session
40 [Documentation] Delete connection via RPC from node
41 ${DATA} Delete Node Xml ${node}
42 Post To Controller ${session} delete-node ${DATA}
45 [Arguments] ${version} ${mode} ${ip} ${port} ${node}=127.0.0.1 ${password}=${EMPTY}
46 ... ${session}=session ${domain}=global
47 [Documentation] Add connection via RPC to node
48 ${DATA} Add Connection Xml ${version} ${mode} ${ip} ${port} ${node}
49 ... ${password} ${domain}
50 Post To Controller ${session} add-connection ${DATA}
53 [Arguments] ${node}=127.0.0.1 ${session}=session ${domain}=global
54 [Documentation] Gets all connections via RPC from node
55 ${DATA} Get Connections From Node Xml ${node} ${domain}
56 ${resp} Post Request ${session} ${REST_CONTEXT}:get-connections data=${DATA} headers=${HEADERS_XML}
57 Should be Equal As Strings ${resp.status_code} 200
58 [Return] ${resp.content}
61 [Arguments] ${ip} ${port} ${node}=127.0.0.1 ${session}=session ${domain}=global
62 [Documentation] Delete connection via RPC from node
63 ${DATA} Delete Connections Xml ${ip} ${port} ${node} ${domain}
64 Post To Controller ${session} delete-connection ${DATA}
67 [Arguments] ${node}=127.0.0.1 ${session}=session ${domain}=global
68 [Documentation] Delete all connections via RPC from node
69 ${resp} Get Connections ${node} ${session} ${domain}
70 @{connections} Parse Connections ${resp}
71 : FOR ${connection} IN @{connections}
72 \ Delete Connections ${connection['peer-address']} ${connection['tcp-port']} ${node} ${session} ${domain}
75 [Arguments] ${version} ${mode} ${ip} ${port}=64999 ${node}=127.0.0.1 ${state}=on
76 ... ${session}=session ${domain}=global
77 [Documentation] Verify that connection is ON
78 ${resp} Get Connections ${node} ${session} ${domain}
79 Should Contain Connection ${resp} ${ip} ${port} ${mode} ${version} ${state}
82 [Arguments] ${sgt} ${prefix} ${node}=127.0.0.1 ${domain}=global ${session}=session
83 [Documentation] Add binding via RPC to Master DB of node
84 ${DATA} Add Entry Xml ${sgt} ${prefix} ${node} ${domain}
85 Post To Controller ${session} add-entry ${DATA}
88 [Arguments] ${node}=127.0.0.1 ${session}=session ${domain}=global ${scope}=all
89 [Documentation] Gets all binding via RPC from Master DB of node
90 ${DATA} Get Bindings From Node Xml ${node} ${scope} ${domain}
91 ${resp1} CompareStream.Run_Keyword_If_At_Least_Boron TemplatedRequests.Post_To_Uri ${REST_CONTEXT}:get-node-bindings data=${DATA} accept=${ACCEPT_JSON} content_type=${HEADERS_XML}
92 ... session=${session}
93 ${resp2} CompareStream.Run_Keyword_If_Less_Than_Boron TemplatedRequests.Get_As_Json_From_Uri /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/ session=${session}
94 ${resp} CompareStream.Set_Variable_If_At_Least_Boron ${resp1} ${resp2}
98 [Arguments] ${node}=127.0.0.1 ${session}=session ${domain}=global
99 [Documentation] Delete all bindings via RPC from Master DB of node
100 ${resp} Get Bindings ${node} ${session} ${domain} local
101 @{bindings} CompareStream.Run_Keyword_If_At_Least_Else boron Parse Bindings ${resp}
102 ... ELSE Parse Prefix Groups ${resp} local
103 : FOR ${binding} IN @{bindings}
104 \ CompareStream.Run_Keyword_If_At_Least_Boron Clean Binding Default ${binding} ${node} ${session} ${domain}
105 \ CompareStream.Run_Keyword_If_At_Most_Beryllium Clean Binding At Most Be ${binding} ${node} ${session} ${domain}
107 Clean Binding Default
108 [Arguments] ${binding} ${node} ${session} ${domain}
109 [Documentation] Clean binding
110 Clean Binding ${binding['sgt']} ${binding['ip-prefix']} ${node} ${session}
112 Clean Binding At Most Be
113 [Arguments] ${binding} ${node} ${session} ${domain}
114 [Documentation] Clean binding
115 Clean Binding ${binding} ${binding['binding']} ${node} ${session}
118 [Arguments] ${sgt} ${prefixes} ${node} ${session} ${domain}=global
119 [Documentation] Used for nester FOR loop
120 : FOR ${prefix} IN @{prefixes}
121 \ CompareStream.Run_Keyword_If_At_Least_Boron Delete Binding Default ${sgt} ${prefix} ${node} ${domain}
123 \ CompareStream.Run_Keyword_If_At_Most_Beryllium Delete Binding Be ${sgt} ${prefix} ${node} ${domain}
127 [Arguments] ${sgtOld} ${prefixOld} ${sgtNew} ${prefixNew} ${node}=127.0.0.1 ${session}=session
129 [Documentation] Updates value of binding via RPC in Master DB of node
130 ${DATA} Update Binding Xml ${sgtOld} ${prefixOld} ${sgtNew} ${prefixNew} ${node}
132 Post To Controller ${session} update-entry ${DATA}
134 Delete Binding Default
135 [Arguments] ${sgt} ${prefix} ${node} ${domain} ${session}
136 [Documentation] Delete binding via RPC
137 Delete Binding ${sgt} ${prefix} ${node} ${domain} ${session}
140 [Arguments] ${sgt} ${prefix} ${node} ${domain} ${session}
141 [Documentation] Delete binding via RPC
142 Delete Binding ${sgt['sgt']} ${prefix['ip-prefix']} ${node} ${domain} ${session}
145 [Arguments] ${sgt} ${prefix} ${node}=127.0.0.1 ${domain}=global ${session}=session
146 [Documentation] Delete binding via RPC from Master DB of node
147 ${DATA} Delete Binding Xml ${sgt} ${prefix} ${node} ${domain}
148 Post To Controller ${session} delete-entry ${DATA}
151 [Arguments] ${name} ${peers}= ${node}=127.0.0.1 ${session}=session
152 [Documentation] Adds new PeerGroup via RPC to Node
153 ${DATA} Add Peer Group Xml ${name} ${peers} ${node}
154 Post To Controller ${session} add-peer-group ${DATA}
157 [Arguments] ${name} ${node}=127.0.0.1 ${session}=session
158 [Documentation] Delete PeerGroup via RPC from Node
159 ${DATA} Delete Peer Group Xml ${name} ${node}
160 Post To Controller ${session} delete-peer-group ${DATA}
163 [Arguments] ${node}=127.0.0.1 ${session}=session
164 [Documentation] Gets all PeerGroups via RPC from node
165 ${DATA} Get Peer Groups From Node Xml ${node}
166 ${resp} Post Request ${session} ${REST_CONTEXT}:get-peer-groups data=${DATA} headers=${HEADERS_XML}
167 Should be Equal As Strings ${resp.status_code} 200
168 [Return] ${resp.content}
171 [Arguments] ${node}=127.0.0.1 ${session}=session
172 [Documentation] Delete all PeerGroups via RPC from node
173 ${resp} Get Peer Groups ${node} ${session}
174 @{prefixes} Parse Peer Groups ${resp}
175 : FOR ${group} IN @{prefixes}
176 \ Delete Peer Group ${group['name']} ${node} ${session}
179 [Arguments] ${name} ${type} ${entries} ${node}=127.0.0.1 ${session}=session ${policy}=auto-update
180 [Documentation] Add Filter via RPC from Node
181 ${DATA} Run_Keyword_If_At_Least_Else carbon Add Filter Xml ${name} ${type} ${entries}
182 ... ${node} ${policy}
183 ... ELSE Add Filter Xml ${name} ${type} ${entries} ${node}
184 Post To Controller ${session} add-filter ${DATA}
187 [Arguments] ${name} ${domains} ${entries} ${node}=127.0.0.1 ${filter_name}=base-domain-filter ${session}=session
188 [Documentation] Add Domain Filter via RPC from Node
189 ${DATA} Add Domain Filter Xml ${name} ${domains} ${entries} ${node} ${filter_name}
190 Post To Controller ${session} add-domain-filter ${DATA}
193 [Arguments] ${name} ${type} ${node}=127.0.0.1 ${session}=session
194 [Documentation] Delete Filter via RPC from Node
195 ${DATA} Delete Filter Xml ${name} ${type} ${node}
196 Post To Controller ${session} delete-filter ${DATA}
199 [Arguments] ${name} ${node}=127.0.0.1 ${filter_name}=base-domain-filter ${session}=session
200 [Documentation] Delete Filter via RPC from Node
201 ${DATA} Delete Domain Filter Xml ${name} ${node} ${filter_name}
202 Post To Controller ${session} delete-domain-filter ${DATA}
204 Should Contain Binding
205 [Arguments] ${resp} ${sgt} ${prefix} ${db_source}=any
206 [Documentation] Tests if data contains specified binding
207 ${out} CompareStream.Run_Keyword_If_At_Least_Else boron Find Binding ${resp} ${sgt} ${prefix}
208 ... ELSE Find Binding Legacy ${resp} ${sgt} ${prefix} ${db_source}
210 Should Be True ${out} Doesn't have ${sgt} ${prefix}
212 Should Not Contain Binding
213 [Arguments] ${resp} ${sgt} ${prefix} ${db_source}=any
214 [Documentation] Tests if data doesn't contains specified binding
215 ${out} CompareStream.Run_Keyword_If_At_Least_Else boron Find Binding ${resp} ${sgt} ${prefix}
216 ... ELSE Find Binding Legacy ${resp} ${sgt} ${prefix} ${db_source}
218 Should Not Be True ${out} Should't have ${sgt} ${prefix}
220 Should Contain Connection
221 [Arguments] ${resp} ${ip} ${port} ${mode} ${version} ${state}=none
222 [Documentation] Test if data contains specified connection
223 ${out} Find Connection ${resp} ${version} ${mode} ${ip} ${port}
225 Should Be True ${out} Doesn't have ${ip}:${port} ${mode} ${version}
227 Should Not Contain Connection
228 [Arguments] ${resp} ${ip} ${port} ${mode} ${version} ${state}=none
229 [Documentation] Test if data doesn't contains specified connection
230 ${out} Find Connection ${resp} ${version} ${mode} ${ip} ${port}
232 Should Not Be True ${out} Shouldn't have ${ip}:${port} ${mode} ${version}
234 Setup Topology Complex
235 [Arguments] ${version}=version4 ${PASSWORD}=none
236 : FOR ${node} IN RANGE 2 6
237 \ Add Connection ${version} both 127.0.0.1 64999 127.0.0.${node}
239 \ Add Connection ${version} both 127.0.0.${node} 64999 127.0.0.1
241 \ Wait Until Keyword Succeeds 15 1 Verify Connection ${version} both
242 \ ... 127.0.0.${node}
243 \ Add Binding ${node}0 10.10.10.${node}0/32 127.0.0.${node}
244 \ Add Binding ${node}0 10.10.${node}0.0/24 127.0.0.${node}
245 \ Add Binding ${node}0 10.${node}0.0.0/16 127.0.0.${node}
246 \ Add Binding ${node}0 ${node}0.0.0.0/8 127.0.0.${node}
247 Add Binding 10 10.10.10.10/32 127.0.0.1
248 Add Binding 10 10.10.10.0/24 127.0.0.1
249 Add Binding 10 10.10.0.0/16 127.0.0.1
250 Add Binding 10 10.0.0.0/8 127.0.0.1
252 Verify Snapshot Was Pushed
253 [Arguments] ${snapshot_string}=22-sxp-controller-one-node.xml
254 [Documentation] Will succeed if the ${snapshot_string} is found in the karaf logs
255 ${output} Run Command On Controller ${ODL_SYSTEM_IP} cat ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log* | grep -c 'Successfully pushed configuration snapshot.*${snapshot_string}'
256 Should Not Be Equal As Strings ${output} 0
259 [Arguments] ${session}=session ${controller}=${ODL_SYSTEM_IP}
260 [Documentation] Create session to Controller
261 Verify Feature Is Installed odl-sxp-controller ${controller}
262 Create Session ${session} url=http://${controller}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
263 ${resp} RequestsLibrary.Get Request ${session} ${MODULES_API}
264 Should Be Equal As Strings ${resp.status_code} 200
265 Should Contain ${resp.content} ietf-restconf
268 [Documentation] Destroy created sessions
272 [Arguments] ${domain_name} ${node}=127.0.0.1 ${session}=session
273 [Documentation] Add Domain via RPC
274 ${DATA} Add Domain Xml ${node} ${domain_name}
275 Post To Controller ${session} add-domain ${DATA}
278 [Arguments] ${domain_name} ${node}=127.0.0.1 ${session}=session
279 [Documentation] Delete Domain via RPC
280 ${DATA} Delete Domain Xml ${node} ${domain_name}
281 Post To Controller ${session} delete-domain ${DATA}
284 [Arguments] ${sgt} ${prefixes} ${node}=127.0.0.1 ${session}=session ${domain}=global
285 [Documentation] Add bindings via RPC to Master DB of node
286 ${DATA} Add Bindings Xml ${node} ${domain} ${sgt} ${prefixes}
287 Post To Controller ${session} add-bindings ${DATA}
290 [Arguments] ${sgt} ${prefixes} ${node}=127.0.0.1 ${session}=session ${domain}=global
291 [Documentation] Delete bindings via RPC from Master DB of node
292 ${DATA} Delete Bindings Xml ${node} ${domain} ${sgt} ${prefixes}
293 Post To Controller ${session} delete-bindings ${DATA}
296 [Arguments] ${sgt} ${start} ${size} ${node}=127.0.0.1
297 [Documentation] Add Bindings to Node specified by range
298 ${prefixes} Prefix Range ${start} ${size}
299 Add Bindings ${sgt} ${prefixes} ${node}
301 Delete Bindings Range
302 [Arguments] ${sgt} ${start} ${size} ${node}=127.0.0.1
303 [Documentation] Delete Bindings to Node specified by range
304 ${prefixes} Prefix Range ${start} ${size}
305 Delete Bindings ${sgt} ${prefixes} ${node}
308 [Arguments] ${sgt} ${start} ${end} ${node}=127.0.0.1
309 [Documentation] Check if Node contains Bindings specified by range
310 ${resp} Get Bindings ${node}
311 : FOR ${num} IN RANGE ${start} ${end}
312 \ ${ip} Get Ip From Number ${num}
313 \ Should Contain Binding ${resp} ${sgt} ${ip}/32
315 Check Binding Range Negative
316 [Arguments] ${sgt} ${start} ${end} ${node}=127.0.0.1
317 [Documentation] Check if Node does not contains Bindings specified by range
318 ${resp} Get Bindings ${node}
319 : FOR ${num} IN RANGE ${start} ${end}
320 \ ${ip} Get Ip From Number ${num}
321 \ Should Not Contain Binding ${resp} ${sgt} ${ip}/32
323 Setup SXP Environment
324 [Arguments] ${node_range}=2
325 [Documentation] Create session to Controller, node_range parameter specifies number of nodes to be created plus one
327 : FOR ${num} IN RANGE 1 ${node_range}
328 \ ${ip} Get Ip From Number ${num}
329 \ CompareStream.Run_Keyword_If_At_Least_Boron Add Node ${ip}
330 \ CompareStream.Run_Keyword_If_At_Least_Boron Wait Until Keyword Succeeds 20 1 Check Node Started ${ip}
333 [Arguments] ${node} ${port}=64999 ${system}=${ODL_SYSTEM_IP} ${session}=session ${ip}=${node}
334 [Documentation] Verify that SxpNode has data writed to Operational datastore
335 ${resp} RequestsLibrary.Get Request ${session} /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/
336 Should Be Equal As Strings ${resp.status_code} 200
337 ${rc} Run Command On Remote System ${system} netstat -tln | grep -q ${ip}:${port} && echo 0 || echo 1 ${ODL_SYSTEM_USER} ${ODL_SYSTEM_PASSWORD} prompt=${ODL_SYSTEM_PROMPT}
338 Should Be Equal As Strings ${rc} 0
340 Clean SXP Environment
341 [Arguments] ${node_range}=2
342 [Documentation] Destroy created sessions
343 : FOR ${num} IN RANGE 1 ${node_range}
344 \ ${ip} Get Ip From Number ${num}
345 \ CompareStream.Run_Keyword_If_At_Least_Boron Delete Node ${ip}