7915da19c37e4e910fd8a38be714bc39edc86871
[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 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 Resource          ${CURDIR}/../../../libraries/KarafKeywords.robot
23 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
24 Library           ${CURDIR}/../../../libraries/norm_json.py
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 ${CMD}            env exabgp.tcp.port=1790 exabgp --debug
34 ${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional
35 ${BGP_L3VPN_DIR}    ${BGP_VAR_FOLDER}/l3vpn_ipv4
36 ${DEFAUTL_EXA_CFG}    exa.cfg
37 ${L3VPN_EXA_CFG}    bgp-l3vpn-ipv4.cfg
38 ${L3VPN_RSPEMPTY}    ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4-empty.json
39 ${L3VPN_RSP}      ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4.json
40 ${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
41 ${CONFIG_SESSION}    config-session
42 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
43 ${PEER_CHECK_URL}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
44
45 *** Test Cases ***
46 Configure_App_Peer
47     [Documentation]    Configures bgp application peer
48     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
49     &{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}
50     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
51
52 Reconfigure_ODL_To_Accept_Connection
53     [Documentation]    Configures BGP peer module with initiate-connection set to false.
54     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
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 L3vpn_Ipv4_To_Odl
60     [Documentation]    Testing mpls vpn ipv4 routes reported to odl from exabgp
61     [Setup]    Setup_Testcase    ${L3VPN_EXA_CFG}    ${L3VPN_URL}    ${L3VPN_RSPEMPTY}
62     BuiltIn.Wait_Until_Keyword_Succeeds    15s    1s    Verify Reported Data    ${L3VPN_URL}    ${L3VPN_RSP}
63     [Teardown]    Teardown_Testcase    ${L3VPN_URL}    ${L3VPN_RSPEMPTY}
64
65 L3vpn_Ipv4_From_Odl
66     [Documentation]    Testing mpls vpn ipv4 routes reported from odl to exabgp
67     [Setup]    Start_Tool_And_Verify_Connected    ${DEFAUTL_EXA_CFG}
68     BgpRpcClient.exa_clean_update_message
69     &{mapping}    BuiltIn.Create_Dictionary    BGP_PEER_IP=${TOOLS_SYSTEM_IP}
70     TemplatedRequests.Post_As_Xml_Templated    ${BGP_L3VPN_DIR}/route    mapping=${mapping}    session=${CONFIG_SESSION}
71     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Tool_Received_Update    ${BGP_L3VPN_DIR}/route/exa-expected.json
72     [Teardown]    Remove_Route_And_Stop_Tool
73
74 Delete_Bgp_Peer_Configuration
75     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
76     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
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 Deconfigure_App_Peer
81     [Documentation]    Revert the BGP configuration to the original state: without application peer
82     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
83     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}
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     ${tools_system_conn_id}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
91     Builtin.Set_Suite_Variable    ${tools_system_conn_id}
92     Utils.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 and needed scripts
106     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG}    .
107     SSHLibrary.Put_File    ${BGP_L3VPN_DIR}/${L3VPN_EXA_CFG}    .
108     SSHLibrary.Put_File    ${EXARPCSCRIPT}    .
109     @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
110     : FOR    ${cfgfile}    IN    @{cfgfiles}
111     \    SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
112     \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
113     \    SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/disable/g' ${cfgfile}
114     \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
115     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
116     \    Log    ${stdout}
117
118 Setup_Testcase
119     [Arguments]    ${cfg_file}    ${url}    ${empty_response}
120     [Documentation]    Verifies initial test condition and starts the tool
121     Verify_Reported_Data    ${url}    ${empty_response}
122     Start_Tool_And_Verify_Connected    ${cfg_file}
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     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
145     Start_Tool    ${cfg_file}
146     BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s    Verify_Tools_Connection    connected=${True}
147
148 Stop_Tool
149     [Documentation]    Stop the tool by sending ctrl+c
150     ${output}=    SSHLibrary.Read
151     BuiltIn.Log    ${output}
152     Utils.Write_Bare_Ctrl_C
153     ${output}=    SSHLibrary.Read_Until_Prompt
154     BuiltIn.Log    ${output}
155     SSHKeywords.Virtual_Env_Deactivate_On_Current_Session    log_output=${True}
156
157 Remove_Route_And_Stop_Tool
158     [Documentation]    Removes configured route from application peer and stops the tool
159     &{mapping}    BuiltIn.Create_Dictionary
160     TemplatedRequests.Delete_Templated    ${BGP_L3VPN_DIR}/route    mapping=${mapping}    session=${CONFIG_SESSION}
161     Stop_Tool
162
163 Teardown_Testcase
164     [Arguments]    ${url}    ${empty_response}
165     [Documentation]    Testcse teardown with data verification
166     Stop_Tool
167     BuiltIn.Wait_Until_Keyword_Succeeds    3x    1s    Verify_Reported_Data    ${url}    ${empty_response}
168
169 Verify_Tool_Received_Update
170     [Arguments]    ${exp_update_fn}
171     [Documentation]    Verification of receiving particular update message
172     ${exp_update}=    Get_Expected_Response_From_File    ${exp_update_fn}
173     ${rcv_update_dict}=    BgpRpcClient.exa_get_update_message    msg_only=${True}
174     ${rcv_update}=    BuiltIn.Evaluate    json.dumps(${rcv_update_dict})    modules=json
175     ${keys_with_bits}=    BuiltIn.Create_List    op
176     ${received_json}=    norm_json.Normalize_Json_Text    ${rcv_update}    keys_with_bits=${keys_with_bits}
177     ${expected_json}=    norm_json.Normalize_Json_Text    ${exp_update}    keys_with_bits=${keys_with_bits}
178     BuiltIn.Log    ${received_json}
179     BuiltIn.Log    ${expected_json}
180     BuiltIn.Should_Be_Equal    ${received_json}    ${expected_json}
181
182 Verify_Reported_Data
183     [Arguments]    ${url}    ${exprspfile}
184     [Documentation]    Verifies expected response
185     ${keys_with_bits}=    BuiltIn.Create_List    op
186     ${expected_rsp}=    Get_Expected_Response_From_File    ${exprspfile}
187     ${expected_json}=    norm_json.Normalize_Json_Text    ${expected_rsp}    keys_with_bits=${keys_with_bits}
188     ${rsp}=    RequestsLibrary.Get_Request    ${CONFIG_SESSION}    ${url}
189     BuiltIn.Log    ${rsp.content}
190     ${received_json}=    norm_json.Normalize_Json_Text    ${rsp.content}    keys_with_bits=${keys_with_bits}
191     BuiltIn.Log    ${received_json}
192     BuiltIn.Log    ${expected_json}
193     BuiltIn.Should_Be_Equal    ${received_json}    ${expected_json}
194
195 Get_Expected_Response_From_File
196     [Arguments]    ${exprspfile}
197     [Documentation]    Looks for release specific response first, then take default.
198     ${status}    ${expresponse}=    BuiltIn.Run_Keyword_And_Ignore_Error    OperatingSystem.Get File    ${exprspfile}.${ODL_STREAM}
199     Return From Keyword If    '${status}' == 'PASS'    ${expresponse}
200     ${expresponse}=    OperatingSystem.Get File    ${exprspfile}
201     [Return]    ${expresponse}