2 Documentation Test reconciliation of chained groups and flows after switch connection and controller are restarted.
3 Suite Setup Initialization Phase
4 Suite Teardown Final Phase
5 Library RequestsLibrary
6 Resource ../../../libraries/ClusterManagement.robot
7 Resource ../../../libraries/TemplatedRequests.robot
8 Resource ../../../libraries/MininetKeywords.robot
9 Resource ../../../libraries/FlowLib.robot
10 Resource ../../../libraries/Utils.robot
11 Resource ../../../variables/Variables.robot
16 ${VAR_DIR} ${CURDIR}/../../../variables/openflowplugin
19 Enable Stale Flow Entry
20 [Documentation] Check Flows after mininet starts.
21 # Stale flows/groups feature is only available in Boron onwards.
22 CompareStream.Run Keyword If At Least Boron TemplatedRequests.Put As Json Templated folder=${VAR_DIR}/frm-config mapping={"STALE":"true"} session=session
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 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-1 mapping={"SWITCH":"${switch}"} session=session iterations=${ITER}
29 Add Group 2 In Every Switch
30 [Documentation] Add ${ITER} groups of type 2 in every switch.
31 : FOR ${switch} IN RANGE 1 ${SWITCHES+1}
32 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-2 mapping={"SWITCH":"${switch}"} session=session iterations=${ITER}
34 Add Flow to Group 2 In Every Switch
35 [Documentation] Add ${ITER} flows to group type 2 in every switch.
36 : FOR ${switch} IN RANGE 1 ${SWITCHES+1}
37 \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-flow mapping={"SWITCH":"${switch}"} session=session iterations=${ITER}
40 [Documentation] Start Mininet Linear with ${SWITCHES} switches.
41 MininetKeywords.Start Mininet Linear ${SWITCHES}
44 [Documentation] Check Linear Topology.
45 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
47 Check Flows In Operational DS
48 [Documentation] Check Groups after mininet starts.
49 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${all_flows}
51 Check Groups In Operational DS
52 [Documentation] Check Flows after mininet starts.
53 FlowLib.Check Number Of Groups ${all_groups}
56 [Documentation] Check Flows after mininet starts.
57 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${all_flows}
60 [Documentation] Disconnect Mininet.
61 Disconnect Controller Mininet
63 Check No Switches After Disconnect
64 [Documentation] Check no switches in topology.
65 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
67 Remove Flows And Groups While Mininet Is Disconnected
68 [Documentation] Remove some groups and flows while network is down.
69 : FOR ${switch} IN RANGE 1 ${SWITCHES+1}
70 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/table/0/flow/1
71 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1
72 \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1000
75 [Documentation] Connect Mininet.
76 Disconnect Controller Mininet restore
78 Check Linear Topology After Mininet Reconnects
79 [Documentation] Check Linear Topology.
80 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES}
82 Check Flows In Operational DS After Mininet Reconnects
83 [Documentation] Check Flows after mininet starts.
84 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows}
86 Check Groups In Operational DS After Mininet Reconnects
87 [Documentation] Check Flows after mininet starts.
88 FlowLib.Check Number Of Groups ${less_groups}
90 Check Flows In Switch After Mininet Reconnects
91 [Documentation] Check Flows after mininet starts.
92 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
95 [Documentation] Stop and Start controller.
96 # Try to stop contoller, if stop does not work or takes too long, kill controller.
97 ${status} ${result}= BuiltIn.Run Keyword And Ignore Error ClusterManagement.Stop_Members_From_List_Or_All
98 BuiltIn.Run Keyword If '${status}' != 'PASS' ClusterManagement.Kill_Members_From_List_Or_All
99 ClusterManagement.Start_Members_From_List_Or_All wait_for_sync=False
101 Check Linear Topology After Controller Restarts
102 [Documentation] Check Linear Topology.
103 BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Linear Topology ${SWITCHES}
105 Check Flows In Operational DS After Controller Restarts
106 [Documentation] Check Flows after mininet starts.
107 BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows}
109 Check Groups In Operational DS After Controller Restarts
110 [Documentation] Check Flows after mininet starts.
111 FlowLib.Check Number Of Groups ${less_groups}
113 Check Flows In Switch After Controller Restarts
114 [Documentation] Check Flows after mininet starts.
115 MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows}
118 [Documentation] Stop Mininet.
119 MininetKeywords.Stop Mininet And Exit
122 [Documentation] Check no switches in topology.
123 BuiltIn.Wait Until Keyword Succeeds 5s 1s FlowLib.Check No Switches In Topology ${SWITCHES}
127 [Documentation] Create controller session and set variables.
128 ClusterManagement.ClusterManagement_Setup
129 # Still need to open controller HTTP session with name session because of old FlowLib.robot library dependency.
130 RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
131 ${all_groups}= BuiltIn.Evaluate ${SWITCHES} * ${ITER} * 2
132 ${less_groups}= BuiltIn.Evaluate ${all_groups} - ${SWITCHES} * 2
133 # Stale flows/groups feature enabled in Boron onwards.
134 ${less_groups}= CompareStream.Set Variable If At Least Boron ${less_groups} ${all_groups}
135 ${all_flows}= BuiltIn.Evaluate ${SWITCHES} * ${ITER+1}
136 ${less_flows}= BuiltIn.Evaluate ${all_flows} - ${SWITCHES}
137 # Stale flows/groups feature enabled in Boron onwards.
138 ${less_flows}= CompareStream.Set Variable If At Least Boron ${less_flows} ${all_flows}
139 BuiltIn.Set Suite Variable ${all_groups}
140 BuiltIn.Set Suite Variable ${less_groups}
141 BuiltIn.Set Suite Variable ${all_flows}
142 BuiltIn.Set Suite Variable ${less_flows}
143 BuiltIn.Set Suite Variable ${no_flows} ${SWITCHES}
146 [Documentation] Delete all sessions.
147 ${command} = BuiltIn.Set Variable sudo iptables -v -F
148 Utils.Run Command On Controller cmd=${command}
149 CompareStream.Run Keyword If At Least Boron TemplatedRequests.Put As Json Templated folder=${VAR_DIR}/frm-config mapping={"STALE":"false"} session=session
150 BuiltIn.Run Keyword And Ignore Error RequestsLibrary.Delete Request session ${CONFIG_NODES_API}
151 RequestsLibrary.Delete All Sessions
153 Disconnect Controller Mininet
154 [Arguments] ${action}=break
155 [Documentation] Break and restore controller to mininet connection via iptables.
156 ${rule} = BuiltIn.Set Variable OUTPUT -p all --source ${ODL_SYSTEM_IP} --destination ${TOOLS_SYSTEM_IP} -j DROP
157 ${command} = BuiltIn.Set Variable If '${action}'=='restore' sudo /sbin/iptables -D ${rule} sudo /sbin/iptables -I ${rule}
158 Utils.Run Command On Controller cmd=${command}
159 ${command} = BuiltIn.Set Variable sudo /sbin/iptables -L -n
160 ${output} = Utils.Run Command On Controller cmd=${command}
161 BuiltIn.Log ${output}