creating ExaBgpLib and refactoring bgp functional suites to use it
[integration/test.git] / csit / suites / bgpcep / bgpfunct / 010_bgp_functional_l3vpn.robot
1 *** Settings ***
2 Documentation     Functional test suite for bgp - l3vpn-ipv4
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 advertising and receiveing routes with l3vpn content.
11 ...               It uses odl and exabgp as bgp peers. Routes advertized from odl
12 ...               are configured via application peer. Routes advertised from exabgp is
13 ...               statically configured in exabgp config file.
14 Suite Setup       Start_Suite
15 Suite Teardown    Stop_Suite
16 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
17 Library           RequestsLibrary
18 Library           SSHLibrary
19 Variables         ${CURDIR}/../../../variables/Variables.py
20 Resource          ${CURDIR}/../../../libraries/ExaBgpLib.robot
21 Resource          ${CURDIR}/../../../libraries/Utils.robot
22 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
23 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
24 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
25 Library           ${CURDIR}/../../../libraries/BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
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 ${BGP_L3VPN_DIR}    ${BGP_VAR_FOLDER}/l3vpn_ipv4
35 ${DEFAUTL_EXA_CFG}    exa.cfg
36 ${L3VPN_EXA_CFG}    bgp-l3vpn-ipv4.cfg
37 ${L3VPN_RSPEMPTY}    ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4-empty.json
38 ${L3VPN_RSP}      ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4.json
39 ${L3VPN_URL}      /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-types:ipv4-address-family/bgp-types:mpls-labeled-vpn-subsequent-address-family/bgp-vpn-ipv4:vpn-ipv4-routes
40 ${CONFIG_SESSION}    config-session
41 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
42 ${DEFAULT_BGPCEP_LOG_LEVEL}    INFO
43
44 *** Test Cases ***
45 Configure_App_Peer
46     [Documentation]    Configures bgp application peer
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}
48     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
49
50 Reconfigure_ODL_To_Accept_Connection
51     [Documentation]    Configures BGP peer module with initiate-connection set to false.
52     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
53     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}
54     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
55
56 L3vpn_Ipv4_To_Odl
57     [Documentation]    Testing mpls vpn ipv4 routes reported to odl from exabgp
58     [Setup]    Setup_Testcase    ${L3VPN_EXA_CFG}
59     BuiltIn.Wait_Until_Keyword_Succeeds    15s    1s    Verify Reported Data    ${L3VPN_URL}    ${L3VPN_RSP}
60     [Teardown]    Teardown_Simple
61
62 L3vpn_Ipv4_From_Odl
63     [Documentation]    Testing mpls vpn ipv4 routes reported from odl to exabgp
64     [Setup]    Setup_Testcase    ${DEFAUTL_EXA_CFG}
65     BgpRpcClient.exa_clean_update_message
66     &{mapping}    BuiltIn.Create_Dictionary    BGP_PEER_IP=${TOOLS_SYSTEM_IP}
67     TemplatedRequests.Post_As_Xml_Templated    ${BGP_L3VPN_DIR}/route    mapping=${mapping}    session=${CONFIG_SESSION}
68     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_ExaBgp_Received_Update    ${BGP_L3VPN_DIR}/route/exa-expected.json
69     [Teardown]    Teardowm_With_Remove_Route
70
71 Delete_Bgp_Peer_Configuration
72     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
73     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}
74     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
75
76 Deconfigure_App_Peer
77     [Documentation]    Revert the BGP configuration to the original state: without application peer
78     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}
79     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
80
81 *** Keywords ***
82 Start_Suite
83     [Documentation]    Suite setup keyword.
84     SetupUtils.Setup_Utils_For_Setup_And_Teardown
85     ${tools_system_conn_id}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
86     Builtin.Set_Suite_Variable    ${tools_system_conn_id}
87     Utils.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
88     SSHKeywords.Virtual_Env_Create
89     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
90     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
91     Upload_Config_Files
92     KarafKeywords.Set_Bgpcep_Log_Levels    # ${DEFAULT_BGPCEP_LOG_LEVEL} is applied by default
93
94 Stop_Suite
95     [Documentation]    Suite teardown keyword
96     SSHKeywords.Virtual_Env_Delete
97     SSHLibrary.Close_All_Connections
98     RequestsLibrary.Delete_All_Sessions
99
100 Upload_Config_Files
101     [Documentation]    Uploads exabgp config files and needed scripts
102     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG}    .
103     SSHLibrary.Put_File    ${BGP_L3VPN_DIR}/${L3VPN_EXA_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/disable/g' ${cfgfile}
110     \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
111     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
112     \    Log    ${stdout}
113
114 Setup_Testcase
115     [Arguments]    ${cfg_file}
116     [Documentation]    Verifies initial test condition and starts the exabgp
117     SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
118     Verify_Reported_Data    ${L3VPN_URL}    ${L3VPN_RSPEMPTY}
119     ExaBgpLib.Start_ExaBgp_And_Verify_Connected    ${cfg_file}    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}
120
121 Teardowm_With_Remove_Route
122     [Documentation]    Removes configured route from application peer and stops the exabgp
123     &{mapping}    BuiltIn.Create_Dictionary
124     TemplatedRequests.Delete_Templated    ${BGP_L3VPN_DIR}/route    mapping=${mapping}    session=${CONFIG_SESSION}
125     Teardown_Simple
126
127 Teardown_Simple
128     [Documentation]    Testcse teardown with data verification
129     ExaBgpLib.Stop_ExaBgp
130     BuiltIn.Wait_Until_Keyword_Succeeds    3x    1s    Verify_Reported_Data    ${L3VPN_URL}    ${L3VPN_RSPEMPTY}
131
132 Verify_ExaBgp_Received_Update
133     [Arguments]    ${exp_update_fn}
134     [Documentation]    Verification of receiving particular update message
135     ${exp_update}=    Get_Expected_Response_From_File    ${exp_update_fn}
136     ${rcv_update_dict}=    BgpRpcClient.exa_get_update_message    msg_only=${True}
137     ${rcv_update}=    BuiltIn.Evaluate    json.dumps(${rcv_update_dict})    modules=json
138     TemplatedRequests.Normalize_Jsons_And_Compare    ${exp_update}    ${rcv_update}
139
140 Verify_Reported_Data
141     [Arguments]    ${url}    ${exprspfile}
142     [Documentation]    Verifies expected response
143     ${expected_rsp}=    Get_Expected_Response_From_File    ${exprspfile}
144     ${rsp}=    RequestsLibrary.Get_Request    ${CONFIG_SESSION}    ${url}
145     TemplatedRequests.Normalize_Jsons_And_Compare    ${expected_rsp}    ${rsp.content}
146
147 Get_Expected_Response_From_File
148     [Arguments]    ${exprspfile}
149     [Documentation]    Looks for release specific response first, then take default.
150     ${status}    ${expresponse}=    BuiltIn.Run_Keyword_And_Ignore_Error    OperatingSystem.Get File    ${exprspfile}.${ODL_STREAM}
151     Return From Keyword If    '${status}' == 'PASS'    ${expresponse}
152     ${expresponse}=    OperatingSystem.Get File    ${exprspfile}
153     [Return]    ${expresponse}