49365e6f695611c77bfe3c8e4ca0cd92998d7fb9
[integration/test.git] / csit / suites / sfc / SFC_Basic / 020__sfc_service_forwarders.robot
1 *** Settings ***
2 Documentation     Test suite for SFC Service Function Forwarders, Operates SFFs from Restconf APIs.
3 Suite Setup       Init Suite
4 Suite Teardown    Delete All Sessions
5 Library           SSHLibrary
6 Library           Collections
7 Library           OperatingSystem
8 Library           RequestsLibrary
9 Variables         ../../../variables/Variables.py
10 Resource          ../../../libraries/Utils.robot
11
12 *** Test Cases ***
13 Put Service Function Forwarders
14     [Documentation]    Add Service Function Forwarders from JSON file
15     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
16     ${body}    OperatingSystem.Get File    ${SERVICE_FORWARDERS_FILE}
17     ${jsonbody}    To Json    ${body}
18     ${forwarders}    Get From Dictionary    ${jsonbody}    service-function-forwarders
19     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
20     Should Be Equal As Strings    ${resp.status_code}    200
21     ${result}    To JSON    ${resp.content}
22     ${forwarder}    Get From Dictionary    ${result}    service-function-forwarders
23     Lists Should be Equal    ${forwarder}    ${forwarders}
24
25 Delete All Service Function Forwarders
26     [Documentation]    Delete all Service Function Forwarders
27     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
28     Should Be Equal As Strings    ${resp.status_code}    200
29     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
30     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
31     Should Be Equal As Strings    ${resp.status_code}    404
32
33 Get one Service Function Forwarder
34     [Documentation]    Get one Service Function Forwarder
35     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
36     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
37     ${elements}=    Create List    SFF-bootstrap    service-locator:vxlan-gpe    SF1
38     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap    ${elements}
39
40 Get A Non-existing Service Function Forwarder
41     [Documentation]    Get A Non-existing Service Function Forwarder
42     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
43     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
44     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/non-existing-sff
45     Should Be Equal As Strings    ${resp.status_code}    404
46
47 Delete A Service Function Forwarder
48     [Documentation]    Delete A Service Function Forwarder
49     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
50     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
51     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap
52     Should Be Equal As Strings    ${resp.status_code}    200
53     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap
54     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap
55     Should Be Equal As Strings    ${resp.status_code}    404
56     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
57     Should Be Equal As Strings    ${resp.status_code}    200
58     Should Not Contain    ${resp.content}    SF1
59
60 Delete A Non-existing Service Function Forwarder
61     [Documentation]    Delete A Non existing Service Function
62     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
63     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
64     ${body}    OperatingSystem.Get File    ${SERVICE_FORWARDERS_FILE}
65     ${jsonbody}    To Json    ${body}
66     ${forwarders}    Get From Dictionary    ${jsonbody}    service-function-forwarders
67     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/non-existing-sff
68     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
69     Should Be Equal As Strings    ${resp.status_code}    200
70     ${result}    To JSON    ${resp.content}
71     ${forwarder}    Get From Dictionary    ${result}    service-function-forwarders
72     Lists Should be Equal    ${forwarder}    ${forwarders}
73
74 Put one Service Function Forwarder
75     [Documentation]    Put one Service Function Forwarder
76     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
77     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
78     ${resp}    RequestsLibrary.Get Request    session    ${SFF_OVS100_URI}
79     Should Be Equal As Strings    ${resp.status_code}    200
80     ${elements}=    Create List    ovs-100    SF7
81     Check For Elements At URI    ${SFF_OVS100_URI}    ${elements}
82     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}    ${elements}
83
84 Get Service Function Forwarder DPL
85     [Documentation]    Get Service Function Data Plane Locator
86     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
87     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
88     ${elements}=    Create List    eth0    service-locator:vxlan-gpe
89     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/eth0    ${elements}
90
91 Put Service Function Forwarder DPL
92     [Documentation]    Put Service Function Forwarder Data Plane Locator
93     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
94     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
95     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${SFF_DPL101_FILE}
96     ${elements}=    Create List    dpl-101    6101
97     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${elements}
98     Check For Elements At URI    ${SFF_OVS100_URI}    ${elements}
99
100 Put DPL to a Non-existing Service Function Forwarder
101     [Documentation]    Put Service Function DPL to a Non-existing Service Function
102     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
103     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${SFF_DPL101_FILE}
104     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}
105     Should Be Equal As Strings    ${resp.status_code}    200
106     Should Contain    ${resp.content}    ovs-100
107     ${elements}=    Create List    dpl-101    6101
108     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${elements}
109     Check For Elements At URI    ${SFF_OVS100_URI}    ${elements}
110
111 Delete Service Function Forwarder DPL
112     [Documentation]    Delete Service Function Forwarder Data Plane Locator
113     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
114     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
115     Remove All Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/eth0
116     ${resp}    RequestsLibrary.Get Request    session    ${SFF_OVS100_URI}
117     Should Be Equal As Strings    ${resp.status_code}    200
118     Should Not Contain    ${resp.content}    "name":"eth0"
119
120 Get Service Function Forwarder DPL's Locator
121     [Documentation]    Get Service Function Data Plane Locator
122     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
123     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
124     ${elements}=    Create List    6000    service-locator:vxlan-gpe
125     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/eth0/data-plane-locator/    ${elements}
126
127 Put Service Function Forwarder DPL's Locator
128     [Documentation]    Put Service Function Forwarder Data Plane Locator
129     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
130     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
131     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${SFF_DPL101_FILE}
132     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator/    ${SFF_DPL_LOCATOR_FILE}
133     ${elements}=    Create List    5000    service-locator:vxlan-gpe
134     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator    ${elements}
135     ${elements}=    Create List    dpl-101    5000    service-locator:vxlan-gpe
136     Check For Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${elements}
137     Check For Elements At URI    ${SFF_OVS100_URI}    ${elements}
138
139 Delete Service Function Forwarder DPL's Locator
140     [Documentation]    Delete Service Function Forwarder Data Plane Locator
141     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
142     Add Elements To URI From File    ${SFF_OVS100_URI}    ${SFF_OVS100_FILE}
143     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101    ${SFF_DPL101_FILE}
144     Add Elements To URI From File    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator/    ${SFF_DPL_LOCATOR_FILE}
145     Remove All Elements At URI    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator
146     ${resp}    RequestsLibrary.Get Request    session    ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101
147     Should Be Equal As Strings    ${resp.status_code}    200
148     Should Contain    ${resp.content}    dpl-101
149     Should Not Contain    ${resp.content}    6101
150     Should Not Contain    ${resp.content}    service-locator:vxlan-gpe
151     ${resp}    RequestsLibrary.Get Request    session    ${SFF_OVS100_URI}
152     Should Be Equal As Strings    ${resp.status_code}    200
153     Should Contain    ${resp.content}    dpl-101
154     Should Not Contain    ${resp.content}    6101
155
156 Get Service Function Dictionary From SFF
157     [Documentation]    Get Service Function Dictionary From SFF
158     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
159     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
160     ${elements}=    Create List    service-function-dictionary    SF1    SF1-DPL    eth0
161     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1    ${elements}
162
163 Delete Service Function Dictionary From SFF
164     [Documentation]    Delete Service Function Dictionary From SFF
165     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
166     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
167     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1
168     Should Be Equal As Strings    ${resp.status_code}    200
169     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1
170     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1
171     Should Be Equal As Strings    ${resp.status_code}    404
172     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/
173     Should Be Equal As Strings    ${resp.status_code}    200
174     Should Contain    ${resp.content}    service-function-dictionary
175     Should Not Contain    ${resp.content}    SF1
176
177 Put Service Function Dictionary to SFF
178     [Documentation]    Put Service Function Dictionary to SFF
179     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
180     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
181     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF100    ${SFF_SFD_SF100_FILE}
182     ${elements}=    Create List    SF100    SF2-DPL    eth0
183     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF100    ${elements}
184     ${elements}=    create list    service-function-dictionary    SF100    SF2-DPL    eth0
185     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/    ${elements}
186
187 Get Service Function Dictionary's DPL From SFF
188     [Documentation]    Get Service Function Dictionary From SFF
189     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
190     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
191     ${elements}=    create list    sff-sf-data-plane-locator    SF1-DPL    eth0
192     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/    ${elements}
193
194 Delete Service Function Dictionary's DPL From SFF
195     [Documentation]    Delete Service Function Dictionary From SFF
196     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
197     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
198     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/
199     Should Be Equal As Strings    ${resp.status_code}    200
200     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/
201     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/
202     Should Be Equal As Strings    ${resp.status_code}    404
203
204 Put DPL of Service Function Dictionary to SFF
205     [Documentation]    Put DPL of Service Function Dictionary to SFF
206     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
207     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
208     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/    ${SFF_SFD_LOCATOR_FILE}
209     ${elements}=    create list    sff-sf-data-plane-locator    SF2-DPL    eth0
210     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/    ${elements}
211     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/    ${elements}
212
213 Get Connected SFF Dictionary From SFF
214     [Documentation]    Get Connected SFF Dictionary Dictionary From SFF
215     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
216     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
217     ${elements}=    create list    connected-sff-dictionary    br-int-ovs-2    sff-sff-data-plane-locator
218     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2    ${elements}
219     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/br-int-ovs-2/connected-sff-dictionary/SFF-bootstrap
220     Should Be Equal As Strings    ${resp.status_code}    200
221     Should Contain    ${resp.content}    SFF-bootstrap
222
223 Delete Connected SFF Dictionary From SFF
224     [Documentation]    Delete Connected SFF Dictionary From SFF
225     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
226     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
227     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2
228     Should Be Equal As Strings    ${resp.status_code}    200
229     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2
230     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2
231     Should Be Equal As Strings    ${resp.status_code}    404
232     ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/
233     Should Be Equal As Strings    ${resp.status_code}    200
234     Should Not Contain    ${resp.content}    br-int-ovs-2
235
236 Put Connected SFF Dictionary to SFF
237     [Documentation]    Put Connected SFF Dictionary to SFF
238     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
239     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
240     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/SFF100    ${SFF_CSD_SFF100_FILE}
241     ${elements}=    create list    SFF100    service-function-forwarder:open
242     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/SFF100    ${elements}
243     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/    ${elements}
244
245 Get Connected SFF Dictionary's DPL From SFF
246     [Documentation]    Get Connected SFF Dictionary's DPL From SFF
247     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
248     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
249     ${elements}=    create list    sff-sff-data-plane-locator    5000    192.168.1.2
250     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/    ${elements}
251
252 Put DPL of Connected SFF Dictionary to SFF
253     [Documentation]    Put DPL of Connected SFF Dictionary to SFF
254     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
255     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
256     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/    ${SFF_CSD_LOCATOR_FILE}
257     ${elements}=    create list    sff-sff-data-plane-locator    6000    10.1.1.1
258     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/    ${elements}
259     Check For Elements At URI    ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/    ${elements}
260
261 Clean The Datastore After Tests
262     [Documentation]    Clean All Service Function Forwarders In Datastore After Tests
263     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
264
265 *** keywords ***
266 Init Suite
267     [Documentation]    Initialize session and ODL version specific variables
268     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
269     log    ${ODL_STREAM}
270     Run Keyword If    '${ODL_STREAM}' == 'stable-lithium'    Set Suite Variable    ${VERSION_DIR}    lithium
271     ...    ELSE    Set Suite Variable    ${VERSION_DIR}    master
272     Set Suite Variable    ${SERVICE_FORWARDERS_URI}    /restconf/config/service-function-forwarder:service-function-forwarders/
273     Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-function-forwarders.json
274     Set Suite Variable    ${SFF_OVS100_URI}    /restconf/config/service-function-forwarder:service-function-forwarders/service-function-forwarder/ovs-100/
275     Set Suite Variable    ${SFF_OVS100_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_ovs_100.json
276     Set Suite Variable    ${SFF_DPL101_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_dpl_101.json
277     Set Suite Variable    ${SFF_DPL_LOCATOR_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_dpl_locator.json
278     Set Suite Variable    ${SFF_SFD_SF100_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_sfd_sf100.json
279     Set Suite Variable    ${SFF_SFD_LOCATOR_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_sfd_locator.json
280     Set Suite Variable    ${SFF_CSD_SFF100_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_csd_sff100.json
281     Set Suite Variable    ${SFF_CSD_LOCATOR_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sff_csd_locator.json
282