ef3e44098545b654c389f293094e7c542cddec70
[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 Variables         ../variables/Variables.py
6
7 *** Keywords ***
8 Start Mininet Single Controller
9     [Arguments]    ${mininet}=${TOOLS_SYSTEM_IP}    ${controller}=${ODL_SYSTEM_IP}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
10     [Documentation]    Start Mininet with custom topology and connect to controller.
11     Log    Clear any existing mininet
12     Clean Mininet System    ${mininet}
13     ${mininet_conn_id}=    Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
14     Set Suite Variable    ${mininet_conn_id}
15     Flexible Mininet Login
16     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
17     Log    Start mininet ${options} to ${controller}
18     Write    sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options}
19     Read Until    mininet>
20     ${output}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
21     Log    ${output}
22     [Return]    ${mininet_conn_id}
23
24 Start Mininet Multiple Controllers
25     [Arguments]    ${mininet}    ${controller_index_list}    ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13    ${custom}=${EMPTY}    ${ofport}=6633
26     [Documentation]    Start Mininet with custom topology and connect to all controllers in the ${controller_index_list}.
27     Log    Clear any existing mininet
28     Clean Mininet System    ${mininet}
29     ${mininet_conn_id}=    Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
30     Set Suite Variable    ${mininet_conn_id}
31     Flexible Mininet Login
32     Run Keyword If    '${custom}' != '${EMPTY}'    Put File    ${custom}
33     Log    Start mininet ${options}
34     Write    sudo mn ${options}
35     Read Until    mininet>
36     Log    Create controller configuration
37     ${ovs_opt}=    Set Variable
38     : FOR    ${index}    IN    @{controller_index_list}
39     \    ${ovs_opt}=    Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ofport}
40     \    Log    ${ovs_opt}
41     Log    Find Number of OVS bridges
42     ${num_bridges}    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | wc -l
43     ${num_bridges}=    Convert To Integer    ${num_bridges}
44     Log    Configure OVS controllers ${ovs_opt} in all bridges
45     : FOR    ${i}    IN RANGE    1    ${num_bridges+1}
46     \    ${bridge}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1
47     \    Run Command On Mininet    ${mininet}    sudo ovs-vsctl set-controller ${bridge} ${ovs_opt}
48     Log    Check OVS configuratiom
49     ${output}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
50     Log    ${output}
51     [Return]    ${mininet_conn_id}
52
53 Add Multiple Managers to OVS
54     [Arguments]    ${mininet}    ${controller_index_list}    ${ovs_mgr_port}=6640
55     [Documentation]    Start Mininet with custom topology and connect to all controllers in the ${controller_index_list}.
56     Log    Clear any existing mininet
57     Clean Mininet System    ${mininet}
58     ${mininet_conn_id}=    Open Connection    ${mininet}    prompt=${TOOLS_SYSTEM_PROMPT}    timeout=${DEFAULT_TIMEOUT}
59     Set Suite Variable    ${mininet_conn_id}
60     Flexible Mininet Login
61     ${ovs_opt}=    Set Variable
62     : FOR    ${index}    IN    @{controller_index_list}
63     \    ${ovs_opt}=    Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}
64     \    Log    ${ovs_opt}
65     Log    Configure OVS Managers in the OVS
66     Run Command On Mininet    ${mininet}    sudo ovs-vsctl set-manager ${ovs_opt}
67     Log    Check OVS configuratiom
68     ${output}=    Run Command On Mininet    ${mininet}    sudo ovs-vsctl show
69     Log    ${output}
70     [Return]    ${mininet_conn_id}
71
72 Send Mininet Command
73     [Arguments]    ${mininet_conn_id}    ${cmd}=help
74     [Documentation]    Sends Command ${cmd} to Mininet session ${mininet_conn_id} and returns read buffer response.
75     Switch Connection    ${mininet_conn_id}
76     SSHLibrary.Write    ${cmd}
77     ${output}=    Read Until    mininet>
78     [Return]    ${output}
79
80 Send Mininet Command Multiple Sessions
81     [Arguments]    ${mininet_conn_list}    ${cmd}=help
82     [Documentation]    Sends Command ${cmd} to Mininet sessions in ${mininet_conn_list} and returns list of read buffer responses.
83     ${output_list}=    Create List
84     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
85     \    ${output}=    Send Mininet Command    ${mininet_conn_id}    ${cmd}
86     \    Append To List    ${output_list}    ${output}
87     [Return]    ${output_list}
88
89 Stop Mininet And Exit
90     [Arguments]    ${mininet_conn_id}
91     [Documentation]    Stops Mininet and exits session ${mininet_conn_id}
92     Switch Connection    ${mininet_conn_id}
93     SSHLibrary.Write    exit
94     Read Until    ${TOOLS_SYSTEM_PROMPT}
95     Close Connection
96
97 Stop Mininet And Exit Multiple Sessions
98     [Arguments]    ${mininet_conn_list}
99     [Documentation]    Stops Mininet and exits sessions in ${mininet_conn_list}.
100     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
101     \    Stop Mininet And Exit    ${mininet_conn_id}