topoprocessing - fix for bug 5448
[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 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
83
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}}
90     \    Log    ${resp.content}
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}
94     Log    ${resp.content}
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}}
99     \    Log    ${resp.content}
100     \    Should Be Equal As Strings    ${resp.status_code}    200
101     Issue Command On Karaf Console    log:clear
102     Log    ${resp.content}
103
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}
115
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}
124
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}
135
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}
149
150 Insert Apply Filters
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}
155
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}
163
164 Insert Target Field
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}
172
173 Insert Filter
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}
181
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}
188
189 Set IPV4 Filter
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}
195
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}
203
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}
211
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}
218
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}
225
226 Set IPV6 Filter
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}
232
233 Set Script Filter
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}
240
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}
252
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}
266
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}
274     [Return]    ${request}