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] Test basic aggregation
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] Test basic aggregation
29 ${resp} Get Request session ${OPERATIONAL_API}/${overlay_topology_url}
30 Should Be Equal As Strings ${resp.status_code} 200
31 Should Contain X Times ${resp.content} ${should_contain} ${times}
34 Send Basic Request And Test If Contain X Times
35 [Arguments] ${request} ${overlay_topology_url} ${should_contain} ${times}
36 [Documentation] Test basic aggregation
37 Basic Request Put ${request} ${overlay_topology_url}
38 ${resp} Wait Until Keyword Succeeds 40x 250ms Basic Request Get And Test ${request} ${overlay_topology_url}
39 ... ${should_contain} ${times}
44 [Documentation] Setup karaf enviroment for following tests
45 Log ---- Setup Environment ----
46 Open Connection ${ODL_SYSTEM_IP}
47 Flexible Controller Login
48 Put File ${CONFIGURATION_XML} ${REMOTE_FILE}
50 Issue Command On Karaf Console log:set DEBUG org.opendaylight.topoprocessing
51 Install a Feature odl-restconf-noauth timeout=30
52 Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS}
53 ${features} Issue Command On Karaf Console feature:list -i
54 ${lines} Get Lines Containing String ${features} odl-topoprocessing-framework
55 ${length} Get Length ${lines}
56 Install a Feature odl-openflowplugin-nsf-model-li odl-topoprocessing-framework odl-topoprocessing-network-topology odl-topoprocessing-inventory odl-mdsal-models odl-ovsdb-southbound-impl timeout=120
57 Run Keyword If ${length} == 0 Wait For Karaf Log Registering Topology Request Listener 60
58 Prepare New Feature Installation
59 Insert Underlay topologies
62 [Documentation] Revert startup changes
63 Log ---- Clean Environment ----
64 Open Connection ${ODL_SYSTEM_IP}
65 Flexible Controller Login
66 Put File ${OPERATIONAL_XML} ${REMOTE_FILE}
71 [Arguments] ${overlay_topology}
72 [Documentation] Delete overlay topologies from datastore
73 Log ---- Test Teardown ----
74 Log Deleting overlay topology from ${CONFIG_API}/${overlay_topology}
75 ${resp} Delete Request session ${CONFIG_API}/${overlay_topology}
76 Should Be Equal As Strings ${resp.status_code} 200
78 Test Teardown With Underlay Topologies Refresh
79 [Arguments] ${overlay_topology}
80 [Documentation] Deletes given overlay topology from datastore and overwrites the underlaying ones with initial topologies
81 Test Teardown ${overlay_topology}
82 Insert Underlay Topologies
84 Prepare New Feature Installation
85 [Documentation] Clears karaf logs and CONFIGURATION datastore
86 ${resp} Delete Request session ${CONFIG_API}/network-topology:network-topology
87 ${resp} Delete Request session ${CONFIG_API}/opendaylight-inventory:nodes
88 Issue Command On Karaf Console log:clear
90 Insert Underlay Topologies
91 [Documentation] Insert underlay topologies used by following tests
92 Log Inserting underlay topologies
93 # Network underlay topologies
94 : FOR ${index} IN RANGE 1 7
95 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} data=${NETWORK_UNDERLAY_TOPOLOGY_${index}}
97 \ Should Be Equal As Strings ${resp.status_code} 200
98 # Openflow underlay nodes
99 ${resp} Put Request session ${CONFIG_API}/opendaylight-inventory:nodes data=${OPENFLOW_UNDERLAY_NODES}
101 Should Be Equal As Strings ${resp.status_code} 200
102 # Openflow underlay topologies
103 : FOR ${index} IN RANGE 1 7
104 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}}
105 \ Log ${resp.content}
106 \ Should Be Equal As Strings ${resp.status_code} 200
107 Issue Command On Karaf Console log:clear
110 Prepare Unification Inside Topology Request
111 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1}
112 [Documentation] Prepare topology request for unification inside from template
113 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
114 ${request_template} Set Element Text ${request_template} aggregation-only xpath=.//correlations/correlation/type
115 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
116 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
117 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
118 ${request_template} Set Element Text ${request_template} ${underlay_topo1} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
119 ${request_template} Element to String ${request_template}
120 [Return] ${request_template}
122 Prepare Unification Topology Request
123 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2}
124 [Documentation] Prepare topology request for unification on two topologies from template
125 ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${underlay_topo1}
126 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
127 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
128 ${request_template} Element to String ${request_template}
129 [Return] ${request_template}
131 Prepare Unification Filtration Topology Request
132 [Arguments] ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1} ${target_field2}
133 ... ${underlay_topo2}
134 [Documentation] Prepare topology request for unification on two topologies from template
135 ${request_template} Prepare Unification Filtration Inside Topology Request ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1}
136 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
137 Insert Target Field ${request_template} 2 ${target_field2} 1
138 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
139 ${request_template} Element to String ${request_template}
140 [Return] ${request_template}
142 Prepare Unification Filtration Inside Topology Request
143 [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo}
144 [Documentation] Prepare topology request for unification filtration inside from template
145 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
146 ${request_template} Set Element Text ${request_template} filtration-aggregation xpath=.//correlations/correlation/type
147 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
148 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
149 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
150 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
151 Insert Target Field ${request_template} 1 ${target-field} 1
152 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
153 ${request_template} Element to String ${request_template}
154 [Return] ${request_template}
157 [Arguments] ${request_template} ${mapping} ${filter_id}
158 ${request_template} Add Element ${request_template} ${APPLY_FILTERS} xpath=.//correlation/aggregation/mapping[${mapping}]
159 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters
160 [Return] ${request_template}
162 Prepare Filtration Topology Request
163 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo}
164 [Documentation] Prepare topology request for filtration from template
165 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
166 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
167 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
168 [Return] ${request_template}
171 [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key}
172 [Documentation] Add target field to request
173 ${target_field_template} Set Element Text ${TARGET_FIELD} ${target_field_path} xpath=.//target-field-path
174 ${target_field_template} Set Element Text ${target_field_template} ${matching_key} xpath=.//matching-key
175 ${request_template} Add Element ${request_template} ${target_field_template} xpath=.//correlation/aggregation/mapping[${mapping_index}]
176 ${request_template} Element to String ${request_template}
177 [Return] ${request_template}
180 [Arguments] ${request_template} ${filter_template} ${target_field}
181 [Documentation] Add filter to filtration
182 ${request_template} Add Element ${request_template} ${filter_template} xpath=.//correlation/filtration
183 ${model} Get Element Text ${request_template} xpath=.//correlations/output-model
184 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/filtration/filter/input-model
185 ${request_template} Set Element Text ${request_template} ${target_field} xpath=.//correlation/filtration/filter/target-field
186 [Return] ${request_template}
188 Insert Filter With ID
189 [Arguments] ${request_template} ${filter_template} ${target_field} ${filter_id}
190 [Documentation] Add filter to filtration with specified id
191 ${request_template} Insert Filter ${request_template} ${filter_template} ${target_field}
192 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/filtration/filter/filter-id
193 [Return] ${request_template}
196 [Arguments] ${request_template} ${ip_address}
197 [Documentation] Set filter ipv4 address
198 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address
199 ${request_template} Element to String ${request_template}
200 [Return] ${request_template}
202 Set Range Number Filter
203 [Arguments] ${request_template} ${min_number} ${max_number}
204 [Documentation] Set filter minimum and maximum number values
205 ${request_template} Set Element Text ${request_template} ${min_number} xpath=.//correlation/filtration/filter/range-number-filter/min-number-value
206 ${request_template} Set Element Text ${request_template} ${max_number} xpath=.//correlation/filtration/filter/range-number-filter/max-number-value
207 ${request_template} Element to String ${request_template}
208 [Return] ${request_template}
210 Set Range String Filter
211 [Arguments] ${request_template} ${min_value} ${max_value}
212 [Documentation] Set filter minimum and maximum string values
213 ${request_template} Set Element Text ${request_template} ${min_value} xpath=.//correlation/filtration/filter/range-string-filter/min-string-value
214 ${request_template} Set Element Text ${request_template} ${max_value} xpath=.//correlation/filtration/filter/range-string-filter/max-string-value
215 ${request_template} Element to String ${request_template}
216 [Return] ${request_template}
218 Set Specific Number Filter
219 [Arguments] ${request_template} ${number}
220 [Documentation] Set filter number value
221 ${request_template} Set Element Text ${request_template} ${number} xpath=.//correlation/filtration/filter/specific-number-filter/specific-number
222 ${request_template} Element to String ${request_template}
223 [Return] ${request_template}
225 Set Specific String Filter
226 [Arguments] ${request_template} ${string_value}
227 [Documentation] Set filter string value
228 ${request_template} Set Element Text ${request_template} ${string_value} xpath=.//correlation/filtration/filter/specific-string-filter/specific-string
229 ${request_template} Element to String ${request_template}
230 [Return] ${request_template}
233 [Arguments] ${request_template} ${ip_address}
234 [Documentation] Set filter ipv6 address
235 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address
236 ${request_template} Element to String ${request_template}
237 [Return] ${request_template}
240 [Arguments] ${request_template} ${script_language} ${script}
241 [Documentation] Set filter script
242 ${request_template} Set Element Text ${request_template} ${script_language} xpath=.//correlation/filtration/filter/script-filter/scripting/language
243 ${request_template} Set Element Text ${request_template} ${script} xpath=.//correlation/filtration/filter/script-filter/scripting/script
244 ${request_template} Element to String ${request_template}
245 [Return] ${request_template}
247 Insert Link Computation Inside
248 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology}
249 [Documentation] Add link computation to request
250 ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
251 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
252 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info/input-model
253 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
254 ${request_template} Set Element Text ${request_template} ${underlay_topology} xpath=.//link-computation/link-info/link-topology
255 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
256 ${request_template} Element to String ${request_template}
257 [Return] ${request_template}
259 Insert Link Computation
260 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2}
261 [Documentation] Add link computation to request
262 ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
263 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
264 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[1]/input-model
265 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[2]/input-model
266 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
267 ${request_template} Set Element Text ${request_template} ${underlay_topology_1} xpath=.//link-computation/link-info[1]/link-topology
268 ${request_template} Set Element Text ${request_template} ${underlay_topology_2} xpath=.//link-computation/link-info[2]/link-topology
269 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
270 ${request_template} Element to String ${request_template}
271 [Return] ${request_template}
273 Insert Scripting into Request
274 [Arguments] ${request} ${language} ${script}
275 [Documentation] Insert Scripting into Request under aggregation node
276 ${request} Add Element ${request} ${SCRIPTING} xpath=.//correlation/aggregation
277 ${request} Set Element Text ${request} ${script} xpath=.//correlation/aggregation/scripting/script
278 ${request} Set Element Text ${request} ${language} xpath=.//correlation/aggregation/scripting/language
279 ${request} Element to String ${request}
283 [Arguments] ${node-id} ${router-id-ipv4}
284 [Documentation] Create an isis node element with id and ip
285 ${request} Set Element Text ${NODE_ISIS} ${node-id} xpath=.//node-id
286 ${request} Set Element Text ${request} ${router-id-ipv4} xpath=.//igp-node-attributes/isis-node-attributes/ted/te-router-id-ipv4
287 ${request} Element to String ${request}
291 [Arguments] ${node-id} ${ip-address}
292 [Documentation] Create an Openflow node element with id and ip
293 ${request} Set Element Text ${NODE_OPENFLOW} ${node-id} xpath=.//id
294 ${request} Set Element Text ${request} ${ip-address} xpath=.//ip-address
295 ${request} Element to String ${request}
298 Create OVSDB Termination Point
299 [Arguments] ${tp-id} ${ofport}
300 [Documentation] Create an OVSDB termination point element with id and port
301 ${request} Set Element Text ${TERMINATION_POINT_OVSDB} ${tp-id} xpath=.//tp-id
302 ${request} Set Element Text ${request} ${ofport} xpath=.//ofport
303 ${request} Element to String ${request}
306 Create Openflow Node Connector
307 [Arguments] ${nc-id} ${port-number}
308 [Documentation] Create an Openflow node connector element with id and port number
309 ${request} Set Element Text ${NODE_CONNECTOR_OPENFLOW} ${nc-id} xpath=.//id
310 ${request} Set Element Text ${request} ${port-number} xpath=.//port-number
311 ${request} Element to String ${request}