creating ExaBgpLib and refactoring bgp functional suites to use it
[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 Variables         ${CURDIR}/../../../variables/Variables.py
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
27 *** Variables ***
28 ${HOLDTIME}       180
29 ${DEVICE_NAME}    controller-config
30 ${BGP_PEER_NAME}    example-bgp-peer
31 ${RIB_INSTANCE}    example-bgp-rib
32 ${APP_PEER_NAME}    example-bgp-peer-app
33 ${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional
34 ${MULT_VAR_FOLDER}    ${BGP_VAR_FOLDER}/multipaths
35 ${DEFAUTL_RPC_CFG}    exa.cfg
36 ${CONFIG_SESSION}    config-session
37 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
38 ${N_PATHS_VALUE}    2
39 &{DEFAULT_MAPPING}    ODLIP=${ODL_SYSTEM_IP}    EXAIP=${TOOLS_SYSTEM_IP}    NPATHS=${N_PATHS_VALUE}
40 @{PATH_ID_LIST}    1    2    3
41 ${PATH_ID_LIST_LEN}    3
42 ${NEXT_HOP_PREF}    100.100.100.
43 ${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
44 ${NPATHS_SELM}    n-paths
45 ${ALLPATHS_SELM}    all-paths
46 ${ADDPATHCAP_SR}    send\\/receive
47 ${ADDPATHCAP_S}    send
48 ${ADDPATHCAP_R}    receive
49 ${ADDPATHCAP_D}    disable
50
51 *** Test Cases ***
52 Reconfigure_ODL_To_Accept_Connection
53     [Documentation]    Configure BGP peer module with initiate-connection set to false.
54     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
55     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}
56     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
57
58 Odl Allpaths Exa SendReceived
59     [Documentation]    all-paths selected policy selected
60     [Tags]    critical
61     [Setup]    Configure_Path_Selection_And_App_Peer_And_Connect_Peer    ${ALLPATHS_SELM}    ${ADDPATHCAP_SR}
62     Log_Loc_Rib_Operational
63     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${PATH_ID_LIST_LEN}
64     [Teardown]    Remove_App_Peer_Configuration_And_Stop_ExaBgp
65
66 Odl Npaths Exa SendReceived
67     [Documentation]    n-paths policy selected on odl
68     [Tags]    critical
69     [Setup]    Configure_Path_Selection_And_App_Peer_And_Connect_Peer    ${NPATHS_SELM}    ${ADDPATHCAP_SR}
70     Log_Loc_Rib_Operational
71     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${N_PATHS_VALUE}
72     [Teardown]    Remove_App_Peer_Configuration_And_Stop_ExaBgp
73
74 Delete_Bgp_Peer_Configuration
75     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
76     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}
77     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
78
79 *** Keywords ***
80 Start_Suite
81     [Documentation]    Suite setup keyword.
82     SetupUtils.Setup_Utils_For_Setup_And_Teardown
83     ${tools_system_conn_id}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
84     Builtin.Set_Suite_Variable    ${tools_system_conn_id}
85     Utils.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
86     SSHKeywords.Virtual_Env_Create
87     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
88     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
89     Upload_Config_Files
90     Configure_Odl_With_Multipaths
91
92 Stop_Suite
93     [Documentation]    Suite teardown keyword with ord rib restoration
94     SSHKeywords.Virtual_Env_Delete
95     TemplatedRequests.Put_As_Xml_To_Uri    ${RIB_URI}    ${rib_old}    session=${CONFIG_SESSION}
96     SSHLibrary.Close_All_Connections
97     RequestsLibrary.Delete_All_Sessions
98
99 Upload_Config_Files
100     [Arguments]    ${addpath}=disable
101     [Documentation]    Uploads exabgp config files
102     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG}    .
103     SSHLibrary.Put_File    ${EXARPCSCRIPT}    .
104     @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
105     : FOR    ${cfgfile}    IN    @{cfgfiles}
106     \    SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
107     \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
108     \    SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
109     \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile}
110     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
111     \    Log    ${stdout}
112
113 Configure_Path_Selection_And_App_Peer_And_Connect_Peer
114     [Arguments]    ${odl_path_sel_mode}    ${exa_add_path_value}
115     [Documentation]    Setup test case keyword. Early after the path selection config the incomming connection
116     ...    from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that
117     ...    we try to start the tool 3 times in case early attempts fail.
118     Configure_Path_Selection_Mode    ${odl_path_sel_mode}
119     Configure_App_Peer_With_Routes
120     Upload_Config_Files    addpath=${exa_add_path_value}
121     ExaBgpLib.Start_ExaBgp_And_Verify_Connected    ${DEFAUTL_RPC_CFG}    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}    connection_retries=${3}
122
123 Remove_App_Peer_Configuration_And_Stop_ExaBgp
124     Deconfigure_App_Peer
125     ExaBgpLib.Stop_ExaBgp
126     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
127
128 Verify_Expected_Update_Count
129     [Arguments]    ${exp_count}
130     [Documentation]    Verify number of received update messages
131     ${tool_count}=    BgpRpcClient.exa_get_received_update_count
132     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_count}    ${tool_count}
133
134 Configure_Path_Selection_Mode
135     [Arguments]    ${psm}
136     [Documentation]    Configure path selection mode and get rib information for potential debug purposes
137     &{mapping}    BuiltIn.Create_Dictionary    PATHSELMODE=${psm}
138     TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
139     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_psm    mapping=${mapping}    session=${CONFIG_SESSION}
140
141 Configure_Odl_With_Multipaths
142     [Documentation]    Configures odl to support n-paths or all-paths selection
143     ${mapping}=    BuiltIn.Set Variable    ${DEFAULT_MAPPING}
144     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_n_paths    mapping=${mapping}    session=${CONFIG_SESSION}
145     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_all_paths    mapping=${mapping}    session=${CONFIG_SESSION}
146     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_psmf    mapping=${mapping}    session=${CONFIG_SESSION}
147     Configure_Path_Selection_Mode    n-paths
148     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_bpsm    mapping=${mapping}    session=${CONFIG_SESSION}
149     ${rib_old}=    TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
150     BuiltIn.Set_Suite_Variable    ${rib_old}
151     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
152
153 Log_Loc_Rib_Operational
154     ${rsp}=    RequestsLibrary.Get Request    ${CONFIG_SESSION}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/
155     BuiltIn.Log    ${rsp.content}
156
157 Configure_App_Peer_With_Routes
158     [Documentation]    Configure bgp application peer and fill it immediately with routes.
159     &{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}
160     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
161     : FOR    ${pathid}    IN    @{PATH_ID_LIST}
162     \    &{route_mapping}    BuiltIn.Create_Dictionary    NEXTHOP=${NEXT_HOP_PREF}${pathid}    LOCALPREF=${pathid}00    PATHID=${pathid}
163     \    TemplatedRequests.Post_As_Xml_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
164
165 Deconfigure_App_Peer
166     [Documentation]    Revert the BGP configuration to the original state: without application peer
167     &{route_mapping}    BuiltIn.Create_Dictionary
168     TemplatedRequests.Delete_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
169     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}
170     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}