New OpenFlow REST perf test
[integration/test.git] / csit / libraries / MininetKeywords.robot
index f4c155ae3f7239f0867d0664ebe7af53335558c5..9e2ae96330df5539954941ec615cfd0f088c4cde 100644 (file)
@@ -1,6 +1,9 @@
 *** Settings ***
+Documentation     Mininet library. This library is useful for tests using mininet tool to simulate devices.
 Library           SSHLibrary
 Resource          Utils.robot
+Resource          OVSDB.robot
+Resource          ClusterManagement.robot
 Variables         ../variables/Variables.py
 
 *** Keywords ***
@@ -8,53 +11,54 @@ Start Mininet Single Controller
     [Arguments]    ${mininet}=${TOOLS_SYSTEM_IP}    ${controller}=${ODL_SYSTEM_IP}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
     [Documentation]    Start Mininet with custom topology and connect to controller.
     Log    Clear any existing mininet
-    Clean Mininet System    ${mininet}
-    ${mininet_conn_id}=    Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
+    Utils.Clean Mininet System    ${mininet}
+    ${mininet_conn_id}=    SSHLibrary.Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
     Set Suite Variable    ${mininet_conn_id}
-    Flexible Mininet Login
+    Utils.Flexible Mininet Login
     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
     Log    Start mininet ${options} to ${controller}
-    Write    sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options}
-    Read Until    mininet>
-    ${output}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
+    SSHLibrary.Write    sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options}
+    SSHLibrary.Read Until    mininet>
+    ${output}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
     Log    ${output}
     [Return]    ${mininet_conn_id}
 
 Start Mininet Multiple Controllers
-    [Arguments]    ${mininet}    ${controller_index_list}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
-    [Documentation]    Start Mininet with custom topology and connect to all controllers in the ${controller_index_list}.
+    [Arguments]    ${mininet}    ${controller_index_list}=${EMPTY}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=${ODL_OF_PORT}
+    [Documentation]    Start Mininet with custom topology and connect to list of controllers in ${controller_index_list} or all if no list is provided.
+    ${index_list} =    ClusterManagement__Given_Or_Internal_Index_List    given_list=${controller_index_list}
     Log    Clear any existing mininet
-    Clean Mininet System    ${mininet}
-    ${mininet_conn_id}=    Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
+    Utils.Clean Mininet System    ${mininet}
+    ${mininet_conn_id}=    SSHLibrary.Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
     Set Suite Variable    ${mininet_conn_id}
-    Flexible Mininet Login
+    Utils.Flexible Mininet Login
     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
     Log    Start mininet ${options}
-    Write    sudo mn ${options}
-    Read Until    mininet>
+    SSHLibrary.Write    sudo mn ${options}
+    SSHLibrary.Read Until    mininet>
     Log    Create controller configuration
-    ${ovs_opt}=    Set Variable
-    : FOR    ${index}    IN    @{controller_index_list}
-    \    ${ovs_opt}=    Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ofport}
-    \    Log    ${ovs_opt}
+    ${controller_opt}=    Set Variable
+    : FOR    ${index}    IN    @{index_list}
+    \    ${controller_opt}=    Catenate    ${controller_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ofport}
+    \    Log    ${controller_opt}
     Log    Find Number of OVS bridges
-    ${num_bridges}    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | wc -l
+    ${num_bridges}    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | wc -l
     ${num_bridges}=    Convert To Integer    ${num_bridges}
-    Log    Configure OVS controllers ${ovs_opt} in all bridges
+    Log    Configure OVS controllers ${controller_opt} in all bridges
     : FOR    ${i}    IN RANGE    1    ${num_bridges+1}
-    \    ${bridge}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1
-    \    Run Command On Mininet    ${mininet}    sudo ovs-vsctl set-controller ${bridge} ${ovs_opt}
+    \    ${bridge}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1
+    \    OVSDB.Set Controller In OVS Bridge    ${mininet}    ${bridge}    ${controller_opt}
     Log    Check OVS configuratiom
-    ${output}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
+    ${output}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
     Log    ${output}
     [Return]    ${mininet_conn_id}
 
 Send Mininet Command
     [Arguments]    ${mininet_conn_id}    ${cmd}=help
     [Documentation]    Sends Command ${cmd} to Mininet session ${mininet_conn_id} and returns read buffer response.
-    Switch Connection    ${mininet_conn_id}
+    SSHLibrary.Switch Connection    ${mininet_conn_id}
     SSHLibrary.Write    ${cmd}
-    ${output}=    Read Until    mininet>
+    ${output}=    SSHLibrary.Read Until    mininet>
     [Return]    ${output}
 
 Send Mininet Command Multiple Sessions
@@ -62,20 +66,34 @@ Send Mininet Command Multiple Sessions
     [Documentation]    Sends Command ${cmd} to Mininet sessions in ${mininet_conn_list} and returns list of read buffer responses.
     ${output_list}=    Create List
     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
-    \    ${output}=    Send Mininet Command    ${mininet_conn_id}    ${cmd}
+    \    ${output}=    Utils.Send Mininet Command    ${mininet_conn_id}    ${cmd}
     \    Append To List    ${output_list}    ${output}
     [Return]    ${output_list}
 
 Stop Mininet And Exit
     [Arguments]    ${mininet_conn_id}
     [Documentation]    Stops Mininet and exits session ${mininet_conn_id}
-    Switch Connection    ${mininet_conn_id}
+    SSHLibrary.Switch Connection    ${mininet_conn_id}
     SSHLibrary.Write    exit
-    Read Until    ${TOOLS_SYSTEM_PROMPT}
+    SSHLibrary.Read Until    ${TOOLS_SYSTEM_PROMPT}
     Close Connection
 
 Stop Mininet And Exit Multiple Sessions
     [Arguments]    ${mininet_conn_list}
     [Documentation]    Stops Mininet and exits sessions in ${mininet_conn_list}.
     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
-    \    Stop Mininet And Exit    ${mininet_conn_id}
+    \    MininetKeywords.Stop Mininet And Exit    ${mininet_conn_id}
+
+Verify Aggregate Flow From Mininet Session
+    [Arguments]    ${mininet_conn_id}    ${flow_count}    ${time_out}
+    [Documentation]    Verify flow count per switch
+    Wait Until Keyword Succeeds    ${time_out}    2s    MininetKeywords.Mininet Sync Status    ${mininet_conn_id}    ${flow_count}
+
+Mininet Sync Status
+    [Arguments]    ${mininet_id}    ${flow_count}
+    [Documentation]    Sync with mininet to match exact number of flows
+    ${cmd} =    Set Variable    dpctl dump-aggregate -O OpenFlow13
+    ${output}=    MininetKeywords.Send Mininet Command    ${mininet_id}    ${cmd}
+    ${flows}=    String.Get RegExp Matches    ${output}    (?<=flow_count\=).*?(?=\r)
+    ${total_flows}=    BuiltIn.Evaluate    sum(map(int, ${flows}))
+    Should Be Equal As Numbers    ${total_flows}    ${flow_count}