Correctly space expected_status
[integration/test.git] / csit / libraries / WorkflowsOpenFlow.robot
1 *** Settings ***
2 Documentation       Resource for OpenFlow workflows. This library can be used for scalability and longevity tests.
3
4 Library             SSHLibrary
5 Library             DateTime
6 Library             RequestsLibrary
7 Library             ScaleClient.py
8 Library             SwitchClasses/BaseSwitch.py
9 Resource            Utils.robot
10 Resource            FlowLib.robot
11 Resource            CompareStream.robot
12 Resource            MininetKeywords.robot
13 Resource            KarafKeywords.robot
14 Resource            ../variables/Variables.robot
15 Resource            ../variables/openflowplugin/Variables.robot
16
17
18 *** Variables ***
19 ${log_level}        ERROR
20 ${flow_count}       10000
21 ${swspread}         linear
22 ${tables}           10
23 ${tabspread}        linear
24 ${nrthreads}        1
25
26
27 *** Keywords ***
28 Workflow Linear Topology
29     [Documentation]    Workflow to bring a Linear topology of ${switches} switches, push flows, hold for ${sustain_time} seconds, delete flows and stop topology.
30     ...    This KW returns workflow state (PASS/FAIL), error message and topology discover time.
31     [Arguments]    ${switches}    ${sustain_time}=0
32     # Define required variables
33     ${error_message}    Set Variable    Test has completed
34     ${topology_discover_time}    Set Variable    ${0}
35     ${controller_list}    Create List    ${ODL_SYSTEM_IP}
36     ${flow_count}    Convert to Integer    ${flow_count}
37     ${flows_ovs_25}    Evaluate    ${flow_count} + ${switches}
38     ${flows_before}    Set Variable    ${switches}
39     ${flows_after}    Set Variable    ${flows_ovs_25}
40     ${flows}    ${notes}    ScaleClient.Generate New Flow Details
41     ...    flows=${flow_count}
42     ...    switches=${switches}
43     ...    swspread=${swspread}
44     ...    tables=${tables}
45     ...    tabspread=${tabspread}
46     # Workflow starts
47     Log to console    ${\n}
48     Log To Console    Starting mininet linear ${switches} switches
49     ${status}    ${result}    Run Keyword And Ignore Error
50     ...    MininetKeywords.Start Mininet Linear
51     ...    ${switches}
52     ...    mininet_timeout=${switches*4}
53     IF    '${status}' == 'FAIL'
54         RETURN    ${status}    Fail starting mininet    ${topology_discover_time}
55     END
56     ${start_time}    DateTime.Get Current Date    result_format=timestamp
57     Log To Console    Verify controller is OK
58     ${status}    ${result}    Run Keyword And Ignore Error    Utils.Verify Controller Is Not Dead    ${ODL_SYSTEM_IP}
59     IF    '${status}' == 'FAIL'
60         RETURN    ${status}    Controller is dead    ${topology_discover_time}
61     END
62     ${status}    ${result}    Run Keyword And Ignore Error
63     ...    Utils.Verify Controller Has No Null Pointer Exceptions
64     ...    ${ODL_SYSTEM_IP}
65     IF    '${status}' == 'FAIL'
66         RETURN    ${status}    Controller has NPE    ${topology_discover_time}
67     END
68     ${status}    ${result}    Run Keyword And Ignore Error
69     ...    Utils.Verify Controller Has No Runtime Exceptions
70     ...    ${ODL_SYSTEM_IP}
71     IF    '${status}' == 'FAIL'
72         RETURN    ${status}    Controller has RuntimeException    ${topology_discover_time}
73     END
74     Log To Console    Checking ${switches} switches
75     ${status}    ${result}    Run Keyword And Ignore Error
76     ...    Wait Until Keyword Succeeds
77     ...    ${switches*2}
78     ...    2s
79     ...    FlowLib.Check Switches In Inventory
80     ...    ${switches}
81     IF    '${status}' == 'FAIL'
82         RETURN    ${status}    Fail checking switch    ${topology_discover_time}
83     END
84     Log To Console    Add table miss flows
85     ${status}    ${result}    Run Keyword And Ignore Error    FlowLib.Add Table Miss Flows    ${switches}
86     IF    '${status}' == 'FAIL'
87         RETURN    ${status}    Fail adding table Miss flows    ${topology_discover_time}
88     END
89     Log To Console    Checking Table Miss Flows
90     ${status}    ${result}    Run Keyword And Ignore Error
91     ...    Wait Until Keyword Succeeds
92     ...    ${switches}
93     ...    2s
94     ...    FlowLib.Check Table Miss Flows
95     ...    ${switches}
96     IF    '${status}' == 'FAIL'
97         RETURN    ${status}    Fail checking table miss flows    ${topology_discover_time}
98     END
99     Log To Console    Checking Linear Topology
100     ${status}    ${result}    Run Keyword And Ignore Error
101     ...    Wait Until Keyword Succeeds
102     ...    ${switches}
103     ...    2s
104     ...    FlowLib.Check Linear Topology
105     ...    ${switches}
106     IF    '${status}' == 'FAIL'
107         RETURN    ${status}    Fail checking topology    ${topology_discover_time}
108     END
109     ${end_time}    DateTime.Get Current Date    result_format=timestamp
110     ${topology_discover_time}    DateTime.Subtract Date From Date    ${end_time}    ${start_time}
111     Log To Console    Topology Discovery Time = ${topology_discover_time} seconds
112     Log To Console    Adding ${flow_count} flows
113     ${status}    ${result}    Run Keyword And Ignore Error
114     ...    ScaleClient.Configure Flows
115     ...    flow_details=${flows}
116     ...    controllers=${controller_list}
117     ...    nrthreads=${nrthreads}
118     IF    '${status}' == 'FAIL'
119         RETURN    ${status}    Fail configuring flows    ${topology_discover_time}
120     END
121     Log To Console    Checking ${flow_count} flows in Mininet
122     ${status}    ${result}    Run Keyword And Ignore Error
123     ...    MininetKeywords.Verify Aggregate Flow From Mininet Session
124     ...    ${mininet_conn_id}
125     ...    ${flows_after}
126     ...    ${switches}
127     IF    '${status}' == 'FAIL'
128         RETURN    ${status}    Fail checking flows in mininet    ${topology_discover_time}
129     END
130     Log To Console    Checking ${flow_count} flows in Operational DS
131     ${status}    ${result}    Run Keyword And Ignore Error
132     ...    Wait Until Keyword Succeeds
133     ...    ${switches*4}
134     ...    2s
135     ...    FlowLib.Check Flows Operational Datastore
136     ...    ${flows_after}
137     IF    '${status}' == 'FAIL'
138         RETURN    ${status}    Fail checking flows in operational DS    ${topology_discover_time}
139     END
140     Log To Console    Sleep for ${sustain_time} seconds
141     Sleep    ${sustain_time}
142     Log To Console    Deleting ${flow_count} flows
143     ${status}    ${result}    Run Keyword And Ignore Error
144     ...    ScaleClient.Deconfigure Flows
145     ...    flow_details=${flows}
146     ...    controllers=${controller_list}
147     ...    nrthreads=${nrthreads}
148     IF    '${status}' == 'FAIL'
149         RETURN    ${status}    Fail deconfiguring flows    ${topology_discover_time}
150     END
151     Log To Console    Checking no flows in Mininet
152     ${status}    ${result}    Run Keyword And Ignore Error
153     ...    MininetKeywords.Verify Aggregate Flow From Mininet Session
154     ...    ${mininet_conn_id}
155     ...    ${flows_before}
156     ...    ${switches}
157     IF    '${status}' == 'FAIL'
158         RETURN    ${status}    Fail checking no flows in mininet    ${topology_discover_time}
159     END
160     Log To Console    Checking no flows in Operational DS
161     ${status}    ${result}    Run Keyword And Ignore Error
162     ...    Wait Until Keyword Succeeds
163     ...    ${switches*4}
164     ...    2s
165     ...    FlowLib.Check Flows Operational Datastore
166     ...    ${flows_before}
167     IF    '${status}' == 'FAIL'
168         RETURN    ${status}    Fail checking no flows in operational DS    ${topology_discover_time}
169     END
170     Log To Console    Stopping Mininet
171     ${status}    ${result}    Run Keyword And Ignore Error    MininetKeywords.Stop Mininet And Exit
172     IF    '${status}' == 'FAIL'
173         RETURN    ${status}    Fail stopping mininet    ${topology_discover_time}
174     END
175     Log To Console    Checking No Switches
176     ${status}    ${result}    Run Keyword And Ignore Error
177     ...    Wait Until Keyword Succeeds
178     ...    30s
179     ...    2s
180     ...    FlowLib.Check No Switches In Inventory
181     ...    ${switches}
182     IF    '${status}' == 'FAIL'
183         RETURN    ${status}    Fail checking no switch    ${topology_discover_time}
184     END
185     Log To Console    Checking No Topology
186     ${status}    ${result}    Run Keyword And Ignore Error
187     ...    Wait Until Keyword Succeeds
188     ...    10s
189     ...    2s
190     ...    FlowLib.Check No Switches In Topology
191     ...    ${switches}
192     IF    '${status}' == 'FAIL'
193         RETURN    ${status}    Fail checking no topology    ${topology_discover_time}
194     END
195     RETURN    PASS    ${error_message}    ${topology_discover_time}
196
197 Workflow Full Mesh Topology
198     [Documentation]    Workflow to bring a Full mesh topology of ${switches} switches, push some flows, delete flows and stop topology.
199     ...    This KW returns workflow state (PASS/FAIL), error message and topology discover time.
200     [Arguments]    ${switches}    ${sustain_time}=0
201     # Define required variables
202     ${error_message}    Set Variable    Test has completed
203     ${topology_discover_time}    Set Variable    ${0}
204     ${mininet_timeout}    Evaluate    ${switches} * ${switches}
205     ${links}    Evaluate    ${switches} * ${switches-1}
206     ${controller_list}    Create List    ${ODL_SYSTEM_IP}
207     ${flow_count}    Convert to Integer    ${flow_count}
208     ${flows_ovs_25}    Evaluate    ${flow_count} + ${switches}
209     ${flows_before}    Set Variable    ${switches}
210     ${flows_after}    Set Variable    ${flows_ovs_25}
211     ${flows}    ${notes}    ScaleClient.Generate New Flow Details
212     ...    flows=${flow_count}
213     ...    switches=${switches}
214     ...    swspread=${swspread}
215     ...    tables=${tables}
216     ...    tabspread=${tabspread}
217     # Workflow starts
218     Log to console    ${\n}
219     Log To Console    Start a mininet full mesh ${switches} switches
220     ${status}    ${result}    Run Keyword And Ignore Error
221     ...    MininetKeywords.Start Mininet Full Mesh
222     ...    ${switches}
223     ...    mininet_timeout=${mininet_timeout}
224     IF    '${status}' == 'FAIL'
225         RETURN    ${status}    Fail starting mininet    ${topology_discover_time}
226     END
227     ${start_time}    DateTime.Get Current Date    result_format=timestamp
228     Log To Console    Verify controller is OK
229     ${status}    ${result}    Run Keyword And Ignore Error    Utils.Verify Controller Is Not Dead    ${ODL_SYSTEM_IP}
230     IF    '${status}' == 'FAIL'
231         RETURN    ${status}    Controller is dead    ${topology_discover_time}
232     END
233     ${status}    ${result}    Run Keyword And Ignore Error
234     ...    Utils.Verify Controller Has No Null Pointer Exceptions
235     ...    ${ODL_SYSTEM_IP}
236     IF    '${status}' == 'FAIL'
237         RETURN    ${status}    Controller has NPE    ${topology_discover_time}
238     END
239     ${status}    ${result}    Run Keyword And Ignore Error
240     ...    Utils.Verify Controller Has No Runtime Exceptions
241     ...    ${ODL_SYSTEM_IP}
242     IF    '${status}' == 'FAIL'
243         RETURN    ${status}    Controller has RuntimeException    ${topology_discover_time}
244     END
245     Log To Console    Checking ${switches} switches
246     ${status}    ${result}    Run Keyword And Ignore Error
247     ...    Wait Until Keyword Succeeds
248     ...    30s
249     ...    2s
250     ...    FlowLib.Check Switches In Inventory
251     ...    ${switches}
252     IF    '${status}' == 'FAIL'
253         RETURN    ${status}    Fail checking switch    ${topology_discover_time}
254     END
255     Log To Console    Check number of links in inventory is ${links}
256     ${status}    ${result}    Run Keyword And Ignore Error
257     ...    Wait Until Keyword Succeeds
258     ...    10s
259     ...    2s
260     ...    FlowLib.Check Number Of Links
261     ...    ${links}
262     IF    '${status}' == 'FAIL'
263         RETURN    ${status}    Fail checking topology    ${topology_discover_time}
264     END
265     ${end_time}    DateTime.Get Current Date    result_format=timestamp
266     ${topology_discover_time}    DateTime.Subtract Date From Date    ${end_time}    ${start_time}
267     Log To Console    Topology Discovery Time = ${topology_discover_time} seconds
268     Log To Console    Adding ${flow_count} flows
269     ${status}    ${result}    Run Keyword And Ignore Error
270     ...    ScaleClient.Configure Flows
271     ...    flow_details=${flows}
272     ...    controllers=${controller_list}
273     ...    nrthreads=${nrthreads}
274     IF    '${status}' == 'FAIL'
275         RETURN    ${status}    Fail configuring flows    ${topology_discover_time}
276     END
277     Log To Console    Checking ${flow_count} flows in Mininet
278     ${status}    ${result}    Run Keyword And Ignore Error
279     ...    MininetKeywords.Verify Aggregate Flow From Mininet Session
280     ...    ${mininet_conn_id}
281     ...    ${flows_after}
282     ...    ${switches}
283     IF    '${status}' == 'FAIL'
284         RETURN    ${status}    Fail checking flows in mininet    ${topology_discover_time}
285     END
286     Log To Console    Checking ${flow_count} flows in Operational DS
287     ${status}    ${result}    Run Keyword And Ignore Error
288     ...    Wait Until Keyword Succeeds
289     ...    ${switches*4}
290     ...    2s
291     ...    FlowLib.Check Flows Operational Datastore
292     ...    ${flows_after}
293     IF    '${status}' == 'FAIL'
294         RETURN    ${status}    Fail checking flows in operational DS    ${topology_discover_time}
295     END
296     Log To Console    Sleep for ${sustain_time} seconds
297     Sleep    ${sustain_time}
298     Log To Console    Deleting ${flow_count} flows
299     ${status}    ${result}    Run Keyword And Ignore Error
300     ...    ScaleClient.Deconfigure Flows
301     ...    flow_details=${flows}
302     ...    controllers=${controller_list}
303     ...    nrthreads=${nrthreads}
304     IF    '${status}' == 'FAIL'
305         RETURN    ${status}    Fail deconfiguring flows    ${topology_discover_time}
306     END
307     Log To Console    Checking no flows in Mininet
308     ${status}    ${result}    Run Keyword And Ignore Error
309     ...    MininetKeywords.Verify Aggregate Flow From Mininet Session
310     ...    ${mininet_conn_id}
311     ...    ${flows_before}
312     ...    ${switches}
313     IF    '${status}' == 'FAIL'
314         RETURN    ${status}    Fail checking no flows in mininet    ${topology_discover_time}
315     END
316     Log To Console    Checking no flows in Operational DS
317     ${status}    ${result}    Run Keyword And Ignore Error
318     ...    Wait Until Keyword Succeeds
319     ...    ${switches*4}
320     ...    2s
321     ...    FlowLib.Check Flows Operational Datastore
322     ...    ${flows_before}
323     IF    '${status}' == 'FAIL'
324         RETURN    ${status}    Fail checking no flows in operational DS    ${topology_discover_time}
325     END
326     Log To Console    Stopping Mininet
327     ${status}    ${result}    Run Keyword And Ignore Error    MininetKeywords.Stop Mininet And Exit
328     IF    '${status}' == 'FAIL'
329         RETURN    ${status}    Fail stopping mininet    ${topology_discover_time}
330     END
331     Log To Console    Checking No Switches
332     ${status}    ${result}    Run Keyword And Ignore Error
333     ...    Wait Until Keyword Succeeds
334     ...    10s
335     ...    2s
336     ...    FlowLib.Check No Switches In Inventory
337     ...    ${switches}
338     IF    '${status}' == 'FAIL'
339         RETURN    ${status}    Fail checking no switch    ${topology_discover_time}
340     END
341     Log To Console    Checking No Topology
342     ${status}    ${result}    Run Keyword And Ignore Error
343     ...    Wait Until Keyword Succeeds
344     ...    10s
345     ...    2s
346     ...    FlowLib.Check No Switches In Topology
347     ...    ${switches}
348     IF    '${status}' == 'FAIL'
349         RETURN    ${status}    Fail checking no topology    ${topology_discover_time}
350     END
351     RETURN    PASS    ${error_message}    ${topology_discover_time}
352
353 Workflow Setup
354     RequestsLibrary.Create Session
355     ...    session
356     ...    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
357     ...    auth=${AUTH}
358     ...    headers=${HEADERS_XML}
359     Wait Until Keyword Succeeds    3x    1s    KarafKeywords.Issue Command On Karaf Console    log:set ${log_level}
360
361 Workflow Teardown
362     [Documentation]    Cleanup when workflow is interrupt
363     Run Keyword And Ignore Error    RequestsLibrary.Delete Request    session    ${RFC8040_NODES_API}
364     Utils.Clean Mininet System
365     RequestsLibrary.Delete All Sessions