Topoprocessing - tests correction
[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 Send Basic Request
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     ${resp}    Get Request    session    ${OPERATIONAL_API}/${overlay_topology_url}
26     Should Be Equal As Strings    ${resp.status_code}    200
27     Log    ${resp.content}
28     [Return]    ${resp}
29
30 Setup Environment
31     [Documentation]    Setup karaf enviroment for following tests
32     Log    ---- Setup Environment ----
33     Open Connection    ${ODL_SYSTEM_IP}
34     Flexible Controller Login
35     Put File    ${CONFIGURATION_XML}    ${REMOTE_FILE}
36     Close Connection
37     Issue Command On Karaf Console    log:set DEBUG org.opendaylight.topoprocessing
38     Install a Feature    odl-restconf-noauth    timeout=30
39     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${SEND_ACCEPT_XML_HEADERS}
40     ${features}    Issue Command On Karaf Console    feature:list -i
41     ${lines}    Get Lines Containing String    ${features}    odl-topoprocessing-framework
42     ${length}    Get Length    ${lines}
43     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
44     Run Keyword If    ${length} == 0    Wait For Karaf Log    Registering Topology Request Listener    60
45     Prepare New Feature Installation
46     Insert Underlay topologies
47
48 Clean Environment
49     [Documentation]    Revert startup changes
50     Log    ---- Clean Environment ----
51     Open Connection    ${ODL_SYSTEM_IP}
52     Flexible Controller Login
53     Put File    ${OPERATIONAL_XML}    ${REMOTE_FILE}
54     Close Connection
55     Delete All Sessions
56
57 Test Teardown
58     [Arguments]    ${overlay_topology}
59     [Documentation]    Delete overlay topologies from datastore
60     Log    ---- Test Teardown ----
61     Log    Deleting overlay topology from ${CONFIG_API}/${overlay_topology}
62     ${resp}    Delete Request    session    ${CONFIG_API}/${overlay_topology}
63     Should Be Equal As Strings    ${resp.status_code}    200
64
65 Prepare New Feature Installation
66     [Documentation]    Clears karaf logs and CONFIGURATION datastore
67     ${resp}    Delete Request    session    ${CONFIG_API}/network-topology:network-topology
68     ${resp}    Delete Request    session    ${CONFIG_API}/opendaylight-inventory:nodes
69     Issue Command On Karaf Console    log:clear
70
71 Insert Underlay Topologies
72     [Documentation]    Insert underlay topologies used by following tests
73     Log    Inserting underlay topologies
74     # Network underlay topologies
75     : FOR    ${index}    IN RANGE    1    7
76     \    ${resp}    Put Request    session    ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index}    data=${NETWORK_UNDERLAY_TOPOLOGY_${index}}
77     \    Log    ${resp.content}
78     \    Should Be Equal As Strings    ${resp.status_code}    200
79     # Openflow underlay nodes
80     ${resp}    Put Request    session    ${CONFIG_API}/opendaylight-inventory:nodes    data=${OPENFLOW_UNDERLAY_NODES}
81     Log    ${resp.content}
82     Should Be Equal As Strings    ${resp.status_code}    200
83     # Openflow underlay topologies
84     : FOR    ${index}    IN RANGE    1    7
85     \    ${resp}    Put Request    session    ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index}    data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}}
86     \    Log    ${resp.content}
87     \    Should Be Equal As Strings    ${resp.status_code}    200
88     Issue Command On Karaf Console    log:clear
89     Log    ${resp.content}
90
91 Prepare Unification Inside Topology Request
92     [Arguments]    ${request_template}    ${model}    ${correlation_item}    ${underlay_topo1}
93     [Documentation]    Prepare topology request for unification inside from template
94     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlations/output-model
95     ${request_template}    Set Element Text    ${request_template}    aggregation-only    xpath=.//correlations/correlation/type
96     ${request_template}    Set Element Text    ${request_template}    ${correlation_item}    xpath=.//correlation/correlation-item
97     ${request_template}    Set Element Text    ${request_template}    unification    xpath=.//correlation/aggregation/aggregation-type
98     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlation/aggregation/mapping[1]/input-model
99     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo1}    xpath=.//correlation/aggregation/mapping[1]/underlay-topology
100     ${request_template}    Element to String    ${request_template}
101     [Return]    ${request_template}
102
103 Prepare Unification Topology Request
104     [Arguments]    ${request_template}    ${model}    ${correlation_item}    ${underlay_topo1}    ${underlay_topo2}
105     [Documentation]    Prepare topology request for unification on two topologies from template
106     ${request_template}    Prepare Unification Inside Topology Request    ${request_template}    ${model}    ${correlation_item}    ${underlay_topo1}
107     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo2}    xpath=.//correlation/aggregation/mapping[2]/underlay-topology
108     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlation/aggregation/mapping[2]/input-model
109     ${request_template}    Element to String    ${request_template}
110     [Return]    ${request_template}
111
112 Prepare Unification Filtration Topology Request
113     [Arguments]    ${request_template}    ${model}    ${correlation_item}    ${target_field1}    ${underlay_topo1}    ${target_field2}
114     ...    ${underlay_topo2}
115     [Documentation]    Prepare topology request for unification on two topologies from template
116     ${request_template}    Prepare Unification Filtration Inside Topology Request    ${request_template}    ${model}    ${correlation_item}    ${target_field1}    ${underlay_topo1}
117     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo2}    xpath=.//correlation/aggregation/mapping[2]/underlay-topology
118     Insert Target Field    ${request_template}    2    ${target_field2}    1
119     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlation/aggregation/mapping[2]/input-model
120     ${request_template}    Element to String    ${request_template}
121     [Return]    ${request_template}
122
123 Prepare Unification Filtration Inside Topology Request
124     [Arguments]    ${request_template}    ${model}    ${correlation_item}    ${target-field}    ${underlay_topo}
125     [Documentation]    Prepare topology request for unification filtration inside from template
126     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlations/output-model
127     ${request_template}    Set Element Text    ${request_template}    filtration-aggregation    xpath=.//correlations/correlation/type
128     ${request_template}    Set Element Text    ${request_template}    ${correlation_item}    xpath=.//correlation/correlation-item
129     ${request_template}    Set Element Text    ${request_template}    unification    xpath=.//correlation/aggregation/aggregation-type
130     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlation/aggregation/mapping[1]/input-model
131     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo}    xpath=.//correlation/aggregation/mapping[1]/underlay-topology
132     Insert Target Field    ${request_template}    1    ${target-field}    1
133     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo}    xpath=.//correlation/filtration/underlay-topology
134     ${request_template}    Element to String    ${request_template}
135     [Return]    ${request_template}
136
137 Insert Apply Filters
138     [Arguments]    ${request_template}    ${mapping}    ${filter_id}
139     ${request_template}    Add Element    ${request_template}    ${APPLY_FILTERS}    xpath=.//correlation/aggregation/mapping[${mapping}]
140     ${request_template}    Set Element Text    ${request_template}    ${filter_id}    xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters
141     [Return]    ${request_template}
142
143 Prepare Filtration Topology Request
144     [Arguments]    ${request_template}    ${model}    ${correlation_item}    ${underlay_topo}
145     [Documentation]    Prepare topology request for filtration from template
146     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlations/output-model
147     ${request_template}    Set Element Text    ${request_template}    ${correlation_item}    xpath=.//correlation/correlation-item
148     ${request_template}    Set Element Text    ${request_template}    ${underlay_topo}    xpath=.//correlation/filtration/underlay-topology
149     [Return]    ${request_template}
150
151 Insert Target Field
152     [Arguments]    ${request_template}    ${mapping_index}    ${target_field_path}    ${matching_key}
153     [Documentation]    Add target field to request
154     ${target_field_template}    Set Element Text    ${TARGET_FIELD}    ${target_field_path}    xpath=.//target-field-path
155     ${target_field_template}    Set Element Text    ${target_field_template}    ${matching_key}    xpath=.//matching-key
156     ${request_template}    Add Element    ${request_template}    ${target_field_template}    xpath=.//correlation/aggregation/mapping[${mapping_index}]
157     ${request_template}    Element to String    ${request_template}
158     [Return]    ${request_template}
159
160 Insert Filter
161     [Arguments]    ${request_template}    ${filter_template}    ${target_field}
162     [Documentation]    Add filter to filtration
163     ${request_template}    Add Element    ${request_template}    ${filter_template}    xpath=.//correlation/filtration
164     ${model}    Get Element Text    ${request_template}    xpath=.//correlations/output-model
165     ${request_template}    Set Element Text    ${request_template}    ${model}    xpath=.//correlation/filtration/filter/input-model
166     ${request_template}    Set Element Text    ${request_template}    ${target_field}    xpath=.//correlation/filtration/filter/target-field
167     [Return]    ${request_template}
168
169 Insert Filter With ID
170     [Arguments]    ${request_template}    ${filter_template}    ${target_field}    ${filter_id}
171     [Documentation]    Add filter to filtration with specified id
172     ${request_template}    Insert Filter    ${request_template}    ${filter_template}    ${target_field}
173     ${request_template}    Set Element Text    ${request_template}    ${filter_id}    xpath=.//correlation/filtration/filter/filter-id
174     [Return]    ${request_template}
175
176 Set IPV4 Filter
177     [Arguments]    ${request_template}    ${ip_address}
178     [Documentation]    Set filter ipv4 address
179     ${request_template}    Set Element Text    ${request_template}    ${ip_address}    xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address
180     ${request_template}    Element to String    ${request_template}
181     [Return]    ${request_template}
182
183 Set Range Number Filter
184     [Arguments]    ${request_template}    ${min_number}    ${max_number}
185     [Documentation]    Set filter minimum and maximum number values
186     ${request_template}    Set Element Text    ${request_template}    ${min_number}    xpath=.//correlation/filtration/filter/range-number-filter/min-number-value
187     ${request_template}    Set Element Text    ${request_template}    ${max_number}    xpath=.//correlation/filtration/filter/range-number-filter/max-number-value
188     ${request_template}    Element to String    ${request_template}
189     [Return]    ${request_template}
190
191 Set Range String Filter
192     [Arguments]    ${request_template}    ${min_value}    ${max_value}
193     [Documentation]    Set filter minimum and maximum string values
194     ${request_template}    Set Element Text    ${request_template}    ${min_value}    xpath=.//correlation/filtration/filter/range-string-filter/min-string-value
195     ${request_template}    Set Element Text    ${request_template}    ${max_value}    xpath=.//correlation/filtration/filter/range-string-filter/max-string-value
196     ${request_template}    Element to String    ${request_template}
197     [Return]    ${request_template}
198
199 Set Specific Number Filter
200     [Arguments]    ${request_template}    ${number}
201     [Documentation]    Set filter number value
202     ${request_template}    Set Element Text    ${request_template}    ${number}    xpath=.//correlation/filtration/filter/specific-number-filter/specific-number
203     ${request_template}    Element to String    ${request_template}
204     [Return]    ${request_template}
205
206 Set Specific String Filter
207     [Arguments]    ${request_template}    ${string_value}
208     [Documentation]    Set filter string value
209     ${request_template}    Set Element Text    ${request_template}    ${string_value}    xpath=.//correlation/filtration/filter/specific-string-filter/specific-string
210     ${request_template}    Element to String    ${request_template}
211     [Return]    ${request_template}
212
213 Set IPV6 Filter
214     [Arguments]    ${request_template}    ${ip_address}
215     [Documentation]    Set filter ipv6 address
216     ${request_template}    Set Element Text    ${request_template}    ${ip_address}    xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address
217     ${request_template}    Element to String    ${request_template}
218     [Return]    ${request_template}
219
220 Set Script Filter
221     [Arguments]    ${request_template}    ${script_language}    ${script}
222     [Documentation]    Set filter script
223     ${request_template}    Set Element Text    ${request_template}    ${script_language}    xpath=.//correlation/filtration/filter/script-filter/scripting/language
224     ${request_template}    Set Element Text    ${request_template}    ${script}    xpath=.//correlation/filtration/filter/script-filter/scripting/script
225     ${request_template}    Element to String    ${request_template}
226     [Return]    ${request_template}
227
228 Insert Link Computation Inside
229     [Arguments]    ${request_template}    ${link_computation_template}    ${input_model}    ${underlay_topology}
230     [Documentation]    Add link computation to request
231     ${request_template}    Add Element    ${request_template}    ${link_computation_template}    xpath=.
232     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/node-info/input-model
233     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/link-info/input-model
234     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/output-model
235     ${request_template}    Set Element Text    ${request_template}    ${underlay_topology}    xpath=.//link-computation/link-info/link-topology
236     ${request_template}    Set Element Attribute    ${request_template}    xmlns:n    urn:opendaylight:topology:correlation    xpath=./link-computation
237     ${request_template}    Element to String    ${request_template}
238     [Return]    ${request_template}
239
240 Insert Link Computation
241     [Arguments]    ${request_template}    ${link_computation_template}    ${input_model}    ${underlay_topology_1}    ${underlay_topology_2}
242     [Documentation]    Add link computation to request
243     ${request_template}    Add Element    ${request_template}    ${link_computation_template}    xpath=.
244     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/node-info/input-model
245     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/link-info[1]/input-model
246     ${request_template}    Set Element Text    ${request_template}    ${input_model}    xpath=.//link-computation/link-info[2]/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_1}    xpath=.//link-computation/link-info[1]/link-topology
249     ${request_template}    Set Element Text    ${request_template}    ${underlay_topology_2}    xpath=.//link-computation/link-info[2]/link-topology
250     ${request_template}    Set Element Attribute    ${request_template}    xmlns:n    urn:opendaylight:topology:correlation    xpath=./link-computation
251     ${request_template}    Element to String    ${request_template}
252     [Return]    ${request_template}
253
254 Insert Scripting into Request
255     [Arguments]    ${request}    ${language}    ${script}
256     [Documentation]    Insert Scripting into Request under aggregation node
257     ${request}    Add Element    ${request}    ${SCRIPTING}    xpath=.//correlation/aggregation
258     ${request}    Set Element Text    ${request}    ${script}    xpath=.//correlation/aggregation/scripting/script
259     ${request}    Set Element Text    ${request}    ${language}    xpath=.//correlation/aggregation/scripting/language
260     ${request}    Element to String    ${request}
261     [Return]    ${request}