Migrate Get Requests invocations(libraries)
[integration/test.git] / csit / suites / openflowplugin / Reconciliation / 010_Group_Flows.robot
1 *** Settings ***
2 Documentation       Test reconciliation of chained groups and flows after switch connection and controller are restarted.
3
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
12
13 Suite Setup         Initialization Phase
14 Suite Teardown      Final Phase
15
16
17 *** Variables ***
18 ${SWITCHES}     3
19 ${ITER}         100
20 ${VAR_DIR}      ${CURDIR}/../../../variables/openflowplugin
21
22
23 *** Test Cases ***
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}
31         ...    session=session
32         ...    iterations=${iter}
33     END
34
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}
42         ...    session=session
43         ...    iterations=${iter}
44     END
45
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}
53         ...    session=session
54         ...    iterations=${ITER}
55     END
56
57 Start Mininet Linear
58     [Documentation]    Start Mininet Linear with ${SWITCHES} switches.
59     MininetKeywords.Start Mininet Linear    ${SWITCHES}
60
61 Check Linear Topology
62     [Documentation]    Check Linear Topology.
63     BuiltIn.Wait Until Keyword Succeeds    30s    1s    FlowLib.Check Linear Topology    ${SWITCHES}
64
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}
68
69 Check Groups In Operational DS
70     [Documentation]    Check Flows after mininet starts.
71     FlowLib.Check Number Of Groups    ${all_groups}
72
73 Check Flows In Switch
74     [Documentation]    Check Flows after mininet starts.
75     MininetKeywords.Check Flows In Mininet    ${mininet_conn_id}    ${all_flows}
76
77 Disconnect Mininet
78     [Documentation]    Disconnect Mininet.
79     Disconnect Controller Mininet
80
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}
84
85 Reconnect Mininet
86     [Documentation]    Connect Mininet.
87     Disconnect Controller Mininet    restore
88
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}
92
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
97         ...    session
98         ...    url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:table=0/flow=1
99         RequestsLibrary.DELETE On Session
100         ...    session
101         ...    url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:group=1
102         RequestsLibrary.DELETE On Session
103         ...    session
104         ...    url=${RFC8040_NODES_API}/node=openflow%3A${switch}/flow-node-inventory:group=1000
105     END
106
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}
110
111 Check Groups In Operational DS After Mininet Reconnects
112     [Documentation]    Check Flows after mininet starts.
113     FlowLib.Check Number Of Groups    ${less_groups}
114
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}
118
119 Restart Controller
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
125     END
126     ClusterManagement.Start_Members_From_List_Or_All    wait_for_sync=False
127
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}
131
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}
135
136 Check Groups In Operational DS After Controller Restarts
137     [Documentation]    Check Flows after mininet starts.
138     FlowLib.Check Number Of Groups    ${less_groups}
139
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}
143
144 Stop Mininet
145     [Documentation]    Stop Mininet.
146     MininetKeywords.Stop Mininet And Exit
147
148 Check No Switches
149     [Documentation]    Check no switches in topology.
150     BuiltIn.Wait Until Keyword Succeeds    5s    1s    FlowLib.Check No Switches In Topology    ${SWITCHES}
151
152
153 *** Keywords ***
154 Initialization Phase
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}
174
175 Final Phase
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
181
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}