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
25 Add Group 1 In Every Switch
26 [Documentation] Add ${ITER} groups of type 1 in every switch.
27 : FOR ${switch} IN RANGE 1 ${switches+1}
28 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-1 mapping={"SWITCH":"${switch}"} session=session iterations=${iter}
30 Add Group 2 In Every Switch
31 [Documentation] Add ${ITER} groups of type 2 in every switch.
32 : FOR ${switch} IN RANGE 1 ${switches+1}
33 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-2 mapping={"SWITCH":"${switch}"} session=session iterations=${iter}
35 Add Flow to Group 2 In Every Switch
36 [Documentation] Add ${ITER} flows to group type 2 in every switch.
37 : FOR ${switch} IN RANGE 1 ${switches+1}
38 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-flow mapping={"SWITCH":"${switch}"} session=session iterations=${ITER}
40 Start Mininet Multiple Connections
41 [Documentation] Start mininet linear with connection to all cluster instances.
42 ${mininet_conn_id}= MininetKeywords.Start Mininet Multiple Controllers ${TOOLS_SYSTEM_IP} ${ClusterManagement__member_index_list} --topo linear,${SWITCHES} --switch ovsk,protocols=OpenFlow13
43 BuiltIn.Set Suite Variable ${mininet_conn_id}
44 BuiltIn.Wait Until Keyword Succeeds 10s 1s OVSDB.Check OVS OpenFlow Connections ${TOOLS_SYSTEM_IP} ${SWITCHES*3}
47 [Documentation] Check Linear Topology.
48 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
50 Check Flows In Operational DS
51 [Documentation] Check Groups after mininet starts.
52 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${all_flows}
54 Check Groups In Operational DS
55 [Documentation] Check Flows after mininet starts.
56 FlowLib.Check Number Of Groups ${all_groups}
59 [Documentation] Check Flows after mininet starts.
60 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${all_flows}
62 Disconnect Mininet From Cluster
63 [Documentation] Disconnect Mininet from Cluster.
64 Disconnect Cluster Mininet
66 Check No Switches After Disconnect
67 [Documentation] Check no switches in topology.
68 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
70 Remove Flows And Groups While Mininet Is Disconnected
71 [Documentation] Remove some groups and flows while network is down.
72 : FOR ${switch} IN RANGE 1 ${switches+1}
73 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/table/0/flow/1
74 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1
75 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1000
77 Reconnect Mininet To Cluster
78 [Documentation] Reconnect mininet to cluster by removing Iptables drop rules that were used to disconnect
79 Disconnect Cluster Mininet restore
81 Check Linear Topology After Mininet Reconnects
82 [Documentation] Check Linear Topology.
83 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
85 Check Flows In Operational DS After Mininet Reconnects
86 [Documentation] Check Flows after mininet starts.
87 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows}
89 Check Groups In Operational DS After Mininet Reconnects
90 [Documentation] Check Flows after mininet starts.
91 FlowLib.Check Number Of Groups ${less_groups}
93 Check Flows In Switch After Mininet Reconnects
94 [Documentation] Check Flows after mininet starts.
95 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
98 [Documentation] Stop and Start cluster.
99 # Try to stop contoller, if stop does not work or takes too long, kill controller.
100 ${status} ${result}= BuiltIn.Run Keyword And Ignore Error ClusterManagement.Stop_Members_From_List_Or_All
101 BuiltIn.Run Keyword If '${status}' != 'PASS' ClusterManagement.Kill_Members_From_List_Or_All
102 ClusterManagement.Start_Members_From_List_Or_All wait_for_sync=False
104 Check Linear Topology After Controller Restarts
105 [Documentation] Check Linear Topology.
106 BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Linear Topology ${SWITCHES}
108 Check Flows In Operational DS After Controller Restarts
109 [Documentation] Check Flows after mininet starts.
110 BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Number Of Flows ${less_flows}
112 Check Groups In Operational DS After Controller Restarts
113 [Documentation] Check Flows after mininet starts.
114 FlowLib.Check Number Of Groups ${less_groups}
116 Check Flows In Switch After Controller Restarts
117 [Documentation] Check Flows after mininet starts.
118 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
121 [Documentation] Stop Mininet.
122 MininetKeywords.Stop Mininet And Exit
125 [Documentation] Check no switches in topology.
126 BuiltIn.Wait Until Keyword Succeeds 5s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
130 [Documentation] Create controller session and set variables.
131 ClusterManagement.ClusterManagement_Setup
132 # Still need to open controller HTTP session with name session because of old FlowLib.robot library dependency.
133 RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
134 ${switches} Convert To Integer ${SWITCHES}
135 ${iter} Convert To Integer ${ITER}
136 ${all_groups}= BuiltIn.Evaluate ${switches} * ${iter} * 2
137 ${less_groups}= BuiltIn.Evaluate ${all_groups} - ${switches} * 2
138 # Stale flows/groups feature enabled in Boron onwards.
139 ${less_groups}= CompareStream.Set Variable If At Least Boron ${less_groups} ${all_groups}
140 ${all_flows}= BuiltIn.Evaluate ${switches} * ${iter+1}
141 ${less_flows}= BuiltIn.Evaluate ${all_flows} - ${switches}
142 # Stale flows/groups feature enabled in Boron onwards.
143 ${less_flows}= CompareStream.Set Variable If At Least Boron ${less_flows} ${all_flows}
144 BuiltIn.Set Suite Variable ${switches}
145 BuiltIn.Set Suite Variable ${iter}
146 BuiltIn.Set Suite Variable ${all_groups}
147 BuiltIn.Set Suite Variable ${less_groups}
148 BuiltIn.Set Suite Variable ${all_flows}
149 BuiltIn.Set Suite Variable ${less_flows}
150 BuiltIn.Set Suite Variable ${no_flows} ${SWITCHES}
153 [Documentation] Delete all sessions.
154 ${command} = BuiltIn.Set Variable sudo iptables -v -F
155 Utils.Run Command On Controller cmd=${command}
156 CompareStream.Run Keyword If At Least Boron TemplatedRequests.Put As Json Templated folder=${VAR_DIR}/frm-config mapping={"STALE":"false"} session=session
157 BuiltIn.Run Keyword And Ignore Error RequestsLibrary.Delete Request session ${CONFIG_NODES_API}
158 RequestsLibrary.Delete All Sessions
160 Disconnect Cluster Mininet
161 [Arguments] ${action}=break ${member_index_list}=${EMPTY}
162 [Documentation] Break and restore controller to mininet connection via iptables.
163 ${index_list} = ClusterManagement.List_Indices_Or_All given_list=${member_index_list}
164 : FOR ${index} IN @{index_list}
165 \ ${rule} = BuiltIn.Set Variable OUTPUT -p all --source ${ODL_SYSTEM_${index}_IP} --destination ${TOOLS_SYSTEM_IP} -j DROP
166 \ ${command} = BuiltIn.Set Variable If '${action}'=='restore' sudo /sbin/iptables -D ${rule} sudo /sbin/iptables -I ${rule}
167 \ Log To Console ${ODL_SYSTEM_${index}_IP}
168 \ Utils.Run Command On Controller ${ODL_SYSTEM_${index}_IP} cmd=${command}
169 \ ${command} = BuiltIn.Set Variable sudo /sbin/iptables -L -n
170 \ ${output} = Utils.Run Command On Controller cmd=${command}
171 \ BuiltIn.Log ${output}