b88a1c0b2e3ed00995ddbbfe69f9decdeb1aba26
[integration/test.git] / csit / suites / openflowplugin / Clustered_Reconciliation / 010_Group_Flows.robot
1 *** Settings ***
2 Documentation     Switch connections and cluster are restarted.
3 Suite Setup       Initialization Phase
4 Suite Teardown    Final Phase
5 Library           RequestsLibrary
6 Resource          ../../../libraries/ClusterManagement.robot
7 Resource          ../../../libraries/ClusterOpenFlow.robot
8 Resource          ../../../libraries/TemplatedRequests.robot
9 Resource          ../../../libraries/MininetKeywords.robot
10 Resource          ../../../libraries/FlowLib.robot
11 Resource          ../../../libraries/Utils.robot
12 Resource          ../../../variables/Variables.robot
13
14 *** Variables ***
15 ${SWITCHES}       3
16 ${ITER}           100
17 ${VAR_DIR}        ${CURDIR}/../../../variables/openflowplugin
18
19 *** Test Cases ***
20 Enable Stale Flow Entry
21     [Documentation]    Enable stale flow entry feature.
22     # Stale flows/groups feature is only available in Boron onwards.
23     CompareStream.Run Keyword If At Least Boron    TemplatedRequests.Put As Json Templated    folder=${VAR_DIR}/frm-config    mapping={"STALE":"true"}    session=session
24
25 Add Groups And Flows
26     [Documentation]    Add ${ITER} groups 1&2 and flows in every switch.
27     Add Groups And Flows    ${ITER}
28
29 Start Mininet Multiple Connections
30     [Documentation]    Start mininet linear with connection to all cluster instances.
31     ${mininet_conn_id}=    MininetKeywords.Start Mininet Multiple Controllers    ${TOOLS_SYSTEM_IP}    ${ClusterManagement__member_index_list}    --topo linear,${SWITCHES} --switch ovsk,protocols=OpenFlow13
32     BuiltIn.Set Suite Variable    ${mininet_conn_id}
33     BuiltIn.Wait Until Keyword Succeeds    10s    1s    OVSDB.Check OVS OpenFlow Connections    ${TOOLS_SYSTEM_IP}    ${SWITCHES*3}
34
35 Check Linear Topology
36     [Documentation]    Check Linear Topology.
37     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Linear Topology    ${SWITCHES}
38
39 Check Flows In Operational DS
40     [Documentation]    Check Groups after mininet starts.
41     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Number Of Flows    ${all_flows}
42
43 Check Groups In Operational DS
44     [Documentation]    Check Flows after mininet starts.
45     FlowLib.Check Number Of Groups    ${all_groups}
46
47 Check Flows In Switch
48     [Documentation]    Check Flows after mininet starts.
49     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${all_flows}
50
51 Check Entity Owner Status And Find Owner and Successor Before Fail
52     [Documentation]    Check Entity Owner Status and identify owner and successor for first switch s1.
53     ${original_owner}    ${original_successor_list}    ClusterOpenFlow.Get OpenFlow Entity Owner Status For One Device    openflow:1    1
54     BuiltIn.Set Suite Variable    ${original_owner}
55
56 Disconnect Mininet From Owner
57     [Documentation]    Disconnect mininet from the owner
58     ${owner_list}    BuiltIn.Create List    ${original_owner}
59     Disconnect Cluster Mininet    break    ${owner_list}
60     BuiltIn.Set Suite Variable    ${owner_list}
61
62 Check Linear Topology After Disconnect
63     [Documentation]    Check Linear Topology After Disconnecting mininet from owner.
64     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Linear Topology    ${SWITCHES}
65
66 Remove Flows And Groups After Mininet Is Disconnected
67     [Documentation]    Remove 1 group 1&2 and 1 flow in every switch after mininet is disconnected.
68     Remove Single Group And Flow
69
70 Check Flows In Operational DS After Mininet Is Disconnected
71     [Documentation]    Check Flows in Operational DS after mininet is disconnected.
72     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Number Of Flows    ${less_flows}
73
74 Check Groups In Operational DS After Mininet Is Disconnected
75     [Documentation]    Check Groups in Operational DS after mininet is disconnected.
76     FlowLib.Check Number Of Groups    ${less_groups}
77
78 Check Flows In Switch After Mininet Is Disconnected
79     [Documentation]    Check Flows in switch after mininet is disconnected
80     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${less_flows}
81
82 Reconnect Mininet To Owner
83     [Documentation]    Reconnect mininet to switch 1 owner.
84     Disconnect Cluster Mininet    restore    ${owner_list}
85
86 Check Linear Topology After Reconnect
87     [Documentation]    Check Linear Topology After Reconnect.
88     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Linear Topology    ${SWITCHES}
89
90 Add Flows And Groups After Reconnect
91     [Documentation]    Add 1 group type 1&2 and 1 flow in every switch.
92     Add Single Group And Flow
93
94 Check Flows After Reconnect In Operational DS
95     [Documentation]    Check Flows in Operational DS after mininet is reconnected.
96     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Number Of Flows    ${all_flows}
97
98 Check Groups After Reconnect In Operational DS
99     [Documentation]    Check Groups in Operational DS after mininet is reconnected.
100     FlowLib.Check Number Of Groups    ${all_groups}
101
102 Check Flows After Reconnect In Switch
103     [Documentation]    Check Flows in switch after mininet is reconnected.
104     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${all_flows}
105
106 Disconnect Mininet From Cluster
107     [Documentation]    Disconnect Mininet from Cluster.
108     Disconnect Cluster Mininet
109
110 Check No Switches After Disconnect
111     [Documentation]    Check no switches in topology after disconnecting mininet from cluster.
112     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check No Switches In Topology    ${SWITCHES}
113
114 Remove Flows And Groups While Mininet Is Disconnected
115     [Documentation]    Remove a group and flow while mininet Is Disconnected from cluster.
116     Remove Single Group And Flow
117
118 Reconnect Mininet To Cluster
119     [Documentation]    Reconnect mininet to cluster by removing Iptables drop rules that were used to disconnect
120     Disconnect Cluster Mininet    restore
121
122 Check Linear Topology After Mininet Reconnects
123     [Documentation]    Check Linear Topology after reconnect.
124     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Linear Topology    ${SWITCHES}
125
126 Check Flows In Operational DS After Mininet Reconnects
127     [Documentation]    Check Flows in Operational DS after mininet is reconnected.
128     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Number Of Flows    ${less_flows}
129
130 Check Groups In Operational DS After Mininet Reconnects
131     [Documentation]    Check Groups in Operational DS after mininet is reconnected to cluster.
132     FlowLib.Check Number Of Groups    ${less_groups}
133
134 Check Flows In Switch After Mininet Reconnects
135     [Documentation]    Check Flows in switch after mininet is reconnected to cluster.
136     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${less_flows}
137
138 Restart Cluster
139     [Documentation]    Stop and Start cluster.
140     # Try to stop contoller, if stop does not work or takes too long, kill controller.
141     ${status}    ${result}=    BuiltIn.Run Keyword And Ignore Error    ClusterManagement.Stop_Members_From_List_Or_All
142     BuiltIn.Run Keyword If    '${status}' != 'PASS'    ClusterManagement.Kill_Members_From_List_Or_All
143     ClusterManagement.Start_Members_From_List_Or_All    wait_for_sync=False
144
145 Check Linear Topology After Controller Restarts
146     [Documentation]    Check Linear Topology after controller restarts.
147     BuiltIn.Wait Until Keyword Succeeds    300s    2s    FlowLib.Check Linear Topology    ${SWITCHES}
148
149 Check Flows In Operational DS After Controller Restarts
150     [Documentation]    Check Flows in Operational DS after controller is restarted.
151     BuiltIn.Wait Until Keyword Succeeds    300s    2s    FlowLib.Check Number Of Flows    ${less_flows}
152
153 Check Groups In Operational DS After Controller Restarts
154     [Documentation]    Check Groups in Operational DS after controller is restarted.
155     FlowLib.Check Number Of Groups    ${less_groups}
156
157 Check Flows In Switch After Controller Restarts
158     [Documentation]    Check Flows in switch after controller is restarted..
159     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${less_flows}
160
161 Stop Mininet
162     [Documentation]    Stop Mininet.
163     MininetKeywords.Stop Mininet And Exit
164
165 Check No Switches
166     [Documentation]    Check no switches in topology.
167     BuiltIn.Wait Until Keyword Succeeds    5s    1s    FlowLib.Check No Switches In Topology    ${SWITCHES}
168
169 *** Keywords ***
170 Initialization Phase
171     [Documentation]    Create controller session and set variables.
172     ClusterManagement.ClusterManagement_Setup
173     # Still need to open controller HTTP session with name session because of old FlowLib.robot library dependency.
174     RequestsLibrary.Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
175     ${switches}    Convert To Integer    ${SWITCHES}
176     ${iter}    Convert To Integer    ${ITER}
177     ${all_groups}=    BuiltIn.Evaluate    ${switches} * ${iter} * 2
178     ${less_groups}=    BuiltIn.Evaluate    ${all_groups} - ${switches} * 2
179     # Stale flows/groups feature enabled in Boron onwards.
180     ${less_groups}=    CompareStream.Set Variable If At Least Boron    ${less_groups}    ${all_groups}
181     ${all_flows}=    BuiltIn.Evaluate    ${switches} * ${iter+1}
182     ${less_flows}=    BuiltIn.Evaluate    ${all_flows} - ${switches}
183     # Stale flows/groups feature enabled in Boron onwards.
184     ${less_flows}=    CompareStream.Set Variable If At Least Boron    ${less_flows}    ${all_flows}
185     BuiltIn.Set Suite Variable    ${switches}
186     BuiltIn.Set Suite Variable    ${iter}
187     BuiltIn.Set Suite Variable    ${all_groups}
188     BuiltIn.Set Suite Variable    ${less_groups}
189     BuiltIn.Set Suite Variable    ${all_flows}
190     BuiltIn.Set Suite Variable    ${less_flows}
191     BuiltIn.Set Suite Variable    ${no_flows}    ${SWITCHES}
192
193 Final Phase
194     [Documentation]    Delete all sessions.
195     ${command} =    BuiltIn.Set Variable    sudo iptables -v -F
196     Utils.Run Command On Controller    cmd=${command}
197     CompareStream.Run Keyword If At Least Boron    TemplatedRequests.Put As Json Templated    folder=${VAR_DIR}/frm-config    mapping={"STALE":"false"}    session=session
198     BuiltIn.Run Keyword And Ignore Error    RequestsLibrary.Delete Request    session    ${CONFIG_NODES_API}
199     RequestsLibrary.Delete All Sessions
200
201 Disconnect Cluster Mininet
202     [Arguments]    ${action}=break    ${member_index_list}=${EMPTY}
203     [Documentation]    Break and restore controller to mininet connection via iptables.
204     ${index_list} =    ClusterManagement.List_Indices_Or_All    given_list=${member_index_list}
205     : FOR    ${index}    IN    @{index_list}
206     \    ${rule} =    BuiltIn.Set Variable    OUTPUT -p all --source ${ODL_SYSTEM_${index}_IP} --destination ${TOOLS_SYSTEM_IP} -j DROP
207     \    ${command} =    BuiltIn.Set Variable If    '${action}'=='restore'    sudo /sbin/iptables -D ${rule}    sudo /sbin/iptables -I ${rule}
208     \    Log To Console    ${ODL_SYSTEM_${index}_IP}
209     \    Utils.Run Command On Controller    ${ODL_SYSTEM_${index}_IP}    cmd=${command}
210     \    ${command} =    BuiltIn.Set Variable    sudo /sbin/iptables -L -n
211     \    ${output} =    Utils.Run Command On Controller    cmd=${command}
212     \    BuiltIn.Log    ${output}
213
214 Add Groups And Flows
215     [Arguments]    ${iter}=1
216     [Documentation]    Add ${ITER} groups type 1 & 2 and flows in every switch.
217     : FOR    ${switch}    IN RANGE    1    ${switches+1}
218     \    TemplatedRequests.Post As Json Templated    folder=${VAR_DIR}/add-group-1    mapping={"SWITCH":"${switch}"}    session=session    iterations=${iter}
219     \    TemplatedRequests.Post As Json Templated    folder=${VAR_DIR}/add-group-2    mapping={"SWITCH":"${switch}"}    session=session    iterations=${iter}
220     \    TemplatedRequests.Post As Json Templated    folder=${VAR_DIR}/add-flow    mapping={"SWITCH":"${switch}"}    session=session    iterations=${iter}
221
222 Add Single Group And Flow
223     [Documentation]    Add 1 group 1&2 and 1 flow in every switch.
224     Add Groups And Flows    1
225
226 Remove Single Group And Flow
227     [Documentation]    Remove 1 group 1&2 and 1 flow in every switch.
228     : FOR    ${switch}    IN RANGE    1    ${switches+1}
229     \    RequestsLibrary.Delete Request    session    ${CONFIG_NODES_API}/node/openflow:${switch}/table/0/flow/1
230     \    RequestsLibrary.Delete Request    session    ${CONFIG_NODES_API}/node/openflow:${switch}/group/1
231     \    RequestsLibrary.Delete Request    session    ${CONFIG_NODES_API}/node/openflow:${switch}/group/1000