Added test suites for cluster HA data recovery leader follower failover
[integration/test.git] / csit / libraries / MininetKeywords.robot
1 *** Settings ***
2 Documentation     Mininet library. This library is useful for tests using mininet tool to simulate devices.
3 Library           SSHLibrary
4 Resource          Utils.robot
5 Resource          OVSDB.robot
6 Variables         ../variables/Variables.py
7
8 *** Keywords ***
9 Start Mininet Single Controller
10     [Arguments]    ${mininet}=${TOOLS_SYSTEM_IP}    ${controller}=${ODL_SYSTEM_IP}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
11     [Documentation]    Start Mininet with custom topology and connect to controller.
12     Log    Clear any existing mininet
13     Utils.Clean Mininet System    ${mininet}
14     ${mininet_conn_id}=    SSHLibrary.Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
15     Set Suite Variable    ${mininet_conn_id}
16     Utils.Flexible Mininet Login
17     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
18     Log    Start mininet ${options} to ${controller}
19     SSHLibrary.Write    sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options}
20     SSHLibrary.Read Until    mininet>
21     ${output}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
22     Log    ${output}
23     [Return]    ${mininet_conn_id}
24
25 Start Mininet Multiple Controllers
26     [Arguments]    ${mininet}    ${controller_index_list}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
27     [Documentation]    Start Mininet with custom topology and connect to all controllers in the ${controller_index_list}.
28     Log    Clear any existing mininet
29     Utils.Clean Mininet System    ${mininet}
30     ${mininet_conn_id}=    SSHLibrary.Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
31     Set Suite Variable    ${mininet_conn_id}
32     Utils.Flexible Mininet Login
33     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
34     Log    Start mininet ${options}
35     SSHLibrary.Write    sudo mn ${options}
36     SSHLibrary.Read Until    mininet>
37     Log    Create controller configuration
38     ${controller_opt}=    Set Variable
39     : FOR    ${index}    IN    @{controller_index_list}
40     \    ${controller_opt}=    Catenate    ${controller_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ofport}
41     \    Log    ${controller_opt}
42     Log    Find Number of OVS bridges
43     ${num_bridges}    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | wc -l
44     ${num_bridges}=    Convert To Integer    ${num_bridges}
45     Log    Configure OVS controllers ${controller_opt} in all bridges
46     : FOR    ${i}    IN RANGE    1    ${num_bridges+1}
47     \    ${bridge}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1
48     \    OVSDB.Set Controller In OVS Bridge    ${mininet}    ${bridge}    ${controller_opt}
49     Log    Check OVS configuratiom
50     ${output}=    Utils.Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
51     Log    ${output}
52     [Return]    ${mininet_conn_id}
53
54 Send Mininet Command
55     [Arguments]    ${mininet_conn_id}    ${cmd}=help
56     [Documentation]    Sends Command ${cmd} to Mininet session ${mininet_conn_id} and returns read buffer response.
57     SSHLibrary.Switch Connection    ${mininet_conn_id}
58     SSHLibrary.Write    ${cmd}
59     ${output}=    SSHLibrary.Read Until    mininet>
60     [Return]    ${output}
61
62 Send Mininet Command Multiple Sessions
63     [Arguments]    ${mininet_conn_list}    ${cmd}=help
64     [Documentation]    Sends Command ${cmd} to Mininet sessions in ${mininet_conn_list} and returns list of read buffer responses.
65     ${output_list}=    Create List
66     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
67     \    ${output}=    Utils.Send Mininet Command    ${mininet_conn_id}    ${cmd}
68     \    Append To List    ${output_list}    ${output}
69     [Return]    ${output_list}
70
71 Stop Mininet And Exit
72     [Arguments]    ${mininet_conn_id}
73     [Documentation]    Stops Mininet and exits session ${mininet_conn_id}
74     SSHLibrary.Switch Connection    ${mininet_conn_id}
75     SSHLibrary.Write    exit
76     SSHLibrary.Read Until    ${TOOLS_SYSTEM_PROMPT}
77     Close Connection
78
79 Stop Mininet And Exit Multiple Sessions
80     [Arguments]    ${mininet_conn_list}
81     [Documentation]    Stops Mininet and exits sessions in ${mininet_conn_list}.
82     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
83     \    MininetKeywords.Stop Mininet And Exit    ${mininet_conn_id}
84
85 Verify Aggregate Flow From Mininet Session
86     [Arguments]    ${mininet_conn_id}    ${switch_count}    ${flow_count}    ${time_out}
87     [Documentation]    Verify flow count per switch
88     Wait Until Keyword Succeeds    ${time_out}    2s    MininetKeywords.Mininet Sync Status    ${mininet_conn_id}    ${switch_count}    ${flow_count}
89
90 Mininet Sync Status
91     [Arguments]    ${mininet_id}    ${switch_count}    ${flow_count}
92     [Documentation]    Sync with mininet to match exact number of flows
93     Set Test Variable    &{dictionary}    flow_count\=${flow_count}=${switch_count}
94     ${cmd} =    Set Variable    dpctl dump-aggregate -O OpenFlow13
95     ${output}=    MininetKeywords.Send Mininet Command    ${mininet_id}    ${cmd}
96     Utils.Check Item Occurrence    ${output}    ${dictionary}