Feature check change in SXP CSIT
[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          KarafKeywords.robot
9 Variables         ../variables/Variables.py
10
11 *** Variables ***
12 ${REST_CONTEXT}    /restconf/operations/sxp-controller
13
14 *** Keywords ***
15 Add Connection
16     [Arguments]    ${version}    ${mode}    ${ip}    ${port}    ${node}=127.0.0.1    ${password}=none
17     ...    ${session}=session
18     [Documentation]    Add connection via RPC to node
19     ${DATA}    Add Connection Xml    ${version}    ${mode}    ${ip}    ${port}    ${node}
20     ...    ${password}
21     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:add-connection    data=${DATA}    headers=${HEADERS_XML}
22     LOG    ${resp}
23     Should be Equal As Strings    ${resp.status_code}    200
24
25 Get Connections
26     [Arguments]    ${node}=127.0.0.1    ${session}=session
27     [Documentation]    Gets all connections via RPC from node
28     ${DATA}    Get Connections From Node Xml    ${node}
29     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:get-connections    data=${DATA}    headers=${HEADERS_XML}
30     Should be Equal As Strings    ${resp.status_code}    200
31     [Return]    ${resp.content}
32
33 Delete Connections
34     [Arguments]    ${ip}    ${port}    ${node}=127.0.0.1    ${session}=session
35     [Documentation]    Delete connection via RPC from node
36     ${DATA}    Delete Connections Xml    ${ip}    ${port}    ${node}
37     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:delete-connection    data=${DATA}    headers=${HEADERS_XML}
38     Should be Equal As Strings    ${resp.status_code}    200
39
40 Clean Connections
41     [Arguments]    ${node}=127.0.0.1    ${session}=session
42     [Documentation]    Delete all connections via RPC from node
43     ${resp}    Get Connections    ${node}    ${session}
44     @{connections}    Parse Connections    ${resp}
45     : FOR    ${connection}    IN    @{connections}
46     \    delete connections    ${connection['peer-address']}    ${connection['tcp-port']}    ${node}    ${session}
47
48 Verify Connection
49     [Arguments]    ${version}    ${mode}    ${ip}    ${port}=64999    ${node}=127.0.0.1    ${state}=on
50     [Documentation]    Verify that connection is ON
51     ${resp}    Get Connections    ${node}
52     Should Contain Connection    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}
53
54 Add Binding
55     [Arguments]    ${sgt}    ${prefix}    ${node}=127.0.0.1    ${session}=session
56     [Documentation]    Add binding via RPC to Master DB of node
57     ${DATA}    Add Entry Xml    ${sgt}    ${prefix}    ${node}
58     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:add-entry    data=${DATA}    headers=${HEADERS_XML}
59     LOG    ${resp.content}
60     Should be Equal As Strings    ${resp.status_code}    200
61
62 Get Bindings
63     [Arguments]    ${node}=127.0.0.1    ${session}=session
64     [Documentation]    Gets all binding via RPC from Master DB of node
65     ${DATA}    Get Bindings From Node Xml    ${node}    all
66     ${resp}    Run Keyword If    '${ODL_STREAM}' == 'boron'    Post Request    ${session}    ${REST_CONTEXT}:get-node-bindings    data=${DATA}
67     ...    headers=${HEADERS_XML}
68     ...    ELSE    Get Request    ${session}    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/    headers=${HEADERS_XML}
69     Should be Equal As Strings    ${resp.status_code}    200
70     [Return]    ${resp.content}
71
72 Clean Bindings
73     [Arguments]    ${node}=127.0.0.1    ${session}=session
74     [Documentation]    Delete all bindings via RPC from Master DB of node
75     ${resp}    Get Bindings    ${node}    ${session}
76     @{bindings}    Run Keyword If    '${ODL_STREAM}' == 'boron'    Parse Bindings    ${resp}
77     ...    ELSE    Parse Prefix Groups    ${resp}    local
78     : FOR    ${binding}    IN    @{bindings}
79     \    Run Keyword If    '${ODL_STREAM}' == 'boron'    Clean Binding    ${binding['sgt']}    ${binding['ip-prefix']}    ${node}
80     \    ...    ${session}
81     \    ...    ELSE    Clean Binding    ${binding}    ${binding['binding']}    ${node}
82     \    ...    ${session}
83
84 Clean Binding
85     [Arguments]    ${sgt}    ${prefixes}    ${node}    ${session}
86     [Documentation]    Used for nester FOR loop
87     : FOR    ${prefix}    IN    @{prefixes}
88     \    Run Keyword If    '${ODL_STREAM}' == 'boron'    Delete Binding    ${sgt}    ${prefix}    ${node}
89     \    ...    ${session}
90     \    ...    ELSE    Delete Binding    ${sgt['sgt']}    ${prefix['ip-prefix']}    ${node}
91     \    ...    ${session}
92
93 Update Binding
94     [Arguments]    ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}    ${node}=127.0.0.1    ${session}=session
95     [Documentation]    Updates value of binding via RPC in Master DB of node
96     ${DATA}    Update Binding Xml    ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}    ${node}
97     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:update-entry    data=${DATA}    headers=${HEADERS_XML}
98     Should be Equal As Strings    ${resp.status_code}    200
99
100 Delete Binding
101     [Arguments]    ${sgt}    ${prefix}    ${node}=127.0.0.1    ${session}=session
102     [Documentation]    Delete binding via RPC from Master DB of node
103     ${DATA}    Delete Binding Xml    ${sgt}    ${prefix}    ${node}
104     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:delete-entry    data=${DATA}    headers=${HEADERS_XML}
105     Should be Equal As Strings    ${resp.status_code}    200
106
107 Add PeerGroup
108     [Arguments]    ${name}    ${peers}=    ${node}=127.0.0.1    ${session}=session
109     [Documentation]    Adds new PeerGroup via RPC to Node
110     ${DATA}    Add Peer Group Xml    ${name}    ${peers}    ${node}
111     LOG    ${DATA}
112     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:add-peer-group    data=${DATA}    headers=${HEADERS_XML}
113     Should be Equal As Strings    ${resp.status_code}    200
114
115 Delete Peer Group
116     [Arguments]    ${name}    ${node}=127.0.0.1    ${session}=session
117     [Documentation]    Delete PeerGroup via RPC from Node
118     ${DATA}    Delete Peer Group Xml    ${name}    ${node}
119     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:delete-peer-group    data=${DATA}    headers=${HEADERS_XML}
120     Should be Equal As Strings    ${resp.status_code}    200
121
122 Get Peer Groups
123     [Arguments]    ${node}=127.0.0.1    ${session}=session
124     [Documentation]    Gets all PeerGroups via RPC from node
125     ${DATA}    Get Peer Groups From Node Xml    ${node}
126     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:get-peer-groups    data=${DATA}    headers=${HEADERS_XML}
127     Should be Equal As Strings    ${resp.status_code}    200
128     [Return]    ${resp.content}
129
130 Clean Peer Groups
131     [Arguments]    ${node}=127.0.0.1    ${session}=session
132     [Documentation]    Delete all PeerGroups via RPC from node
133     ${resp}    Get Peer Groups    ${node}    ${session}
134     @{prefixes}    Parse Peer Groups    ${resp}
135     : FOR    ${group}    IN    @{prefixes}
136     \    Delete Peer Group    ${group['name']}    ${node}    ${session}
137
138 Add Filter
139     [Arguments]    ${name}    ${type}    ${entries}    ${node}=127.0.0.1    ${session}=session
140     [Documentation]    Add Filter via RPC from Node
141     ${DATA}    Add Filter Xml    ${name}    ${type}    ${entries}    ${node}
142     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:add-filter    data=${DATA}    headers=${HEADERS_XML}
143     Should be Equal As Strings    ${resp.status_code}    200
144
145 Delete Filter
146     [Arguments]    ${name}    ${type}    ${node}=127.0.0.1    ${session}=session
147     [Documentation]    Delete Filter via RPC from Node
148     ${DATA}    Delete Filter Xml    ${name}    ${type}    ${node}
149     ${resp}    Post Request    ${session}    ${REST_CONTEXT}:delete-filter    data=${DATA}    headers=${HEADERS_XML}
150     Should be Equal As Strings    ${resp.status_code}    200
151
152 Should Contain Binding
153     [Arguments]    ${resp}    ${sgt}    ${prefix}    ${db_source}=any
154     [Documentation]    Tests if data contains specified binding
155     ${out}    Run Keyword If    '${ODL_STREAM}' == 'boron'    Find Binding    ${resp}    ${sgt}    ${prefix}
156     ...    ELSE    Find Binding Legacy    ${resp}    ${sgt}    ${prefix}    ${db_source}
157     ...    add
158     Should Be True    ${out}    Doesn't have ${sgt} ${prefix}
159
160 Should Not Contain Binding
161     [Arguments]    ${resp}    ${sgt}    ${prefix}    ${db_source}=any
162     [Documentation]    Tests if data doesn't contains specified binding
163     ${out}    Run Keyword If    '${ODL_STREAM}' == 'boron'    Find Binding    ${resp}    ${sgt}    ${prefix}
164     ...    ELSE    Find Binding Legacy    ${resp}    ${sgt}    ${prefix}    ${db_source}
165     ...    add
166     Should Not Be True    ${out}    Should't have ${sgt} ${prefix}
167
168 Should Contain Connection
169     [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
170     [Documentation]    Test if data contains specified connection
171     ${out}    Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
172     ...    ${state}
173     Should Be True    ${out}    Doesn't have ${ip}:${port} ${mode} ${version}
174
175 Should Not Contain Connection
176     [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
177     [Documentation]    Test if data doesn't contains specified connection
178     ${out}    Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
179     ...    ${state}
180     Should Not Be True    ${out}    Shouldn't have ${ip}:${port} ${mode} ${version}
181
182 Setup Topology Complex
183     [Arguments]    ${version}=version4    ${PASSWORD}=none
184     : FOR    ${node}    IN RANGE    2    6
185     \    Add Connection    ${version}    both    127.0.0.1    64999    127.0.0.${node}
186     \    ...    ${PASSWORD}
187     \    Add Connection    ${version}    both    127.0.0.${node}    64999    127.0.0.1
188     \    ...    ${PASSWORD}
189     \    Wait Until Keyword Succeeds    15    1    Verify Connection    ${version}    both
190     \    ...    127.0.0.${node}
191     \    Add Binding    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
192     \    Add Binding    ${node}0    10.10.${node}0.0/24    127.0.0.${node}
193     \    Add Binding    ${node}0    10.${node}0.0.0/16    127.0.0.${node}
194     \    Add Binding    ${node}0    ${node}0.0.0.0/8    127.0.0.${node}
195     Add Binding    10    10.10.10.10/32    127.0.0.1
196     Add Binding    10    10.10.10.0/24    127.0.0.1
197     Add Binding    10    10.10.0.0/16    127.0.0.1
198     Add Binding    10    10.0.0.0/8    127.0.0.1
199
200 Setup SXP Environment
201     [Documentation]    Create session to Controller
202     Verify Feature Is Installed    odl-sxp-controller
203     Create Session    session    url=http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_XML}
204     Wait Until Keyword Succeeds    15    1    Get Bindings
205
206 Clean SXP Environment
207     [Documentation]    Destroy created sessions
208     Delete All Sessions