Added termination point test cases to the update suite.
[integration/test.git] / csit / libraries / TopoprocessingKeywords.robot
1 *** Settings ***
2 Variables         ../variables/Variables.py
3 Variables         ../variables/topoprocessing/Topologies.py
4 Variables         ../variables/topoprocessing/TopologyRequests.py
5 Library           RequestsLibrary
6 Library           SSHLibrary
7 Library           XML
8 Resource          KarafKeywords.robot
9 Resource          Utils.robot
10
11 *** Variables ***
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
15
16 *** Keywords ***
17 Basic Request Put
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
25
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}
32     [Return]    ${resp}
33
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}
40     Log    ${resp.content}
41     [Return]    ${resp}
42
43 Setup Environment
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}
49     Close Connection
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
60
61 Clean Environment
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}
67     Close Connection
68     Delete All Sessions
69
70 Test Teardown
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
77
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
83
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
89
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}}
96     \    Log    ${resp.content}
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}
100     Log    ${resp.content}
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
108     Log    ${resp.content}
109
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}
121
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}
130
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}
141
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}
155
156 Insert Apply Filters
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}
161
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}
169
170 Insert Target Field
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}
178
179 Insert Filter
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}
187
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}
194
195 Set IPV4 Filter
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}
201
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}
209
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}
217
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}
224
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}
231
232 Set IPV6 Filter
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}
238
239 Set Script Filter
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}
246
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}
258
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}
272
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}
280     [Return]    ${request}
281
282 Create Isis Node
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}
288     [Return ]    ${request}
289
290 Create Openflow Node
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}
296     [Return ]    ${request}
297
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}
304     [Return ]    ${request}
305
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}
312     [Return ]    ${request}