KarafKeywords-logging in karaf console extended to cluster
[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/Utils.robot
20 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
21 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
22 Library           ${CURDIR}/../../../libraries/BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
23 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
24 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
25
26 *** Variables ***
27 ${HOLDTIME}       180
28 ${DEVICE_NAME}    controller-config
29 ${BGP_PEER_NAME}    example-bgp-peer
30 ${RIB_INSTANCE}    example-bgp-rib
31 ${APP_PEER_NAME}    example-bgp-peer-app
32 ${CMD}            env exabgp.tcp.port=1790 exabgp --debug
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 ${PEER_CHECK_URL}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
45 ${NPATHS_SELM}    n-paths
46 ${ALLPATHS_SELM}    all-paths
47 ${ADDPATHCAP_SR}    send\\/receive
48 ${ADDPATHCAP_S}    send
49 ${ADDPATHCAP_R}    receive
50 ${ADDPATHCAP_D}    disable
51
52 *** Test Cases ***
53 Reconfigure_ODL_To_Accept_Connection
54     [Documentation]    Configure BGP peer module with initiate-connection set to false.
55     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
56     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}
57     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
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     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${PATH_ID_LIST_LEN}
65     [Teardown]    Remove_App_Peer_Configuration_And_Stop_Tool
66
67 Odl Npaths Exa SendReceived
68     [Documentation]    n-paths policy selected on odl
69     [Tags]    critical
70     [Setup]    Configure_Path_Selection_And_App_Peer_And_Connect_Peer    ${NPATHS_SELM}    ${ADDPATHCAP_SR}
71     Log_Loc_Rib_Operational
72     BuiltIn.Wait_Until_Keyword_Succeeds    6x    2s    Verify_Expected_Update_Count    ${N_PATHS_VALUE}
73     [Teardown]    Remove_App_Peer_Configuration_And_Stop_Tool
74
75 Delete_Bgp_Peer_Configuration
76     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
77     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}
78     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
79
80 *** Keywords ***
81 Start_Suite
82     [Documentation]    Suite setup keyword.
83     SetupUtils.Setup_Utils_For_Setup_And_Teardown
84     ${mininet_conn_id}=    SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
85     Builtin.Set Suite Variable    ${mininet_conn_id}
86     Utils.Flexible Mininet Login    ${TOOLS_SYSTEM_USER}
87     SSHKeywords.Virtual_Env_Create
88     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
89     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
90     Upload_Config_Files
91     Configure_Odl_With_Multipaths
92
93 Stop_Suite
94     [Documentation]    Suite teardown keyword with ord rib restoration
95     SSHKeywords.Virtual_Env_Delete
96     TemplatedRequests.Put_As_Xml_To_Uri    ${RIB_URI}    ${rib_old}    session=${CONFIG_SESSION}
97     SSHLibrary.Close_All_Connections
98     RequestsLibrary.Delete_All_Sessions
99
100 Upload_Config_Files
101     [Arguments]    ${addpath}=disable
102     [Documentation]    Uploads exabgp config files
103     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG}    .
104     SSHLibrary.Put_File    ${EXARPCSCRIPT}    .
105     @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
106     : FOR    ${cfgfile}    IN    @{cfgfiles}
107     \    SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
108     \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
109     \    SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
110     \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile}
111     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
112     \    Log    ${stdout}
113
114 Configure_Path_Selection_And_App_Peer_And_Connect_Peer
115     [Arguments]    ${odl_path_sel_mode}    ${exa_add_path_value}
116     [Documentation]    Setup test case keyword. Early after the path selection config the incomming connection
117     ...    from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that
118     ...    we try to start the tool 3 times in case early attempts fail.
119     Configure_Path_Selection_Mode    ${odl_path_sel_mode}
120     Configure_App_Peer_With_Routes
121     Upload_Config_Files    addpath=${exa_add_path_value}
122     BuiltIn.Wait_Until_Keyword_Succeeds    3x    1s    Start_Tool_And_Verify_Connected    ${DEFAUTL_RPC_CFG}
123
124 Start_Tool
125     [Arguments]    ${cfg_file}    ${mapping}={}
126     [Documentation]    Start the tool ${cmd} ${cfg_file}
127     ${start_cmd}    BuiltIn.Set_Variable    ${cmd} ${cfg_file}
128     BuiltIn.Log    ${start_cmd}
129     SSHKeywords.Virtual_Env_Activate_On_Current_Session    log_output=${True}
130     ${output}=    SSHLibrary.Write    ${start_cmd}
131     BuiltIn.Log    ${output}
132
133 Verify_Tools_Connection
134     [Arguments]    ${connected}=${True}
135     [Documentation]    Checks peer presence in operational datastore
136     ${exp_status_code}=    BuiltIn.Set_Variable_If    ${connected}    ${200}    ${404}
137     ${rsp}=    RequestsLibrary.Get Request    ${CONFIG_SESSION}    ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP}
138     BuiltIn.Log    ${rsp.content}
139     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_status_code}    ${rsp.status_code}
140
141 Start_Tool_And_Verify_Connected
142     [Arguments]    ${cfg_file}
143     [Documentation]    Start the tool and verify its connection
144     Start_Tool    ${cfg_file}
145     BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s    Verify_Tools_Connection    connected=${True}
146
147 Stop_Tool
148     [Documentation]    Stop the tool by sending ctrl+c
149     ${output}=    SSHLibrary.Read
150     BuiltIn.Log    ${output}
151     Utils.Write_Bare_Ctrl_C
152     ${output}=    SSHLibrary.Read_Until_Prompt
153     BuiltIn.Log    ${output}
154     SSHKeywords.Virtual_Env_Deactivate_On_Current_Session    log_output=${True}
155
156 Remove_App_Peer_Configuration_And_Stop_Tool
157     Deconfigure_App_Peer
158     Stop_Tool
159     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
160
161 Verify_Expected_Update_Count
162     [Arguments]    ${exp_count}
163     [Documentation]    Verify number of received update messages
164     ${tool_count}=    BgpRpcClient.exa_get_received_update_count
165     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_count}    ${tool_count}
166
167 Configure_Path_Selection_Mode
168     [Arguments]    ${psm}
169     [Documentation]    Configure path selection mode and get rib information for potential debug purposes
170     &{mapping}    BuiltIn.Create_Dictionary    PATHSELMODE=${psm}
171     TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
172     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_psm    mapping=${mapping}    session=${CONFIG_SESSION}
173
174 Configure_Odl_With_Multipaths
175     [Documentation]    Configures odl to support n-paths or all-paths selection
176     ${mapping}=    BuiltIn.Set Variable    ${DEFAULT_MAPPING}
177     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_n_paths    mapping=${mapping}    session=${CONFIG_SESSION}
178     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/module_all_paths    mapping=${mapping}    session=${CONFIG_SESSION}
179     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_psmf    mapping=${mapping}    session=${CONFIG_SESSION}
180     Configure_Path_Selection_Mode    n-paths
181     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/service_bpsm    mapping=${mapping}    session=${CONFIG_SESSION}
182     ${rib_old}=    TemplatedRequests.Get_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
183     BuiltIn.Set_Suite_Variable    ${rib_old}
184     TemplatedRequests.Put_As_Xml_Templated    ${MULT_VAR_FOLDER}/rib    mapping=${mapping}    session=${CONFIG_SESSION}
185
186 Log_Loc_Rib_Operational
187     ${rsp}=    RequestsLibrary.Get Request    ${CONFIG_SESSION}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/
188     BuiltIn.Log    ${rsp.content}
189
190 Configure_App_Peer_With_Routes
191     [Documentation]    Configure bgp application peer and fill it immediately with routes.
192     &{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}
193     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
194     : FOR    ${pathid}    IN    @{PATH_ID_LIST}
195     \    &{route_mapping}    BuiltIn.Create_Dictionary    NEXTHOP=${NEXT_HOP_PREF}${pathid}    LOCALPREF=${pathid}00    PATHID=${pathid}
196     \    TemplatedRequests.Post_As_Xml_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
197
198 Deconfigure_App_Peer
199     [Documentation]    Revert the BGP configuration to the original state: without application peer
200     &{route_mapping}    BuiltIn.Create_Dictionary
201     TemplatedRequests.Delete_Templated    ${MULT_VAR_FOLDER}/route    mapping=${route_mapping}    session=${CONFIG_SESSION}
202     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}
203     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}