2 Documentation Test reconciliation of chained groups and flows after switch connection and controller are restarted.
4 Library RequestsLibrary
5 Resource ../../../libraries/ClusterManagement.robot
6 Resource ../../../libraries/TemplatedRequests.robot
7 Resource ../../../libraries/MininetKeywords.robot
8 Resource ../../../libraries/FlowLib.robot
9 Resource ../../../libraries/Utils.robot
10 Resource ../../../variables/Variables.robot
11 Resource ../../../variables/openflowplugin/Variables.robot
13 Suite Setup Initialization Phase
14 Suite Teardown Final Phase
20 ${VAR_DIR} ${CURDIR}/../../../variables/openflowplugin
24 Add Group 1 In Every Switch
25 [Documentation] Add ${ITER} groups of type 1 in every switch.
26 FOR ${switch} IN RANGE 1 ${switches+1}
27 &{mapping} BuiltIn.Create_Dictionary NODE=openflow:${switch}
28 TemplatedRequests.Post As Json Templated
29 ... folder=${VAR_DIR}/add-group-1
30 ... mapping=${mapping}
32 ... iterations=${iter}
35 Add Group 2 In Every Switch
36 [Documentation] Add ${ITER} groups of type 2 in every switch.
37 FOR ${switch} IN RANGE 1 ${switches+1}
38 &{mapping} BuiltIn.Create_Dictionary NODE=openflow:${switch}
39 TemplatedRequests.Post As Json Templated
40 ... folder=${VAR_DIR}/add-group-2
41 ... mapping=${mapping}
43 ... iterations=${iter}
46 Add Flow to Group 2 In Every Switch
47 [Documentation] Add ${ITER} flows to group type 2 in every switch.
48 FOR ${switch} IN RANGE 1 ${switches+1}
49 &{mapping} BuiltIn.Create_Dictionary NODE=openflow:${switch}
50 TemplatedRequests.Post As Json Templated
51 ... folder=${VAR_DIR}/add-flow
52 ... mapping=${mapping}
54 ... iterations=${ITER}
58 [Documentation] Start Mininet Linear with ${SWITCHES} switches.
59 MininetKeywords.Start Mininet Linear ${SWITCHES}
62 [Documentation] Check Linear Topology.
63 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
65 Check Flows In Operational DS
66 [Documentation] Check Groups after mininet starts.
67 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${all_flows}
69 Check Groups In Operational DS
70 [Documentation] Check Flows after mininet starts.
71 FlowLib.Check Number Of Groups ${all_groups}
74 [Documentation] Check Flows after mininet starts.
75 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${all_flows}
78 [Documentation] Disconnect Mininet.
79 Disconnect Controller Mininet
81 Check No Switches After Disconnect
82 [Documentation] Check no switches in topology.
83 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
86 [Documentation] Connect Mininet.
87 Disconnect Controller Mininet restore
89 Check Linear Topology After Mininet Reconnects
90 [Documentation] Check Linear Topology.
91 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
93 Remove Flows And Groups After Mininet Reconnects
94 [Documentation] Remove some groups and flows while network is down.
95 FOR ${switch} IN RANGE 1 ${switches+1}
96 RequestsLibrary.DELETE On Session
98 ... url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:table=0/flow=1
99 RequestsLibrary.DELETE On Session
101 ... url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:group=1
102 RequestsLibrary.DELETE On Session
104 ... url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:group=1000
107 Check Flows In Operational DS After Mininet Reconnects
108 [Documentation] Check Flows after mininet starts.
109 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows}
111 Check Groups In Operational DS After Mininet Reconnects
112 [Documentation] Check Flows after mininet starts.
113 FlowLib.Check Number Of Groups ${less_groups}
115 Check Flows In Switch After Mininet Reconnects
116 [Documentation] Check Flows after mininet starts.
117 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
120 [Documentation] Stop and Start controller.
121 # Try to stop contoller, if stop does not work or takes too long, kill controller.
122 ${status} ${result} BuiltIn.Run Keyword And Ignore Error ClusterManagement.Stop_Members_From_List_Or_All
123 IF '${status}' != 'PASS'
124 ClusterManagement.Kill_Members_From_List_Or_All
126 ClusterManagement.Start_Members_From_List_Or_All wait_for_sync=False
128 Check Linear Topology After Controller Restarts
129 [Documentation] Check Linear Topology.
130 BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Linear Topology ${SWITCHES}
132 Check Flows In Operational DS After Controller Restarts
133 [Documentation] Check Flows after mininet starts.
134 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows}
136 Check Groups In Operational DS After Controller Restarts
137 [Documentation] Check Flows after mininet starts.
138 FlowLib.Check Number Of Groups ${less_groups}
140 Check Flows In Switch After Controller Restarts
141 [Documentation] Check Flows after mininet starts.
142 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
145 [Documentation] Stop Mininet.
146 MininetKeywords.Stop Mininet And Exit
149 [Documentation] Check no switches in topology.
150 BuiltIn.Wait Until Keyword Succeeds 5s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
155 [Documentation] Create controller session and set variables.
156 ClusterManagement.ClusterManagement_Setup
157 # Still need to open controller HTTP session with name session because of old FlowLib.robot library dependency.
158 RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
159 ${switches} Convert To Integer ${SWITCHES}
160 ${iter} Convert To Integer ${ITER}
161 ${all_groups} BuiltIn.Evaluate ${switches} * ${iter} * 2
162 ${less_groups} BuiltIn.Evaluate ${all_groups} - ${switches} * 2
163 # Stale flows/groups feature enabled in Boron onwards.
164 ${all_flows} BuiltIn.Evaluate ${switches} * ${iter+1}
165 ${less_flows} BuiltIn.Evaluate ${all_flows} - ${switches}
166 # Stale flows/groups feature enabled in Boron onwards.
167 BuiltIn.Set Suite Variable ${switches}
168 BuiltIn.Set Suite Variable ${iter}
169 BuiltIn.Set Suite Variable ${all_groups}
170 BuiltIn.Set Suite Variable ${less_groups}
171 BuiltIn.Set Suite Variable ${all_flows}
172 BuiltIn.Set Suite Variable ${less_flows}
173 BuiltIn.Set Suite Variable ${no_flows} ${SWITCHES}
176 [Documentation] Delete all sessions.
177 ${command} BuiltIn.Set Variable sudo iptables -v -F
178 Utils.Run Command On Controller cmd=${command}
179 BuiltIn.Run Keyword And Ignore Error RequestsLibrary.DELETE On Session session url=${RFC8040_NODES_API}
180 RequestsLibrary.Delete All Sessions
182 Disconnect Controller Mininet
183 [Documentation] Break and restore controller to mininet connection via iptables.
184 [Arguments] ${action}=break
185 ${rule} BuiltIn.Set Variable OUTPUT -p all --source ${ODL_SYSTEM_IP} --destination ${TOOLS_SYSTEM_IP} -j DROP
186 ${command} BuiltIn.Set Variable If
187 ... '${action}'=='restore'
188 ... sudo /sbin/iptables -D ${rule}
189 ... sudo /sbin/iptables -I ${rule}
190 Utils.Run Command On Controller cmd=${command}
191 ${command} BuiltIn.Set Variable sudo /sbin/iptables -L -n
192 ${output} Utils.Run Command On Controller cmd=${command}
193 BuiltIn.Log ${output}