3a9b22f19db276a8242f996a6f0ab240fe2ebd68
[integration/test.git] / csit / libraries / SxpLib.robot
1 *** Settings ***
2 Documentation     Library containing Keywords used for SXP testing
3 Library           Collections
4 Library           RequestsLibrary
5 Library           SSHLibrary
6 Library           String
7 Library           ./Sxp.py
8 Resource          CompareStream.robot
9 Resource          KarafKeywords.robot
10 Resource          Utils.robot
11 Resource          TemplatedRequests.robot
12 Variables         ../variables/Variables.py
13
14 *** Variables ***
15 ${REST_CONTEXT}    /restconf/operations/sxp-controller
16
17 *** Keywords ***
18 Post To Controller
19     [Arguments]    ${session}    ${path}    ${DATA}
20     [Documentation]    Post request to Controller and checks response
21     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:${path}    data=${DATA}    headers=${HEADERS_XML}
22     Log    ${resp.content}
23     Log    ${session}
24     Log    ${path}
25     Log    ${DATA}
26     Should be Equal As Strings    ${resp.status_code}    200
27     ${content}    Evaluate    json.loads('''${resp.content}''')    json
28     ${content}    Get From Dictionary    ${content}    output
29     ${content}    Get From Dictionary    ${content}    result
30     Should Be True    ${content}
31
32 Add Node
33     [Arguments]    ${node}    ${password}=${EMPTY}    ${version}=version4    ${port}=64999    ${session}=session    ${ip}=${EMPTY}
34     [Documentation]    Add node via RPC to ODL
35     ${DATA}    Add Node Xml    ${node}    ${port}    ${password}    ${version}    ${ip}
36     Post To Controller    ${session}    add-node    ${DATA}
37
38 Delete Node
39     [Arguments]    ${node}    ${session}=session
40     [Documentation]    Delete connection via RPC from node
41     ${DATA}    Delete Node Xml    ${node}
42     Post To Controller    ${session}    delete-node    ${DATA}
43
44 Add Connection
45     [Arguments]    ${version}    ${mode}    ${ip}    ${port}    ${node}=127.0.0.1    ${password}=${EMPTY}
46     ...    ${session}=session    ${domain}=global
47     [Documentation]    Add connection via RPC to node
48     ${DATA}    Add Connection Xml    ${version}    ${mode}    ${ip}    ${port}    ${node}
49     ...    ${password}    ${domain}
50     Post To Controller    ${session}    add-connection    ${DATA}
51
52 Get Connections
53     [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global
54     [Documentation]    Gets all connections via RPC from node
55     ${DATA}    Get Connections From Node Xml    ${node}    ${domain}
56     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:get-connections    data=${DATA}    headers=${HEADERS_XML}
57     Should be Equal As Strings    ${resp.status_code}    200
58     [Return]    ${resp.content}
59
60 Delete Connections
61     [Arguments]    ${ip}    ${port}    ${node}=127.0.0.1    ${session}=session    ${domain}=global
62     [Documentation]    Delete connection via RPC from node
63     ${DATA}    Delete Connections Xml    ${ip}    ${port}    ${node}    ${domain}
64     Post To Controller    ${session}    delete-connection    ${DATA}
65
66 Clean Connections
67     [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global
68     [Documentation]    Delete all connections via RPC from node
69     ${resp}    Get Connections    ${node}    ${session}    ${domain}
70     @{connections}    Parse Connections    ${resp}
71     : FOR    ${connection}    IN    @{connections}
72     \    Delete Connections    ${connection['peer-address']}    ${connection['tcp-port']}    ${node}    ${session}    ${domain}
73
74 Verify Connection
75     [Arguments]    ${version}    ${mode}    ${ip}    ${port}=64999    ${node}=127.0.0.1    ${state}=on
76     ...    ${session}=session    ${domain}=global
77     [Documentation]    Verify that connection is ON
78     ${resp}    Get Connections    ${node}    ${session}    ${domain}
79     Should Contain Connection    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}
80
81 Add Binding
82     [Arguments]    ${sgt}    ${prefix}    ${node}=127.0.0.1    ${domain}=global    ${session}=session
83     [Documentation]    Add binding via RPC to Master DB of node
84     ${DATA}    Add Entry Xml    ${sgt}    ${prefix}    ${node}    ${domain}
85     Post To Controller    ${session}    add-entry    ${DATA}
86
87 Get Bindings
88     [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global    ${scope}=all
89     [Documentation]    Gets all binding via RPC from Master DB of node
90     ${DATA}    Get Bindings From Node Xml    ${node}    ${scope}    ${domain}
91     ${resp1}    CompareStream.Run_Keyword_If_At_Least_Boron    TemplatedRequests.Post_To_Uri    ${REST_CONTEXT}:get-node-bindings    data=${DATA}    accept=${ACCEPT_JSON}    content_type=${HEADERS_XML}
92     ...    session=${session}
93     ${resp2}    CompareStream.Run_Keyword_If_Less_Than_Boron    TemplatedRequests.Get_As_Json_From_Uri    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/    session=${session}
94     ${resp}    CompareStream.Set_Variable_If_At_Least_Boron    ${resp1}    ${resp2}
95     [Return]    ${resp}
96
97 Clean Bindings
98     [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global
99     [Documentation]    Delete all bindings via RPC from Master DB of node
100     ${resp}    Get Bindings    ${node}    ${session}    ${domain}    local
101     @{bindings}    CompareStream.Run_Keyword_If_At_Least_Else    boron    Parse Bindings    ${resp}
102     ...    ELSE    Parse Prefix Groups    ${resp}    local
103     : FOR    ${binding}    IN    @{bindings}
104     \    CompareStream.Run_Keyword_If_At_Least_Boron    Clean Binding Default    ${binding}    ${node}    ${session}    ${domain}
105     \    CompareStream.Run_Keyword_If_At_Most_Beryllium    Clean Binding At Most Be    ${binding}    ${node}    ${session}    ${domain}
106
107 Clean Binding Default
108     [Arguments]    ${binding}    ${node}    ${session}    ${domain}
109     [Documentation]    Clean binding
110     Clean Binding    ${binding['sgt']}    ${binding['ip-prefix']}    ${node}    ${session}
111
112 Clean Binding At Most Be
113     [Arguments]    ${binding}    ${node}    ${session}    ${domain}
114     [Documentation]    Clean binding
115     Clean Binding    ${binding}    ${binding['binding']}    ${node}    ${session}
116
117 Clean Binding
118     [Arguments]    ${sgt}    ${prefixes}    ${node}    ${session}    ${domain}=global
119     [Documentation]    Used for nester FOR loop
120     : FOR    ${prefix}    IN    @{prefixes}
121     \    CompareStream.Run_Keyword_If_At_Least_Boron    Delete Binding Default    ${sgt}    ${prefix}    ${node}    ${domain}
122     \    ...    ${session}
123     \    CompareStream.Run_Keyword_If_At_Most_Beryllium    Delete Binding Be    ${sgt}    ${prefix}    ${node}    ${domain}
124     \    ...    ${session}
125
126 Update Binding
127     [Arguments]    ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}    ${node}=127.0.0.1    ${session}=session
128     ...    ${domain}=global
129     [Documentation]    Updates value of binding via RPC in Master DB of node
130     ${DATA}    Update Binding Xml    ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}    ${node}
131     ...    ${domain}
132     Post To Controller    ${session}    update-entry    ${DATA}
133
134 Delete Binding Default
135     [Arguments]    ${sgt}    ${prefix}    ${node}    ${domain}    ${session}
136     [Documentation]    Delete binding via RPC
137     Delete Binding    ${sgt}    ${prefix}    ${node}    ${domain}    ${session}
138
139 Delete Binding Be
140     [Arguments]    ${sgt}    ${prefix}    ${node}    ${domain}    ${session}
141     [Documentation]    Delete binding via RPC
142     Delete Binding    ${sgt['sgt']}    ${prefix['ip-prefix']}    ${node}    ${domain}    ${session}
143
144 Delete Binding
145     [Arguments]    ${sgt}    ${prefix}    ${node}=127.0.0.1    ${domain}=global    ${session}=session
146     [Documentation]    Delete binding via RPC from Master DB of node
147     ${DATA}    Delete Binding Xml    ${sgt}    ${prefix}    ${node}    ${domain}
148     Post To Controller    ${session}    delete-entry    ${DATA}
149
150 Add PeerGroup
151     [Arguments]    ${name}    ${peers}=    ${node}=127.0.0.1    ${session}=session
152     [Documentation]    Adds new PeerGroup via RPC to Node
153     ${DATA}    Add Peer Group Xml    ${name}    ${peers}    ${node}
154     Post To Controller    ${session}    add-peer-group    ${DATA}
155
156 Delete Peer Group
157     [Arguments]    ${name}    ${node}=127.0.0.1    ${session}=session
158     [Documentation]    Delete PeerGroup via RPC from Node
159     ${DATA}    Delete Peer Group Xml    ${name}    ${node}
160     Post To Controller    ${session}    delete-peer-group    ${DATA}
161
162 Get Peer Groups
163     [Arguments]    ${node}=127.0.0.1    ${session}=session
164     [Documentation]    Gets all PeerGroups via RPC from node
165     ${DATA}    Get Peer Groups From Node Xml    ${node}
166     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:get-peer-groups    data=${DATA}    headers=${HEADERS_XML}
167     Should be Equal As Strings    ${resp.status_code}    200
168     [Return]    ${resp.content}
169
170 Clean Peer Groups
171     [Arguments]    ${node}=127.0.0.1    ${session}=session
172     [Documentation]    Delete all PeerGroups via RPC from node
173     ${resp}    Get Peer Groups    ${node}    ${session}
174     @{prefixes}    Parse Peer Groups    ${resp}
175     : FOR    ${group}    IN    @{prefixes}
176     \    Delete Peer Group    ${group['name']}    ${node}    ${session}
177
178 Add Filter
179     [Arguments]    ${name}    ${type}    ${entries}    ${node}=127.0.0.1    ${session}=session    ${policy}=auto-update
180     [Documentation]    Add Filter via RPC from Node
181     ${DATA}    Run_Keyword_If_At_Least_Else    carbon    Add Filter Xml    ${name}    ${type}    ${entries}
182     ...    ${node}    ${policy}
183     ...    ELSE    Add Filter Xml    ${name}    ${type}    ${entries}    ${node}
184     Post To Controller    ${session}    add-filter    ${DATA}
185
186 Add Domain Filter
187     [Arguments]    ${name}    ${domains}    ${entries}    ${node}=127.0.0.1    ${filter_name}=base-domain-filter    ${session}=session
188     [Documentation]    Add Domain Filter via RPC from Node
189     ${DATA}    Add Domain Filter Xml    ${name}    ${domains}    ${entries}    ${node}    ${filter_name}
190     Post To Controller    ${session}    add-domain-filter    ${DATA}
191
192 Delete Filter
193     [Arguments]    ${name}    ${type}    ${node}=127.0.0.1    ${session}=session
194     [Documentation]    Delete Filter via RPC from Node
195     ${DATA}    Delete Filter Xml    ${name}    ${type}    ${node}
196     Post To Controller    ${session}    delete-filter    ${DATA}
197
198 Delete Domain Filter
199     [Arguments]    ${name}    ${node}=127.0.0.1    ${filter_name}=base-domain-filter    ${session}=session
200     [Documentation]    Delete Filter via RPC from Node
201     ${DATA}    Delete Domain Filter Xml    ${name}    ${node}    ${filter_name}
202     Post To Controller    ${session}    delete-domain-filter    ${DATA}
203
204 Should Contain Binding
205     [Arguments]    ${resp}    ${sgt}    ${prefix}    ${db_source}=any
206     [Documentation]    Tests if data contains specified binding
207     ${out}    CompareStream.Run_Keyword_If_At_Least_Else    boron    Find Binding    ${resp}    ${sgt}    ${prefix}
208     ...    ELSE    Find Binding Legacy    ${resp}    ${sgt}    ${prefix}    ${db_source}
209     ...    add
210     Should Be True    ${out}    Doesn't have ${sgt} ${prefix}
211
212 Should Not Contain Binding
213     [Arguments]    ${resp}    ${sgt}    ${prefix}    ${db_source}=any
214     [Documentation]    Tests if data doesn't contains specified binding
215     ${out}    CompareStream.Run_Keyword_If_At_Least_Else    boron    Find Binding    ${resp}    ${sgt}    ${prefix}
216     ...    ELSE    Find Binding Legacy    ${resp}    ${sgt}    ${prefix}    ${db_source}
217     ...    add
218     Should Not Be True    ${out}    Should't have ${sgt} ${prefix}
219
220 Should Contain Connection
221     [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
222     [Documentation]    Test if data contains specified connection
223     ${out}    Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
224     ...    ${state}
225     Should Be True    ${out}    Doesn't have ${ip}:${port} ${mode} ${version}
226
227 Should Not Contain Connection
228     [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
229     [Documentation]    Test if data doesn't contains specified connection
230     ${out}    Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
231     ...    ${state}
232     Should Not Be True    ${out}    Shouldn't have ${ip}:${port} ${mode} ${version}
233
234 Setup Topology Complex
235     [Arguments]    ${version}=version4    ${PASSWORD}=none
236     : FOR    ${node}    IN RANGE    2    6
237     \    Add Connection    ${version}    both    127.0.0.1    64999    127.0.0.${node}
238     \    ...    ${PASSWORD}
239     \    Add Connection    ${version}    both    127.0.0.${node}    64999    127.0.0.1
240     \    ...    ${PASSWORD}
241     \    Wait Until Keyword Succeeds    15    1    Verify Connection    ${version}    both
242     \    ...    127.0.0.${node}
243     \    Add Binding    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
244     \    Add Binding    ${node}0    10.10.${node}0.0/24    127.0.0.${node}
245     \    Add Binding    ${node}0    10.${node}0.0.0/16    127.0.0.${node}
246     \    Add Binding    ${node}0    ${node}0.0.0.0/8    127.0.0.${node}
247     Add Binding    10    10.10.10.10/32    127.0.0.1
248     Add Binding    10    10.10.10.0/24    127.0.0.1
249     Add Binding    10    10.10.0.0/16    127.0.0.1
250     Add Binding    10    10.0.0.0/8    127.0.0.1
251
252 Verify Snapshot Was Pushed
253     [Arguments]    ${snapshot_string}=22-sxp-controller-one-node.xml
254     [Documentation]    Will succeed if the ${snapshot_string} is found in the karaf logs
255     ${output}    Run Command On Controller    ${ODL_SYSTEM_IP}    cat ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log* | grep -c 'Successfully pushed configuration snapshot.*${snapshot_string}'
256     Should Not Be Equal As Strings    ${output}    0
257
258 Setup SXP Session
259     [Arguments]    ${session}=session    ${controller}=${ODL_SYSTEM_IP}
260     [Documentation]    Create session to Controller
261     Verify Feature Is Installed    odl-sxp-controller    ${controller}
262     Create Session    ${session}    url=http://${controller}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_XML}
263     ${resp}    RequestsLibrary.Get Request    ${session}    ${MODULES_API}
264     Should Be Equal As Strings    ${resp.status_code}    200
265     Should Contain    ${resp.content}    ietf-restconf
266
267 Clean SXP Session
268     [Documentation]    Destroy created sessions
269     Delete All Sessions
270
271 Add Domain
272     [Arguments]    ${domain_name}    ${node}=127.0.0.1    ${session}=session
273     [Documentation]    Add Domain via RPC
274     ${DATA}    Add Domain Xml    ${node}    ${domain_name}
275     Post To Controller    ${session}    add-domain    ${DATA}
276
277 Delete Domain
278     [Arguments]    ${domain_name}    ${node}=127.0.0.1    ${session}=session
279     [Documentation]    Delete Domain via RPC
280     ${DATA}    Delete Domain Xml    ${node}    ${domain_name}
281     Post To Controller    ${session}    delete-domain    ${DATA}
282
283 Add Bindings
284     [Arguments]    ${sgt}    ${prefixes}    ${node}=127.0.0.1    ${session}=session    ${domain}=global
285     [Documentation]    Add bindings via RPC to Master DB of node
286     ${DATA}    Add Bindings Xml    ${node}    ${domain}    ${sgt}    ${prefixes}
287     Post To Controller    ${session}    add-bindings    ${DATA}
288
289 Delete Bindings
290     [Arguments]    ${sgt}    ${prefixes}    ${node}=127.0.0.1    ${session}=session    ${domain}=global
291     [Documentation]    Delete bindings via RPC from Master DB of node
292     ${DATA}    Delete Bindings Xml    ${node}    ${domain}    ${sgt}    ${prefixes}
293     Post To Controller    ${session}    delete-bindings    ${DATA}
294
295 Add Bindings Range
296     [Arguments]    ${sgt}    ${start}    ${size}    ${node}=127.0.0.1
297     [Documentation]    Add Bindings to Node specified by range
298     ${prefixes}    Prefix Range    ${start}    ${size}
299     Add Bindings    ${sgt}    ${prefixes}    ${node}
300
301 Delete Bindings Range
302     [Arguments]    ${sgt}    ${start}    ${size}    ${node}=127.0.0.1
303     [Documentation]    Delete Bindings to Node specified by range
304     ${prefixes}    Prefix Range    ${start}    ${size}
305     Delete Bindings    ${sgt}    ${prefixes}    ${node}
306
307 Check Binding Range
308     [Arguments]    ${sgt}    ${start}    ${end}    ${node}=127.0.0.1
309     [Documentation]    Check if Node contains Bindings specified by range
310     ${resp}    Get Bindings    ${node}
311     : FOR    ${num}    IN RANGE    ${start}    ${end}
312     \    ${ip}    Get Ip From Number    ${num}
313     \    Should Contain Binding    ${resp}    ${sgt}    ${ip}/32
314
315 Check Binding Range Negative
316     [Arguments]    ${sgt}    ${start}    ${end}    ${node}=127.0.0.1
317     [Documentation]    Check if Node does not contains Bindings specified by range
318     ${resp}    Get Bindings    ${node}
319     : FOR    ${num}    IN RANGE    ${start}    ${end}
320     \    ${ip}    Get Ip From Number    ${num}
321     \    Should Not Contain Binding    ${resp}    ${sgt}    ${ip}/32
322
323 Setup SXP Environment
324     [Arguments]    ${node_range}=2
325     [Documentation]    Create session to Controller, node_range parameter specifies number of nodes to be created plus one
326     Setup SXP Session
327     : FOR    ${num}    IN RANGE    1    ${node_range}
328     \    ${ip}    Get Ip From Number    ${num}
329     \    CompareStream.Run_Keyword_If_At_Least_Boron    Add Node    ${ip}
330     \    CompareStream.Run_Keyword_If_At_Least_Boron    Wait Until Keyword Succeeds    20    1    Check Node Started    ${ip}
331
332 Check Node Started
333     [Arguments]    ${node}    ${port}=64999    ${system}=${ODL_SYSTEM_IP}    ${session}=session    ${ip}=${node}
334     [Documentation]    Verify that SxpNode has data writed to Operational datastore
335     ${resp}    RequestsLibrary.Get Request    ${session}    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/
336     Should Be Equal As Strings    ${resp.status_code}    200
337     ${rc}    Run Command On Remote System    ${system}    netstat -tln | grep -q ${ip}:${port} && echo 0 || echo 1    ${ODL_SYSTEM_USER}    ${ODL_SYSTEM_PASSWORD}    prompt=${ODL_SYSTEM_PROMPT}
338     Should Be Equal As Strings    ${rc}    0
339
340 Clean SXP Environment
341     [Arguments]    ${node_range}=2
342     [Documentation]    Destroy created sessions
343     : FOR    ${num}    IN RANGE    1    ${node_range}
344     \    ${ip}    Get Ip From Number    ${num}
345     \    CompareStream.Run_Keyword_If_At_Least_Boron    Delete Node    ${ip}
346     Clean SXP Session