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 Library RequestsLibrary
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}
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
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}
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}
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}
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
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}
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}
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}
99 [Documentation] Suite teardown keyword
100 SSHKeywords.Virtual_Env_Delete
101 SSHLibrary.Close_All_Connections
102 RequestsLibrary.Delete_All_Sessions
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}
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}
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}
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}
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}
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}
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}
164 [Arguments] ${url} ${empty_response}
165 [Documentation] Testcse teardown with data verification
167 BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Verify_Reported_Data ${url} ${empty_response}
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}
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}
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}