Upgrade RF syntax for v3.2 compatibility
[integration/test.git] / csit / suites / bgpcep / bgpfunct / 020_bgp_functional_multipath.robot
1 *** Settings ***
2 Documentation     Functional test suite for bgp - n-path and all-path selection
3 ...
4 ...               Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
5 ...
6 ...               This program and the accompanying materials are made available under the
7 ...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ...               and is available at http://www.eclipse.org/legal/epl-v10.html
9 ...
10 ...               This suite tests n-path and all-path selection policy.
11 ...               It uses odl and exabgp as bgp peers. Routes advertized from odl
12 ...               are configured via application peer.
13 Suite Setup       Start_Suite
14 Suite Teardown    Stop_Suite
15 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
16 Library           RequestsLibrary
17 Library           SSHLibrary
18 Resource          ${CURDIR}/../../../variables/Variables.robot
19 Resource          ${CURDIR}/../../../libraries/ExaBgpLib.robot
20 Resource          ${CURDIR}/../../../libraries/Utils.robot
21 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
22 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
23 Library           ${CURDIR}/../../../libraries/BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
24 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
25 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
26 Resource          ${CURDIR}/../../../libraries/CompareStream.robot
27
28 *** Variables ***
29 ${HOLDTIME}       180
30 ${DEVICE_NAME}    controller-config
31 ${BGP_PEER_NAME}    example-bgp-peer
32 ${RIB_INSTANCE}    example-bgp-rib
33 ${PROTOCOL_OPENCONFIG}    ${RIB_INSTANCE}
34 ${APP_PEER_NAME}    example-bgp-peer-app
35 ${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional
36 ${MULT_VAR_FOLDER}    ${BGP_VAR_FOLDER}/multipaths
37 ${DEFAUTL_RPC_CFG}    exa.cfg
38 ${CONFIG_SESSION}    config-session
39 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
40 ${N_PATHS_VALUE}    2
41 &{DEFAULT_MAPPING}    ODLIP=${ODL_SYSTEM_IP}    EXAIP=${TOOLS_SYSTEM_IP}    NPATHS=${N_PATHS_VALUE}
42 @{PATH_ID_LIST}    1    2    3
43 ${NEXT_HOP_PREF}    100.100.100.
44 ${RIB_URI}        /restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:rib-impl/example-bgp-rib
45 ${OPENCONFIG_RIB_URI}    /restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/example-bgp-rib
46 ${NPATHS_SELM}    n-paths
47 ${ALLPATHS_SELM}    all-paths
48 ${ADDPATHCAP_SR}    send\\/receive
49 ${ADDPATHCAP_S}    send
50 ${ADDPATHCAP_R}    receive
51 ${ADDPATHCAP_D}    disable
52
53 *** Test Cases ***
54 Reconfigure_ODL_To_Accept_Connection
55     [Documentation]    Configures BGP peer module with initiate-connection set to false.
56     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
57     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}    PASSIVE_MODE=true
58
59 Odl Allpaths Exa SendReceived
60     [Documentation]    all-paths selected policy selected
61     [Tags]    critical
62     [Setup]    Configure_Path_Selection_And_App_Peer_And_Connect_Peer    ${ALLPATHS_SELM}    ${ADDPATHCAP_SR}
63     Log_Loc_Rib_Operational
64     Comment    From neon onwards there is extra BGP End-Of-RIB message
65     ${update_messages}    CompareStream.Set_Variable_If_At_Most_Fluorine    3    4
66     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${update_messages}
67     [Teardown]    Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
68
69 Odl Npaths Exa SendReceived
70     [Documentation]    n-paths policy selected on odl
71     [Tags]    critical
72     [Setup]    Configure_Path_Selection_And_App_Peer_And_Connect_Peer    ${NPATHS_SELM}    ${ADDPATHCAP_SR}
73     Log_Loc_Rib_Operational
74     Comment    From neon onwards there is extra BGP End-Of-RIB message
75     ${update_messages}    CompareStream.Set_Variable_If_At_Most_Fluorine    2    3
76     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${update_messages}
77     [Teardown]    Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
78
79 Delete_Bgp_Peer_Configuration
80     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
81     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
82
83 *** Keywords ***
84 Start_Suite
85     [Documentation]    Suite setup keyword.
86     SetupUtils.Setup_Utils_For_Setup_And_Teardown
87     ${tools_system_conn_id}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
88     Builtin.Set_Suite_Variable    ${tools_system_conn_id}
89     SSHKeywords.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
90     SSHKeywords.Virtual_Env_Create
91     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
92     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
93     Upload_Config_Files
94     Store_Rib_Configuration
95
96 Stop_Suite
97     [Documentation]    Suite teardown keyword with old rib restoration
98     SSHKeywords.Virtual_Env_Delete
99     TemplatedRequests.Put_As_Xml_To_Uri    ${OPENCONFIG_RIB_URI}    ${rib_old}    session=${CONFIG_SESSION}
100     SSHLibrary.Close_All_Connections
101     RequestsLibrary.Delete_All_Sessions
102
103 Upload_Config_Files
104     [Arguments]    ${addpath}=disable
105     [Documentation]    Uploads exabgp config files
106     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG}    .
107     SSHLibrary.Put_File    ${EXARPCSCRIPT}    .
108     @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
109     FOR    ${cfgfile}    IN    @{cfgfiles}
110         SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
111         SSHLibrary.Execute_Command    sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
112         SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
113         SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile}
114         ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
115         Log    ${stdout}
116     END
117
118 Configure_Path_Selection_And_App_Peer_And_Connect_Peer
119     [Arguments]    ${odl_path_sel_mode}    ${exa_add_path_value}
120     [Documentation]    Setup test case keyword. Early after the path selection config the incomming connection
121     ...    from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that
122     ...    we try to start the tool 3 times in case early attempts fail.
123     SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
124     Configure_Odl_Peer_With_Path_Selection_Mode    ${odl_path_sel_mode}
125     Configure_App_Peer_With_Routes
126     Upload_Config_Files    addpath=${exa_add_path_value}
127     ExaBgpLib.Start_ExaBgp_And_Verify_Connected    ${DEFAUTL_RPC_CFG}    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}    connection_retries=${3}
128
129 Remove_Odl_And_App_Peer_Configuration_And_Stop_ExaBgp
130     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
131     TemplatedRequests.Delete_Templated    ${MULT_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
132     Deconfigure_App_Peer
133     ExaBgpLib.Stop_ExaBgp
134     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
135
136 Verify_Expected_Update_Count
137     [Arguments]    ${exp_count}
138     [Documentation]    Verify number of received update messages
139     ${tool_count}=    BgpRpcClient.exa_get_received_update_count
140     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_count}    ${tool_count}
141
142 Configure_Path_Selection_Mode
143     [Arguments]    ${psm}
144     [Documentation]    Configure path selection mode and get rib information for potential debug purposes
145     &{mapping}    BuiltIn.Create_Dictionary    PATHSELMODE=${psm}
146     TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
147     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_psm    mapping=${mapping}    session=${CONFIG_SESSION}
148
149 Configure_Odl_Peer_With_Path_Selection_Mode
150     [Arguments]    ${psm}
151     [Documentation]    Configures odl peer with path selection mode
152     ${npaths}=    BuiltIn.Set_Variable_If    "${psm}"=="${ALLPATHS_SELM}"    0    ${N_PATHS_VALUE}
153     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}    PASSIVE_MODE=true    MULTIPATH=${npaths}
154     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
155     CompareStream.Run_Keyword_If_Less_Than_Fluorine    TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
156     CompareStream.Run_Keyword_If_At_Least_Fluorine    TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib_policies    mapping=${mapping}    session=${CONFIG_SESSION}
157     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
158
159 Configure_Odl_With_Multipaths
160     [Documentation]    Configures odl to support n-paths or all-paths selection
161     ${mapping}=    BuiltIn.Set Variable    ${DEFAULT_MAPPING}
162     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_n_paths    mapping=${mapping}    session=${CONFIG_SESSION}
163     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_all_paths    mapping=${mapping}    session=${CONFIG_SESSION}
164     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_psmf    mapping=${mapping}    session=${CONFIG_SESSION}
165     Configure_Path_Selection_Mode    n-paths
166     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_bpsm    mapping=${mapping}    session=${CONFIG_SESSION}
167     Store_Rib_Configuration
168     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
169
170 Store_Rib_Configuration
171     [Documentation]    Stores rib configuration
172     ${rib_old}=    TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${DEFAULT_MAPPING}    session=${CONFIG_SESSION}
173     BuiltIn.Set_Suite_Variable    ${rib_old}
174
175 Log_Loc_Rib_Operational
176     ${rsp}=    RequestsLibrary.Get Request    ${CONFIG_SESSION}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/
177     BuiltIn.Log    ${rsp.content}
178
179 Configure_App_Peer_With_Routes
180     [Documentation]    Configure bgp application peer and fill it immediately with routes.
181     ${app_rib}    Set Variable    ${ODL_SYSTEM_IP}
182     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}    RIB_INSTANCE_NAME=${RIB_INSTANCE}    APP_PEER_ID=${ODL_SYSTEM_IP}    IP=${ODL_SYSTEM_IP}
183     ...    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
184     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
185     FOR    ${pathid}    IN    @{PATH_ID_LIST}
186         &{route_mapping}    BuiltIn.Create_Dictionary    NEXTHOP=${NEXT_HOP_PREF}${pathid}    LOCALPREF=${pathid}00    PATHID=${pathid}    APP_RIB=${app_rib}
187         TemplatedRequests.Post_As_Xml_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
188     END
189
190 Deconfigure_App_Peer
191     [Documentation]    Revert the BGP configuration to the original state: without application peer
192     ${app_rib}    Set Variable    ${ODL_SYSTEM_IP}
193     &{route_mapping}    BuiltIn.Create_Dictionary    APP_RIB=${app_rib}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
194     TemplatedRequests.Delete_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
195     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}    IP=${ODL_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
196     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}