bgp_functional_route test update
[integration/test.git] / csit / suites / bgpcep / bgpfunct / 040_bgp_functional_route_ref.robot
1 *** Settings ***
2 Documentation     Functional test for bgp - route refresh
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 sending and receiveing route refresh message.
11 ...               It uses odl and exabgp as bgp peers.
12 ...               Sending route refresh message from odl is initiated via restconf.
13 ...               If route refresh received by odl also correct advertising of routes
14 ...               is verified. Receiving of route refresh by odl is verified by
15 ...               checking appropriate message counter via odl-bgpcep-bgp-cli and
16 ...               restconf using BGP neighbor operational state
17 Suite Setup       Start_Suite
18 Suite Teardown    Stop_Suite
19 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
20 Library           RequestsLibrary
21 Library           SSHLibrary
22 Variables         ../../../variables/Variables.py
23 Resource          ../../../libraries/ExaBgpLib.robot
24 Resource          ../../../libraries/SetupUtils.robot
25 Resource          ../../../libraries/TemplatedRequests.robot
26 Resource          ../../../libraries/SSHKeywords.robot
27 Resource          ../../../libraries/KarafKeywords.robot
28 Resource          ../../../libraries/CompareStream.robot
29 Library           ../../../libraries/BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
30
31 *** Variables ***
32 ${HOLDTIME}       180
33 ${DEVICE_NAME}    controller-config
34 ${BGP_PEER_NAME}    example-bgp-peer
35 ${RIB_INSTANCE}    example-bgp-rib
36 ${PROTOCOL_OPENCONFIG}    ${RIB_INSTANCE}
37 ${APP_PEER_NAME}    example-bgp-peer-app
38 ${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional
39 ${BGP_RR_VAR_FOLDER}    ${BGP_VAR_FOLDER}/route_refresh
40 ${BGP_CFG_NAME}    exa.cfg
41 ${CONFIG_SESSION}    config-session
42 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
43
44 *** Test Cases ***
45 Configure_App_Peer
46     [Documentation]    Configures bgp application peer. Openconfig is used for carbon and above.
47     &{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}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
48     ...    IP=${ODL_SYSTEM_IP}
49     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
50
51 Reconfigure_ODL_To_Accept_Connection
52     [Documentation]    Configures BGP peer module with initiate-connection set to false.
53     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
54     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}    PASSIVE_MODE=true
55     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
56
57 Exa_To_Send_Route_Refresh
58     [Documentation]    Exabgp sends route refresh and count received updates
59     [Setup]    Configure_Routes_And_Start_ExaBgp    ${BGP_CFG_NAME}
60     BgpRpcClient.exa_clean_received_update_count
61     BgpRpcClient.exa_announce    announce route-refresh ipv4 unicast
62     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_ExaBgp_Received_Updates    ${nr_configured_routes}
63     BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    Verify_Odl_Received_Updates    ${nr_configured_routes}
64     [Teardown]    Deconfigure_Routes_And_Stop_ExaBgp
65
66 Odl_To_Send_Route_Refresh
67     [Documentation]    Sends route refresh request and checks if exabgp receives it
68     [Setup]    ExaBgpLib.Start_ExaBgp_And_Verify_Connected    ${BGP_CFG_NAME}    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}
69     BgpRpcClient.exa_clean_received_route_refresh_count
70     &{mapping}    BuiltIn.Create_Dictionary    BGP_PEER_IP=${TOOLS_SYSTEM_IP}
71     TemplatedRequests.Post_As_Xml_Templated    ${BGP_VAR_FOLDER}/route_refresh    mapping=${mapping}    session=${CONFIG_SESSION}
72     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_ExaBgp_Received_Route_Refresh    1
73     BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    Verify_Odl_Received_Route_Refresh    1
74     [Teardown]    ExaBgpLib.Stop_ExaBgp
75
76 Delete_Bgp_Peer_Configuration
77     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
78     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
79     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
80
81 Deconfigure_App_Peer
82     [Documentation]    Revert the BGP configuration to the original state: without application peer
83     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}    IP=${ODL_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
84     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
85
86 *** Keywords ***
87 Start_Suite
88     [Documentation]    Suite setup keyword.
89     SetupUtils.Setup_Utils_For_Setup_And_Teardown
90     ${mininet_conn_id}=    SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
91     Builtin.Set_Suite_Variable    ${mininet_conn_id}
92     SSHKeywords.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
93     SSHKeywords.Virtual_Env_Create
94     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
95     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
96     Upload_Config_Files
97
98 Stop_Suite
99     [Documentation]    Suite teardown keyword
100     SSHKeywords.Virtual_Env_Delete
101     SSHLibrary.Close_All_Connections
102     RequestsLibrary.Delete_All_Sessions
103
104 Upload_Config_Files
105     [Documentation]    Uploads exabgp config files
106     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${BGP_CFG_NAME}    .
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/disable/g' ${cfgfile}
114     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
115     \    Log    ${stdout}
116
117 Configure_Routes_And_Start_ExaBgp
118     [Arguments]    ${cfg_file}
119     [Documentation]    Setup keyword for exa to odl test case
120     ${app_rib}    Set Variable    ${ODL_SYSTEM_IP}
121     : FOR    ${prefix}    IN    1.1.1.1/32    2.2.2.2/32
122     \    &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}    APP_RIB=${app_rib}
123     \    TemplatedRequests.Post_As_Xml_Templated    ${BGP_RR_VAR_FOLDER}/route    mapping=${mapping}    session=${CONFIG_SESSION}
124     BuiltIn.Set_Suite_Variable    ${nr_configured_routes}    2
125     ExaBgpLib.Start_ExaBgp_And_Verify_Connected    ${cfg_file}    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}
126     BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s    Verify_ExaBgp_Received_Updates    ${nr_configured_routes}
127
128 Deconfigure_Routes_And_Stop_ExaBgp
129     [Documentation]    Teardown keyword for exa to odl test case
130     ExaBgpLib.Stop_ExaBgp
131     ${app_rib}    Set Variable    ${ODL_SYSTEM_IP}
132     &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}    APP_RIB=${app_rib}
133     TemplatedRequests.Delete_Templated    ${BGP_RR_VAR_FOLDER}/route    mapping=${mapping}    session=${CONFIG_SESSION}
134
135 Verify_ExaBgp_Received_Updates
136     [Arguments]    ${expcount}
137     [Documentation]    Gets number of received update requests and compares with given expected count
138     [Tags]    critical
139     ${count_recv}=    BgpRpcClient.exa_get_received_update_count
140     BuiltIn.Should Be Equal As Numbers    ${count_recv}    ${expcount}
141
142 Verify_Odl_Received_Updates
143     [Arguments]    ${expcount}
144     [Documentation]    Compares sent information with given expected count using restconf
145     [Tags]    critical
146     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    RIB_INSTANCE_NAME=${RIB_INSTANCE}    COUNT=${expcount}
147     ${ret}=    BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    TemplatedRequests.Get_As_Json_Templated    folder=${BGP_RR_VAR_FOLDER}/operational_updates    mapping=${mapping}
148     ...    session=${CONFIG_SESSION}    verify=True
149     CompareStream.Run_Keyword_If_At_Least_Oxygen    BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    Verify_Odl_Received_Updates_Cli    ${expcount}
150
151 Verify_Odl_Received_Updates_Cli
152     [Arguments]    ${expcount}
153     [Documentation]    Compares sent information with given expected count using odl-bgpcep-bgp-cli
154     [Tags]    critical
155     ${output}=    KarafKeywords.Safe_Issue_Command_On_Karaf_Console    bgp:operational-state -rib example-bgp-rib -neighbor ${TOOLS_SYSTEM_IP}
156     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    COUNT=${expcount}
157     ${expstate}    TemplatedRequests.Resolve_Text_From_Template_File    folder=${BGP_RR_VAR_FOLDER}/operational_cli/    file_name=update.txt    mapping=${mapping}
158     BuiltIn.Should_Contain    ${output}    ${expstate}
159
160 Verify_ExaBgp_Received_Route_Refresh
161     [Arguments]    ${expcount}
162     [Documentation]    Compares expected count of route request messages on exabgp side
163     [Tags]    critical
164     ${count}=    BgpRpcClient.exa_get_received_route_refresh_count
165     BuiltIn.Should Be Equal As Numbers    ${count}    ${expcount}
166
167 Verify_Odl_Received_Route_Refresh
168     [Arguments]    ${expcount}
169     [Documentation]    Compares expected count of messages on odl using restconf
170     [Tags]    critical
171     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    RIB_INSTANCE_NAME=${RIB_INSTANCE}    COUNT=${expcount}
172     ${ret}=    BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    TemplatedRequests.Get_As_Json_Templated    folder=${BGP_RR_VAR_FOLDER}/operational_route_refresh    mapping=${mapping}
173     ...    session=${CONFIG_SESSION}    verify=True
174     CompareStream.Run_Keyword_If_At_Least_Oxygen    BuiltIn.Wait_Until_Keyword_Succeeds    3x    5s    Verify_Odl_Received_Route_Refresh_Cli    ${expcount}
175
176 Verify_Odl_Received_Route_Refresh_Cli
177     [Arguments]    ${expcount}
178     [Documentation]    Compares expected count of messages on odl using odl-bgpcep-bgp-cli
179     [Tags]    critical
180     ${output}=    KarafKeywords.Safe_Issue_Command_On_Karaf_Console    bgp:operational-state -rib example-bgp-rib -neighbor ${TOOLS_SYSTEM_IP}
181     &{mapping}    BuiltIn.Create_Dictionary    IP=${TOOLS_SYSTEM_IP}    COUNT=${expcount}
182     ${expstate}    TemplatedRequests.Resolve_Text_From_Template_File    folder=${BGP_RR_VAR_FOLDER}/operational_cli/    file_name=route_refresh.txt    mapping=${mapping}
183     BuiltIn.Should_Contain    ${output}    ${expstate}