From fc7bd2510ed53d2e12435dcd3ddaccc11ad40e66 Mon Sep 17 00:00:00 2001 From: Len Giersch Date: Wed, 29 Mar 2017 11:54:33 -0700 Subject: [PATCH] Add Clustered Reconciliation tests openflowplugin Change-Id: Ia7a0677543ee1f76b7a101ebeb743630433c767c Signed-off-by: Len Giersch --- .../010_Group_Flows.robot | 171 ++++++++++++++++++ csit/testplans/openflowplugin-clustering.txt | 13 +- 2 files changed, 178 insertions(+), 6 deletions(-) create mode 100644 csit/suites/openflowplugin/Clustered_Reconciliation/010_Group_Flows.robot diff --git a/csit/suites/openflowplugin/Clustered_Reconciliation/010_Group_Flows.robot b/csit/suites/openflowplugin/Clustered_Reconciliation/010_Group_Flows.robot new file mode 100644 index 0000000000..95f4d8b058 --- /dev/null +++ b/csit/suites/openflowplugin/Clustered_Reconciliation/010_Group_Flows.robot @@ -0,0 +1,171 @@ +*** Settings *** +Documentation Switch connections and cluster are restarted. +Suite Setup Initialization Phase +Suite Teardown Final Phase +Library RequestsLibrary +Resource ../../../libraries/ClusterManagement.robot +Resource ../../../libraries/ClusterOpenFlow.robot +Resource ../../../libraries/TemplatedRequests.robot +Resource ../../../libraries/MininetKeywords.robot +Resource ../../../libraries/FlowLib.robot +Resource ../../../libraries/Utils.robot +Resource ../../../variables/Variables.robot + +*** Variables *** +${SWITCHES} 3 +${ITER} 100 +${VAR_DIR} ${CURDIR}/../../../variables/openflowplugin + +*** Test Cases *** +Enable Stale Flow Entry + [Documentation] Enable stale flow entry feature. + # Stale flows/groups feature is only available in Boron onwards. + CompareStream.Run Keyword If At Least Boron TemplatedRequests.Put As Json Templated folder=${VAR_DIR}/frm-config mapping={"STALE":"true"} session=session + +Add Group 1 In Every Switch + [Documentation] Add ${ITER} groups of type 1 in every switch. + : FOR ${switch} IN RANGE 1 ${switches+1} + \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-1 mapping={"SWITCH":"${switch}"} session=session iterations=${iter} + +Add Group 2 In Every Switch + [Documentation] Add ${ITER} groups of type 2 in every switch. + : FOR ${switch} IN RANGE 1 ${switches+1} + \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-group-2 mapping={"SWITCH":"${switch}"} session=session iterations=${iter} + +Add Flow to Group 2 In Every Switch + [Documentation] Add ${ITER} flows to group type 2 in every switch. + : FOR ${switch} IN RANGE 1 ${switches+1} + \ TemplatedRequests.Post As Json Templated folder=${VAR_DIR}/add-flow mapping={"SWITCH":"${switch}"} session=session iterations=${ITER} + +Start Mininet Multiple Connections + [Documentation] Start mininet linear with connection to all cluster instances. + ${mininet_conn_id}= MininetKeywords.Start Mininet Multiple Controllers ${TOOLS_SYSTEM_IP} ${ClusterManagement__member_index_list} --topo linear,${SWITCHES} --switch ovsk,protocols=OpenFlow13 + BuiltIn.Set Suite Variable ${mininet_conn_id} + BuiltIn.Wait Until Keyword Succeeds 10s 1s OVSDB.Check OVS OpenFlow Connections ${TOOLS_SYSTEM_IP} ${SWITCHES*3} + +Check Linear Topology + [Documentation] Check Linear Topology. + BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES} + +Check Flows In Operational DS + [Documentation] Check Groups after mininet starts. + BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${all_flows} + +Check Groups In Operational DS + [Documentation] Check Flows after mininet starts. + FlowLib.Check Number Of Groups ${all_groups} + +Check Flows In Switch + [Documentation] Check Flows after mininet starts. + MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${all_flows} + +Disconnect Mininet From Cluster + [Documentation] Disconnect Mininet from Cluster. + Disconnect Cluster Mininet + +Check No Switches After Disconnect + [Documentation] Check no switches in topology. + BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check No Switches In Topology ${SWITCHES} + +Remove Flows And Groups While Mininet Is Disconnected + [Documentation] Remove some groups and flows while network is down. + : FOR ${switch} IN RANGE 1 ${switches+1} + \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/table/0/flow/1 + \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1 + \ RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${switch}/group/1000 + +Reconnect Mininet To Cluster + [Documentation] Reconnect mininet to cluster by removing Iptables drop rules that were used to disconnect + Disconnect Cluster Mininet restore + +Check Linear Topology After Mininet Reconnects + [Documentation] Check Linear Topology. + BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Linear Topology ${SWITCHES} + +Check Flows In Operational DS After Mininet Reconnects + [Documentation] Check Flows after mininet starts. + BuiltIn.Wait Until Keyword Succeeds 30s 1s FlowLib.Check Number Of Flows ${less_flows} + +Check Groups In Operational DS After Mininet Reconnects + [Documentation] Check Flows after mininet starts. + FlowLib.Check Number Of Groups ${less_groups} + +Check Flows In Switch After Mininet Reconnects + [Documentation] Check Flows after mininet starts. + MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows} + +Restart Cluster + [Documentation] Stop and Start cluster. + # Try to stop contoller, if stop does not work or takes too long, kill controller. + ${status} ${result}= BuiltIn.Run Keyword And Ignore Error ClusterManagement.Stop_Members_From_List_Or_All + BuiltIn.Run Keyword If '${status}' != 'PASS' ClusterManagement.Kill_Members_From_List_Or_All + ClusterManagement.Start_Members_From_List_Or_All wait_for_sync=False + +Check Linear Topology After Controller Restarts + [Documentation] Check Linear Topology. + BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Linear Topology ${SWITCHES} + +Check Flows In Operational DS After Controller Restarts + [Documentation] Check Flows after mininet starts. + BuiltIn.Wait Until Keyword Succeeds 300s 2s FlowLib.Check Number Of Flows ${less_flows} + +Check Groups In Operational DS After Controller Restarts + [Documentation] Check Flows after mininet starts. + FlowLib.Check Number Of Groups ${less_groups} + +Check Flows In Switch After Controller Restarts + [Documentation] Check Flows after mininet starts. + MininetKeywords.Check Flows In Mininet ${mininet_conn_id} ${less_flows} + +Stop Mininet + [Documentation] Stop Mininet. + MininetKeywords.Stop Mininet And Exit + +Check No Switches + [Documentation] Check no switches in topology. + BuiltIn.Wait Until Keyword Succeeds 5s 1s FlowLib.Check No Switches In Topology ${SWITCHES} + +*** Keywords *** +Initialization Phase + [Documentation] Create controller session and set variables. + ClusterManagement.ClusterManagement_Setup + # Still need to open controller HTTP session with name session because of old FlowLib.robot library dependency. + RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} + ${switches} Convert To Integer ${SWITCHES} + ${iter} Convert To Integer ${ITER} + ${all_groups}= BuiltIn.Evaluate ${switches} * ${iter} * 2 + ${less_groups}= BuiltIn.Evaluate ${all_groups} - ${switches} * 2 + # Stale flows/groups feature enabled in Boron onwards. + ${less_groups}= CompareStream.Set Variable If At Least Boron ${less_groups} ${all_groups} + ${all_flows}= BuiltIn.Evaluate ${switches} * ${iter+1} + ${less_flows}= BuiltIn.Evaluate ${all_flows} - ${switches} + # Stale flows/groups feature enabled in Boron onwards. + ${less_flows}= CompareStream.Set Variable If At Least Boron ${less_flows} ${all_flows} + BuiltIn.Set Suite Variable ${switches} + BuiltIn.Set Suite Variable ${iter} + BuiltIn.Set Suite Variable ${all_groups} + BuiltIn.Set Suite Variable ${less_groups} + BuiltIn.Set Suite Variable ${all_flows} + BuiltIn.Set Suite Variable ${less_flows} + BuiltIn.Set Suite Variable ${no_flows} ${SWITCHES} + +Final Phase + [Documentation] Delete all sessions. + ${command} = BuiltIn.Set Variable sudo iptables -v -F + Utils.Run Command On Controller cmd=${command} + CompareStream.Run Keyword If At Least Boron TemplatedRequests.Put As Json Templated folder=${VAR_DIR}/frm-config mapping={"STALE":"false"} session=session + BuiltIn.Run Keyword And Ignore Error RequestsLibrary.Delete Request session ${CONFIG_NODES_API} + RequestsLibrary.Delete All Sessions + +Disconnect Cluster Mininet + [Arguments] ${action}=break ${member_index_list}=${EMPTY} + [Documentation] Break and restore controller to mininet connection via iptables. + ${index_list} = ClusterManagement.List_Indices_Or_All given_list=${member_index_list} + : FOR ${index} IN @{index_list} + \ ${rule} = BuiltIn.Set Variable OUTPUT -p all --source ${ODL_SYSTEM_${index}_IP} --destination ${TOOLS_SYSTEM_IP} -j DROP + \ ${command} = BuiltIn.Set Variable If '${action}'=='restore' sudo /sbin/iptables -D ${rule} sudo /sbin/iptables -I ${rule} + \ Log To Console ${ODL_SYSTEM_${index}_IP} + \ Utils.Run Command On Controller ${ODL_SYSTEM_${index}_IP} cmd=${command} + \ ${command} = BuiltIn.Set Variable sudo /sbin/iptables -L -n + \ ${output} = Utils.Run Command On Controller cmd=${command} + \ BuiltIn.Log ${output} diff --git a/csit/testplans/openflowplugin-clustering.txt b/csit/testplans/openflowplugin-clustering.txt index 528d8b5440..28a8707d9e 100644 --- a/csit/testplans/openflowplugin-clustering.txt +++ b/csit/testplans/openflowplugin-clustering.txt @@ -1,7 +1,8 @@ # Place the suites in run order: -integration/test/csit/suites/openflowplugin/Clustering/010__Cluster_HA_Owner_Failover.robot -integration/test/csit/suites/openflowplugin/Clustering/020__Cluster_HA_Owner_Restart.robot -integration/test/csit/suites/openflowplugin/Clustering/030__Cluster_HA_Data_Recovery_Leader_Follower_Failover.robot -integration/test/csit/suites/openflowplugin/EntityOwnership/010_Switch_Disconnect.robot -integration/test/csit/suites/openflowplugin/EntityOwnership/020_Cluster_Node_Failure.robot -integration/test/csit/suites/openflowplugin/EntityOwnership/030_Cluster_Sync_Problems.robot +#integration/test/csit/suites/openflowplugin/Clustering/010__Cluster_HA_Owner_Failover.robot +#integration/test/csit/suites/openflowplugin/Clustering/020__Cluster_HA_Owner_Restart.robot +#integration/test/csit/suites/openflowplugin/Clustering/030__Cluster_HA_Data_Recovery_Leader_Follower_Failover.robot +#integration/test/csit/suites/openflowplugin/EntityOwnership/010_Switch_Disconnect.robot +#integration/test/csit/suites/openflowplugin/EntityOwnership/020_Cluster_Node_Failure.robot +#integration/test/csit/suites/openflowplugin/EntityOwnership/030_Cluster_Sync_Problems.robot +integration/test/csit/suites/openflowplugin/Clustered_Reconciliation/010_Group_Flows.robot -- 2.36.6