2 Documentation Functional test suite for bgp - l3vpn-ipv4
4 ... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
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
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}
29 ${DEVICE_NAME} controller-config
30 ${BGP_PEER_NAME} example-bgp-peer
31 ${RIB_INSTANCE} example-bgp-rib
32 ${PROTOCOL_OPENCONFIG} ${RIB_INSTANCE}
33 ${APP_PEER_NAME} example-bgp-peer-app
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 ${DEFAULT_BGPCEP_LOG_LEVEL} INFO
48 [Documentation] Configures bgp application peer. Openconfig is used for carbon and above.
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} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
50 ... IP=${ODL_SYSTEM_IP}
51 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
53 Reconfigure_ODL_To_Accept_Connection
54 [Documentation] Configures 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} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG} PASSIVE_MODE=true
57 TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
60 [Documentation] Testing mpls vpn ipv4 routes reported to odl from exabgp
61 [Setup] Setup_Testcase ${L3VPN_EXA_CFG}
62 BuiltIn.Wait_Until_Keyword_Succeeds 15s 1s Verify Reported Data ${L3VPN_URL} ${L3VPN_RSP}
63 [Teardown] Teardown_Simple
66 [Documentation] Testing mpls vpn ipv4 routes reported from odl to exabgp
67 [Setup] Setup_Testcase ${DEFAUTL_EXA_CFG}
68 BgpRpcClient.exa_clean_update_message
69 &{mapping} BuiltIn.Create_Dictionary BGP_PEER_IP=${TOOLS_SYSTEM_IP} APP_PEER_IP=${ODL_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_ExaBgp_Received_Update ${BGP_L3VPN_DIR}/route_expected/exa-expected.json
72 [Teardown] Teardowm_With_Remove_Route
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} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
77 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
80 [Documentation] Revert the BGP configuration to the original state: without application peer
81 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} IP=${ODL_SYSTEM_IP} BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
82 TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION}
86 [Documentation] Suite setup keyword.
87 SetupUtils.Setup_Utils_For_Setup_And_Teardown
88 ${tools_system_conn_id}= SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s
89 Builtin.Set_Suite_Variable ${tools_system_conn_id}
90 SSHKeywords.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER}
91 SSHKeywords.Virtual_Env_Create
92 SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16
93 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
95 KarafKeywords.Set_Bgpcep_Log_Levels # ${DEFAULT_BGPCEP_LOG_LEVEL} is applied by default
98 [Documentation] Suite teardown keyword
99 SSHKeywords.Virtual_Env_Delete
100 SSHLibrary.Close_All_Connections
101 RequestsLibrary.Delete_All_Sessions
104 [Documentation] Uploads exabgp config files and needed scripts
105 SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG} .
106 SSHLibrary.Put_File ${BGP_L3VPN_DIR}/${L3VPN_EXA_CFG} .
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/disable/g' ${cfgfile}
113 \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
114 \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile}
118 [Arguments] ${cfg_file}
119 [Documentation] Verifies initial test condition and starts the exabgp
120 SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
121 Verify_Reported_Data ${L3VPN_URL} ${L3VPN_RSPEMPTY}
122 ExaBgpLib.Start_ExaBgp_And_Verify_Connected ${cfg_file} ${CONFIG_SESSION} ${TOOLS_SYSTEM_IP} connection_retries=${3}
124 Teardowm_With_Remove_Route
125 [Documentation] Removes configured route from application peer and stops the exabgp
126 &{mapping} BuiltIn.Create_Dictionary APP_PEER_IP=${ODL_SYSTEM_IP}
127 TemplatedRequests.Delete_Templated ${BGP_L3VPN_DIR}/route mapping=${mapping} session=${CONFIG_SESSION}
131 [Documentation] Testcse teardown with data verification
132 ExaBgpLib.Stop_ExaBgp
133 BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Verify_Reported_Data ${L3VPN_URL} ${L3VPN_RSPEMPTY}
135 Verify_ExaBgp_Received_Update
136 [Arguments] ${exp_update_fn}
137 [Documentation] Verification of receiving particular update message
138 ${exp_update}= Get_Expected_Response_From_File ${exp_update_fn}
139 ${rcv_update_dict}= BgpRpcClient.exa_get_update_message msg_only=${True}
140 ${rcv_update}= BuiltIn.Evaluate json.dumps(${rcv_update_dict}) modules=json
141 TemplatedRequests.Normalize_Jsons_And_Compare ${exp_update} ${rcv_update}
144 [Arguments] ${url} ${exprspfile}
145 [Documentation] Verifies expected response
146 ${expected_rsp}= Get_Expected_Response_From_File ${exprspfile}
147 ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${url}
148 TemplatedRequests.Normalize_Jsons_And_Compare ${expected_rsp} ${rsp.content}
150 Get_Expected_Response_From_File
151 [Arguments] ${exprspfile}
152 [Documentation] Looks for release specific response first, then take default.
153 ${status} ${expresponse}= BuiltIn.Run_Keyword_And_Ignore_Error OperatingSystem.Get File ${exprspfile}.${ODL_STREAM}
154 Return From Keyword If '${status}' == 'PASS' ${expresponse}
155 ${expresponse}= OperatingSystem.Get File ${exprspfile}
156 [Return] ${expresponse}