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
17 ${VAR_DIR} ${CURDIR}/../../../variables/openflowplugin
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
26 [Documentation] Add ${ITER} groups 1&2 and flows in every switch.
27 Add Groups And Flows ${ITER}
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}
36 [Documentation] Check Linear Topology.
37 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
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}
43 Check Groups In Operational DS
44 [Documentation] Check Flows after mininet starts.
45 FlowLib.Check Number Of Groups ${all_groups}
48 [Documentation] Check Flows after mininet starts.
49 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${all_flows}
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}
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}
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}
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
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}
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}
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}
82 Reconnect Mininet To Owner
83 [Documentation] Reconnect mininet to switch 1 owner.
84 Disconnect Cluster Mininet restore ${owner_list}
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}
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
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}
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}
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}
106 Disconnect Mininet From Cluster
107 [Documentation] Disconnect Mininet from Cluster.
108 Disconnect Cluster Mininet
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}
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
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
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}
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}
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}
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}
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
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}
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}
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}
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}
162 [Documentation] Stop Mininet.
163 MininetKeywords.Stop Mininet And Exit
166 [Documentation] Check no switches in topology.
167 BuiltIn.Wait Until Keyword Succeeds 5s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
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}
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
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}
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}
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
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