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 Prepare New Feature Installation
79 [Documentation] Clears karaf logs and CONFIGURATION datastore
80 ${resp} Delete Request session ${CONFIG_API}/network-topology:network-topology
81 ${resp} Delete Request session ${CONFIG_API}/opendaylight-inventory:nodes
82 Issue Command On Karaf Console log:clear
84 Insert Underlay Topologies
85 [Documentation] Insert underlay topologies used by following tests
86 Log Inserting underlay topologies
87 # Network underlay topologies
88 : FOR ${index} IN RANGE 1 7
89 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} data=${NETWORK_UNDERLAY_TOPOLOGY_${index}}
91 \ Should Be Equal As Strings ${resp.status_code} 200
92 # Openflow underlay nodes
93 ${resp} Put Request session ${CONFIG_API}/opendaylight-inventory:nodes data=${OPENFLOW_UNDERLAY_NODES}
95 Should Be Equal As Strings ${resp.status_code} 200
96 # Openflow underlay topologies
97 : FOR ${index} IN RANGE 1 7
98 \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}}
100 \ Should Be Equal As Strings ${resp.status_code} 200
101 Issue Command On Karaf Console log:clear
104 Prepare Unification Inside Topology Request
105 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1}
106 [Documentation] Prepare topology request for unification inside from template
107 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
108 ${request_template} Set Element Text ${request_template} aggregation-only xpath=.//correlations/correlation/type
109 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
110 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
111 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
112 ${request_template} Set Element Text ${request_template} ${underlay_topo1} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
113 ${request_template} Element to String ${request_template}
114 [Return] ${request_template}
116 Prepare Unification Topology Request
117 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2}
118 [Documentation] Prepare topology request for unification on two topologies from template
119 ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${underlay_topo1}
120 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
121 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
122 ${request_template} Element to String ${request_template}
123 [Return] ${request_template}
125 Prepare Unification Filtration Topology Request
126 [Arguments] ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1} ${target_field2}
127 ... ${underlay_topo2}
128 [Documentation] Prepare topology request for unification on two topologies from template
129 ${request_template} Prepare Unification Filtration Inside Topology Request ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1}
130 ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
131 Insert Target Field ${request_template} 2 ${target_field2} 1
132 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
133 ${request_template} Element to String ${request_template}
134 [Return] ${request_template}
136 Prepare Unification Filtration Inside Topology Request
137 [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo}
138 [Documentation] Prepare topology request for unification filtration inside from template
139 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
140 ${request_template} Set Element Text ${request_template} filtration-aggregation xpath=.//correlations/correlation/type
141 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
142 ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
143 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
144 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
145 Insert Target Field ${request_template} 1 ${target-field} 1
146 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
147 ${request_template} Element to String ${request_template}
148 [Return] ${request_template}
151 [Arguments] ${request_template} ${mapping} ${filter_id}
152 ${request_template} Add Element ${request_template} ${APPLY_FILTERS} xpath=.//correlation/aggregation/mapping[${mapping}]
153 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters
154 [Return] ${request_template}
156 Prepare Filtration Topology Request
157 [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo}
158 [Documentation] Prepare topology request for filtration from template
159 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
160 ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
161 ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
162 [Return] ${request_template}
165 [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key}
166 [Documentation] Add target field to request
167 ${target_field_template} Set Element Text ${TARGET_FIELD} ${target_field_path} xpath=.//target-field-path
168 ${target_field_template} Set Element Text ${target_field_template} ${matching_key} xpath=.//matching-key
169 ${request_template} Add Element ${request_template} ${target_field_template} xpath=.//correlation/aggregation/mapping[${mapping_index}]
170 ${request_template} Element to String ${request_template}
171 [Return] ${request_template}
174 [Arguments] ${request_template} ${filter_template} ${target_field}
175 [Documentation] Add filter to filtration
176 ${request_template} Add Element ${request_template} ${filter_template} xpath=.//correlation/filtration
177 ${model} Get Element Text ${request_template} xpath=.//correlations/output-model
178 ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/filtration/filter/input-model
179 ${request_template} Set Element Text ${request_template} ${target_field} xpath=.//correlation/filtration/filter/target-field
180 [Return] ${request_template}
182 Insert Filter With ID
183 [Arguments] ${request_template} ${filter_template} ${target_field} ${filter_id}
184 [Documentation] Add filter to filtration with specified id
185 ${request_template} Insert Filter ${request_template} ${filter_template} ${target_field}
186 ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/filtration/filter/filter-id
187 [Return] ${request_template}
190 [Arguments] ${request_template} ${ip_address}
191 [Documentation] Set filter ipv4 address
192 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address
193 ${request_template} Element to String ${request_template}
194 [Return] ${request_template}
196 Set Range Number Filter
197 [Arguments] ${request_template} ${min_number} ${max_number}
198 [Documentation] Set filter minimum and maximum number values
199 ${request_template} Set Element Text ${request_template} ${min_number} xpath=.//correlation/filtration/filter/range-number-filter/min-number-value
200 ${request_template} Set Element Text ${request_template} ${max_number} xpath=.//correlation/filtration/filter/range-number-filter/max-number-value
201 ${request_template} Element to String ${request_template}
202 [Return] ${request_template}
204 Set Range String Filter
205 [Arguments] ${request_template} ${min_value} ${max_value}
206 [Documentation] Set filter minimum and maximum string values
207 ${request_template} Set Element Text ${request_template} ${min_value} xpath=.//correlation/filtration/filter/range-string-filter/min-string-value
208 ${request_template} Set Element Text ${request_template} ${max_value} xpath=.//correlation/filtration/filter/range-string-filter/max-string-value
209 ${request_template} Element to String ${request_template}
210 [Return] ${request_template}
212 Set Specific Number Filter
213 [Arguments] ${request_template} ${number}
214 [Documentation] Set filter number value
215 ${request_template} Set Element Text ${request_template} ${number} xpath=.//correlation/filtration/filter/specific-number-filter/specific-number
216 ${request_template} Element to String ${request_template}
217 [Return] ${request_template}
219 Set Specific String Filter
220 [Arguments] ${request_template} ${string_value}
221 [Documentation] Set filter string value
222 ${request_template} Set Element Text ${request_template} ${string_value} xpath=.//correlation/filtration/filter/specific-string-filter/specific-string
223 ${request_template} Element to String ${request_template}
224 [Return] ${request_template}
227 [Arguments] ${request_template} ${ip_address}
228 [Documentation] Set filter ipv6 address
229 ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address
230 ${request_template} Element to String ${request_template}
231 [Return] ${request_template}
234 [Arguments] ${request_template} ${script_language} ${script}
235 [Documentation] Set filter script
236 ${request_template} Set Element Text ${request_template} ${script_language} xpath=.//correlation/filtration/filter/script-filter/scripting/language
237 ${request_template} Set Element Text ${request_template} ${script} xpath=.//correlation/filtration/filter/script-filter/scripting/script
238 ${request_template} Element to String ${request_template}
239 [Return] ${request_template}
241 Insert Link Computation Inside
242 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology}
243 [Documentation] Add link computation to request
244 ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
245 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
246 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info/input-model
247 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
248 ${request_template} Set Element Text ${request_template} ${underlay_topology} xpath=.//link-computation/link-info/link-topology
249 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
250 ${request_template} Element to String ${request_template}
251 [Return] ${request_template}
253 Insert Link Computation
254 [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2}
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[1]/input-model
259 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[2]/input-model
260 ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
261 ${request_template} Set Element Text ${request_template} ${underlay_topology_1} xpath=.//link-computation/link-info[1]/link-topology
262 ${request_template} Set Element Text ${request_template} ${underlay_topology_2} xpath=.//link-computation/link-info[2]/link-topology
263 ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
264 ${request_template} Element to String ${request_template}
265 [Return] ${request_template}
267 Insert Scripting into Request
268 [Arguments] ${request} ${language} ${script}
269 [Documentation] Insert Scripting into Request under aggregation node
270 ${request} Add Element ${request} ${SCRIPTING} xpath=.//correlation/aggregation
271 ${request} Set Element Text ${request} ${script} xpath=.//correlation/aggregation/scripting/script
272 ${request} Set Element Text ${request} ${language} xpath=.//correlation/aggregation/scripting/language
273 ${request} Element to String ${request}