38cc17fff03b13fa252d835ef25ef7c0a1228fa7
[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 Send Mininet Command
54     [Arguments]    ${mininet_conn_id}    ${cmd}=help
55     [Documentation]    Sends Command ${cmd} to Mininet session ${mininet_conn_id} and returns read buffer response.
56     Switch Connection    ${mininet_conn_id}
57     SSHLibrary.Write    ${cmd}
58     ${output}=    Read Until    mininet>
59     [Return]    ${output}
60
61 Send Mininet Command Multiple Sessions
62     [Arguments]    ${mininet_conn_list}    ${cmd}=help
63     [Documentation]    Sends Command ${cmd} to Mininet sessions in ${mininet_conn_list} and returns list of read buffer responses.
64     ${output_list}=    Create List
65     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
66     \    ${output}=    Send Mininet Command    ${mininet_conn_id}    ${cmd}
67     \    Append To List    ${output_list}    ${output}
68     [Return]    ${output_list}
69
70 Stop Mininet And Exit
71     [Arguments]    ${mininet_conn_id}
72     [Documentation]    Stops Mininet and exits session ${mininet_conn_id}
73     Switch Connection    ${mininet_conn_id}
74     SSHLibrary.Write    exit
75     Read Until    ${TOOLS_SYSTEM_PROMPT}
76     Close Connection
77
78 Stop Mininet And Exit Multiple Sessions
79     [Arguments]    ${mininet_conn_list}
80     [Documentation]    Stops Mininet and exits sessions in ${mininet_conn_list}.
81     : FOR    ${mininet_conn_id}    IN    @{mininet_conn_list}
82     \    Stop Mininet And Exit    ${mininet_conn_id}