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