2 Variables ../variables/Variables.py
3 Variables ../variables/topoprocessing/Topologies.py
4 Variables ../variables/topoprocessing/TopologyRequests.py
5 Library RequestsLibrary
8 Resource KarafKeywords.robot
12 ${CONFIGURATION_XML} ${CURDIR}/../suites/topoprocessing/configuration.xml
13 ${OPERATIONAL_XML} ${CURDIR}/../suites/topoprocessing/operational.xml
14 ${REMOTE_FILE} ${WORKSPACE}/${BUNDLEFOLDER}/etc/opendaylight/karaf/80-topoprocessing-config.xml
18 [Arguments] ${request} ${overlay_topology_url}
19 [Documentation] Send a simple HTTP PUT request to Configurational datastore
20 ${resp} Put Request session ${CONFIG_API}/${overlay_topology_url} data=${request}
21 Log ${CONFIG_API}/${overlay_topology_url}
22 Should Be Equal As Strings ${resp.status_code} 200
23 Wait For Karaf Log Correlation configuration successfully read
24 Wait For Karaf Log Transaction successfully written
26 Basic Request Get And Test
27 [Arguments] ${request} ${overlay_topology_url} ${should_contain} ${times}
28 [Documentation] Send a simple HTTP GET request to a given URL and test if response contains the expected item X times
29 ${resp} Basic Request Get ${overlay_topology_url}
30 Should Contain X Times ${resp.content} ${should_contain} ${times}
34 [Arguments] ${overlay_topology_url}
35 [Documentation] Send a simple HTTP GET request to a given URL
36 ${resp} Get Request session ${OPERATIONAL_API}/${overlay_topology_url}
37 Should Be Equal As Strings ${resp.status_code} 200
40 Send Basic Request And Test If Contain X Times
41 [Arguments] ${request} ${overlay_topology_url} ${should_contain} ${times}
42 [Documentation] Send a basic HTTP PUT request to a given URL and test if response contains the expexted item X times
43 Basic Request Put ${request} ${overlay_topology_url}
44 ${resp} Wait Until Keyword Succeeds 40x 250ms Basic Request Get And Test ${request} ${overlay_topology_url}
45 ... ${should_contain} ${times}
50 [Documentation] Setup karaf enviroment for following tests
51 Log ---- Setup Environment ----
52 Open Connection ${ODL_SYSTEM_IP}
53 Flexible Controller Login
54 Put File ${CONFIGURATION_XML} ${REMOTE_FILE}
56 Issue Command On Karaf Console log:set DEBUG org.opendaylight.topoprocessing
57 Install a Feature odl-restconf-noauth timeout=30
58 Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS}
59 ${features} Issue Command On Karaf Console feature:list -i
60 ${lines} Get Lines Containing String ${features} odl-topoprocessing-framework
61 ${length} Get Length ${lines}
62 Install a Feature odl-openflowplugin-nsf-model odl-topoprocessing-framework odl-topoprocessing-network-topology odl-topoprocessing-inventory odl-mdsal-models odl-ovsdb-southbound-impl timeout=120
63 Run Keyword If ${length} == 0 Wait For Karaf Log Registering Topology Request Listener 60
64 Prepare New Feature Installation
65 Insert Underlay topologies
68 [Documentation] Revert startup changes
69 Log ---- Clean Environment ----
70 Open Connection ${ODL_SYSTEM_IP}
71 Flexible Controller Login
72 Put File ${OPERATIONAL_XML} ${REMOTE_FILE}
77 [Arguments] ${overlay_topology}
78 [Documentation] Delete overlay topologies from datastore
79 Log ---- Test Teardown ----
80 Log Deleting overlay topology from ${CONFIG_API}/${overlay_topology}
81 ${resp} Delete Request session ${CONFIG_API}/${overlay_topology}
82 Should Be Equal As Strings ${resp.status_code} 200
84 Test Teardown With Underlay Topologies Refresh
85 [Arguments] ${overlay_topology}
86 [Documentation] Deletes given overlay topology from datastore and overwrites the underlaying ones with initial topologies
87 Test Teardown ${overlay_topology}
88 Insert Underlay Topologies
90 Prepare New Feature Installation
91 [Documentation] Clears karaf logs and CONFIGURATION datastore
92 ${resp} Delete Request session ${CONFIG_API}/network-topology:network-topology
93 ${resp} Delete Request session ${CONFIG_API}/opendaylight-inventory:nodes
94 Issue Command On Karaf Console log:clear
96 Insert Underlay Topologies
97 [Documentation] Insert underlay topologies used by following tests
98 Log Inserting underlay topologies
99 # Network underlay topologies
100 : FOR ${index} IN RANGE 1 7
101 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} data=${NETWORK_UNDERLAY_TOPOLOGY_${index}}
102 \ Log ${resp.content}
103 \ Should Be Equal As Strings ${resp.status_code} 200
104 # Openflow underlay nodes
105 ${resp} Put Request session ${CONFIG_API}/opendaylight-inventory:nodes data=${OPENFLOW_UNDERLAY_NODES}
107 Should Be Equal As Strings ${resp.status_code} 200
108 # Openflow underlay topologies
109 : FOR ${index} IN RANGE 1 7
110 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}}
111 \ Log ${resp.content}
112 \ Should Be Equal As Strings ${resp.status_code} 200
113 Issue Command On Karaf Console log:clear
116 Prepare Unification Inside Topology Request
117 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1}
118 [Documentation] Prepare topology request for unification inside from template
119 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
120 ${request_template} Set Element Text ${request_template} aggregation-only xpath=.//correlations/correlation/type
121 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
122 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
123 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
124 ${request_template} Set Element Text ${request_template} ${underlay_topo1} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
125 ${request_template} Element to String ${request_template}
126 [Return] ${request_template}
128 Prepare Unification Topology Request
129 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2}
130 [Documentation] Prepare topology request for unification on two topologies from template
131 ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${underlay_topo1}
132 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
133 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
134 ${request_template} Element to String ${request_template}
135 [Return] ${request_template}
137 Prepare Unification Filtration Topology Request
138 [Arguments] ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1} ${target_field2}
139 ... ${underlay_topo2}
140 [Documentation] Prepare topology request for unification on two topologies from template
141 ${request_template} Prepare Unification Filtration Inside Topology Request ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1}
142 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
143 Insert Target Field ${request_template} 2 ${target_field2} 1
144 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
145 ${request_template} Element to String ${request_template}
146 [Return] ${request_template}
148 Prepare Unification Filtration Inside Topology Request
149 [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo}
150 [Documentation] Prepare topology request for unification filtration inside from template
151 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
152 ${request_template} Set Element Text ${request_template} filtration-aggregation xpath=.//correlations/correlation/type
153 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
154 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
155 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
156 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
157 Insert Target Field ${request_template} 1 ${target-field} 1
158 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
159 ${request_template} Element to String ${request_template}
160 [Return] ${request_template}
163 [Arguments] ${request_template} ${mapping} ${filter_id}
164 ${request_template} Add Element ${request_template} ${APPLY_FILTERS} xpath=.//correlation/aggregation/mapping[${mapping}]
165 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters
166 [Return] ${request_template}
168 Prepare Filtration Topology Request
169 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo}
170 [Documentation] Prepare topology request for filtration from template
171 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
172 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
173 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
174 [Return] ${request_template}
177 [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key}
178 [Documentation] Add target field to request
179 ${target_field_template} Set Element Text ${TARGET_FIELD} ${target_field_path} xpath=.//target-field-path
180 ${target_field_template} Set Element Text ${target_field_template} ${matching_key} xpath=.//matching-key
181 ${request_template} Add Element ${request_template} ${target_field_template} xpath=.//correlation/aggregation/mapping[${mapping_index}]
182 ${request_template} Element to String ${request_template}
183 [Return] ${request_template}
186 [Arguments] ${request_template} ${filter_template} ${target_field}
187 [Documentation] Add filter to filtration
188 ${request_template} Add Element ${request_template} ${filter_template} xpath=.//correlation/filtration
189 ${model} Get Element Text ${request_template} xpath=.//correlations/output-model
190 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/filtration/filter/input-model
191 ${request_template} Set Element Text ${request_template} ${target_field} xpath=.//correlation/filtration/filter/target-field
192 [Return] ${request_template}
194 Insert Filter With ID
195 [Arguments] ${request_template} ${filter_template} ${target_field} ${filter_id}
196 [Documentation] Add filter to filtration with specified id
197 ${request_template} Insert Filter ${request_template} ${filter_template} ${target_field}
198 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/filtration/filter/filter-id
199 [Return] ${request_template}
202 [Arguments] ${request_template} ${ip_address}
203 [Documentation] Set filter ipv4 address
204 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address
205 ${request_template} Element to String ${request_template}
206 [Return] ${request_template}
208 Set Range Number Filter
209 [Arguments] ${request_template} ${min_number} ${max_number}
210 [Documentation] Set filter minimum and maximum number values
211 ${request_template} Set Element Text ${request_template} ${min_number} xpath=.//correlation/filtration/filter/range-number-filter/min-number-value
212 ${request_template} Set Element Text ${request_template} ${max_number} xpath=.//correlation/filtration/filter/range-number-filter/max-number-value
213 ${request_template} Element to String ${request_template}
214 [Return] ${request_template}
216 Set Range String Filter
217 [Arguments] ${request_template} ${min_value} ${max_value}
218 [Documentation] Set filter minimum and maximum string values
219 ${request_template} Set Element Text ${request_template} ${min_value} xpath=.//correlation/filtration/filter/range-string-filter/min-string-value
220 ${request_template} Set Element Text ${request_template} ${max_value} xpath=.//correlation/filtration/filter/range-string-filter/max-string-value
221 ${request_template} Element to String ${request_template}
222 [Return] ${request_template}
224 Set Specific Number Filter
225 [Arguments] ${request_template} ${number}
226 [Documentation] Set filter number value
227 ${request_template} Set Element Text ${request_template} ${number} xpath=.//correlation/filtration/filter/specific-number-filter/specific-number
228 ${request_template} Element to String ${request_template}
229 [Return] ${request_template}
231 Set Specific String Filter
232 [Arguments] ${request_template} ${string_value}
233 [Documentation] Set filter string value
234 ${request_template} Set Element Text ${request_template} ${string_value} xpath=.//correlation/filtration/filter/specific-string-filter/specific-string
235 ${request_template} Element to String ${request_template}
236 [Return] ${request_template}
239 [Arguments] ${request_template} ${ip_address}
240 [Documentation] Set filter ipv6 address
241 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address
242 ${request_template} Element to String ${request_template}
243 [Return] ${request_template}
246 [Arguments] ${request_template} ${script_language} ${script}
247 [Documentation] Set filter script
248 ${request_template} Set Element Text ${request_template} ${script_language} xpath=.//correlation/filtration/filter/script-filter/scripting/language
249 ${request_template} Set Element Text ${request_template} ${script} xpath=.//correlation/filtration/filter/script-filter/scripting/script
250 ${request_template} Element to String ${request_template}
251 [Return] ${request_template}
253 Insert Link Computation Inside
254 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology}
255 [Documentation] Add link computation to request
256 ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
257 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
258 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info/input-model
259 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
260 ${request_template} Set Element Text ${request_template} ${underlay_topology} xpath=.//link-computation/link-info/link-topology
261 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
262 ${request_template} Element to String ${request_template}
263 [Return] ${request_template}
265 Insert Link Computation
266 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2}
267 [Documentation] Add link computation to request
268 ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
269 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
270 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[1]/input-model
271 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[2]/input-model
272 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
273 ${request_template} Set Element Text ${request_template} ${underlay_topology_1} xpath=.//link-computation/link-info[1]/link-topology
274 ${request_template} Set Element Text ${request_template} ${underlay_topology_2} xpath=.//link-computation/link-info[2]/link-topology
275 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
276 ${request_template} Element to String ${request_template}
277 [Return] ${request_template}
279 Insert Scripting into Request
280 [Arguments] ${request} ${language} ${script}
281 [Documentation] Insert Scripting into Request under aggregation node
282 ${request} Add Element ${request} ${SCRIPTING} xpath=.//correlation/aggregation
283 ${request} Set Element Text ${request} ${script} xpath=.//correlation/aggregation/scripting/script
284 ${request} Set Element Text ${request} ${language} xpath=.//correlation/aggregation/scripting/language
285 ${request} Element to String ${request}
289 [Arguments] ${node-id} ${ovs-version}=23 ${router-id-ipv4}=10.0.0.1
290 [Documentation] Create an isis node element with id and ip
291 ${request} Set Element Text ${NODE_ISIS} ${node-id} xpath=.//node-id
292 ${request} Set Element Text ${request} ${ovs-version} xpath=.//ovs-version
293 ${request} Set Element Text ${request} ${router-id-ipv4} xpath=.//igp-node-attributes/isis-node-attributes/ted/te-router-id-ipv4
294 ${request} Element to String ${request}
298 [Arguments] ${node-id} ${ip-address}=10.0.0.1 ${serial-number}=27
299 [Documentation] Create an Openflow node element with id and ip
300 ${request} Set Element Text ${NODE_OPENFLOW} ${node-id} xpath=.//id
301 ${request} Set Element Text ${request} ${ip-address} xpath=.//ip-address
302 ${request} Set Element Text ${request} ${serial-number} xpath=.//serial-number
303 ${request} Element to String ${request}
306 Create OVSDB Termination Point
307 [Arguments] ${tp-id} ${ofport}
308 [Documentation] Create an OVSDB termination point element with id and port
309 ${request} Set Element Text ${TERMINATION_POINT_OVSDB} ${tp-id} xpath=.//tp-id
310 ${request} Set Element Text ${request} ${ofport} xpath=.//ofport
311 ${request} Element to String ${request}
314 Create Openflow Node Connector
315 [Arguments] ${nc-id} ${port-number}
316 [Documentation] Create an Openflow node connector element with id and port number
317 ${request} Set Element Text ${NODE_CONNECTOR_OPENFLOW} ${nc-id} xpath=.//id
318 ${request} Set Element Text ${request} ${port-number} xpath=.//port-number
319 ${request} Element to String ${request}
323 [Arguments] ${link-id} ${source-node} ${dest-node} ${name} ${metric}
324 ${request} Set Element Text ${LINK} ${link-id} xpath=.//link-id
325 ${request} Set Element Text ${request} ${source-node} xpath=.//source/source-node
326 ${request} Set Element Text ${request} ${dest-node} xpath=.//destination/dest-node
327 ${request} Set Element Text ${request} ${name} xpath=.//igp-link-attributes/name
328 ${request} Set Element Text ${request} ${metric} xpath=.//igp-link-attributes/metric
329 ${request} Element to String ${request}