creating Normalize_Jsons_With_Bits_And_Compare to TemplatedRequests
[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 request 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 ${JOLOKURL}. Feature
16 ...               odl-jolokia is required by this test suite.
17 Suite Setup       Start_Suite
18 Suite Teardown    Stop_Suite
19 Library           RequestsLibrary
20 Library           SSHLibrary
21 Variables         ${CURDIR}/../../../variables/Variables.py
22 Resource          ${CURDIR}/../../../libraries/Utils.robot
23 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
24 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
25 Resource          ${CURDIR}/../../../libraries/KarafKeywords.robot
26 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
27 Library           ${CURDIR}/../../../libraries/BgpRpcClient.py    ${TOOLS_SYSTEM_IP}
28
29 *** Variables ***
30 ${HOLDTIME}       180
31 ${DEVICE_NAME}    controller-config
32 ${BGP_PEER_NAME}    example-bgp-peer
33 ${RIB_INSTANCE}    example-bgp-rib
34 ${APP_PEER_NAME}    example-bgp-peer-app
35 ${CMD}            env exabgp.tcp.port=1790 exabgp --debug
36 ${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional
37 ${BGP_RR_VAR_FOLDER}    ${BGP_VAR_FOLDER}/route_refresh
38 ${BGP_CFG_NAME}    exa.cfg
39 ${CONFIG_SESSION}    config-session
40 ${EXARPCSCRIPT}    ${CURDIR}/../../../../tools/exabgp_files/exarpc.py
41 ${JOLOKURL}       /jolokia/read/org.opendaylight.controller:instanceName=${BGP_PEER_NAME},type=RuntimeBean,moduleFactoryName=bgp-peer
42 ${PEER_CHECK_URL}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
43
44 *** Test Cases ***
45 Configure_App_Peer
46     [Documentation]    Configure bgp application peer
47     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
48     &{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}
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]    Configure BGP peer module with initiate-connection set to false.
53     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
54     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
55     ...    INITIATE=false    RIB_INSTANCE_NAME=${RIB_INSTANCE}
56     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
57
58 Exa_To_Send_Route_Request
59     [Documentation]    Exabgp sends route refresh and count received updates
60     [Setup]    Configure_Routes_And_Start_Tool    ${BGP_CFG_NAME}
61     Verify_Odl_Received_Route_Request    0
62     BgpRpcClient.exa_clean_received_update_count
63     BgpRpcClient.exa_announce    announce route-refresh ipv4 unicast
64     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Odl_Received_Route_Request    1
65     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Tool_Received_Updates    ${nr_configured_routes}
66     [Teardown]    Deconfigure_Routes_And_Stop_Tool
67
68 Odl_To_Send_Route_Request
69     [Documentation]    Sends route requests and checks if exabgp receives it
70     [Setup]    Start_Tool_And_Verify_Connected    ${BGP_CFG_NAME}
71     BgpRpcClient.exa_clean_received_route_refresh_count
72     &{mapping}    BuiltIn.Create_Dictionary    BGP_PEER_IP=${TOOLS_SYSTEM_IP}
73     TemplatedRequests.Post_As_Xml_Templated    ${BGP_VAR_FOLDER}/route_refresh    mapping=${mapping}    session=${CONFIG_SESSION}
74     BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Odl_Sent_Route_Request    1
75     [Teardown]    Stop_Tool
76
77 Delete_Bgp_Peer_Configuration
78     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
79     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
80     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}
81     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/bgp_peer    mapping=${mapping}    session=${CONFIG_SESSION}
82
83 Deconfigure_App_Peer
84     [Documentation]    Revert the BGP configuration to the original state: without application peer
85     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
86     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    APP_PEER_NAME=${APP_PEER_NAME}
87     TemplatedRequests.Delete_Templated    ${BGP_VAR_FOLDER}/app_peer    mapping=${mapping}    session=${CONFIG_SESSION}
88
89 *** Keywords ***
90 Start_Suite
91     [Documentation]    Suite setup keyword
92     SetupUtils.Setup_Utils_For_Setup_And_Teardown
93     ${mininet_conn_id}=    SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
94     Builtin.Set_Suite_Variable    ${mininet_conn_id}
95     Utils.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
96     SSHKeywords.Virtual_Env_Create
97     SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
98     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}
99     Upload_Config_Files
100
101 Stop_Suite
102     [Documentation]    Suite teardown keyword
103     SSHKeywords.Virtual_Env_Delete
104     SSHLibrary.Close_All_Connections
105     RequestsLibrary.Delete_All_Sessions
106
107 Upload_Config_Files
108     [Documentation]    Uploads exabgp config files
109     SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${BGP_CFG_NAME}    .
110     SSHLibrary.Put_File    ${EXARPCSCRIPT}    .
111     @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
112     : FOR    ${cfgfile}    IN    @{cfgfiles}
113     \    SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
114     \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile}
115     \    SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile}
116     \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
117     \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
118     \    Log    ${stdout}
119
120 Start_Tool
121     [Arguments]    ${cfg_file}    ${mapping}={}
122     [Documentation]    Start the tool ${cmd} ${cfg_file}
123     ${start_cmd}    BuiltIn.Set_Variable    ${cmd} ${cfg_file}
124     BuiltIn.Log    ${start_cmd}
125     SSHKeywords.Virtual_Env_Activate_On_Current_Session    log_output=${True}
126     ${output}=    SSHLibrary.Write    ${start_cmd}
127     BuiltIn.Log    ${output}
128
129 Verify_Tools_Connection
130     [Arguments]    ${connected}=${True}
131     [Documentation]    Checks peer presence in operational datastore
132     ${exp_status_code}=    BuiltIn.Set_Variable_If    ${connected}    ${200}    ${404}
133     ${rsp}=    RequestsLibrary.Get Request    ${CONFIG_SESSION}    ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP}
134     BuiltIn.Log    ${rsp.content}
135     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_status_code}    ${rsp.status_code}
136
137 Start_Tool_And_Verify_Connected
138     [Arguments]    ${cfg_file}
139     [Documentation]    Start the tool and verify its connection
140     KarafKeywords.Log_Testcase_Start_To_Controller_Karaf
141     Start_Tool    ${cfg_file}
142     BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s    Verify_Tools_Connection    connected=${True}
143
144 Stop_Tool
145     [Documentation]    Stop the tool by sending ctrl+c
146     ${output}=    SSHLibrary.Read
147     BuiltIn.Log    ${output}
148     Utils.Write_Bare_Ctrl_C
149     ${output}=    SSHLibrary.Read_Until_Prompt
150     BuiltIn.Log    ${output}
151     SSHKeywords.Virtual_Env_Deactivate_On_Current_Session    log_output=${True}
152
153 Configure_Routes_And_Start_Tool
154     [Arguments]    ${cfg_file}
155     [Documentation]    Setup keyword for exa to odl test case
156     : FOR    ${prefix}    IN    1.1.1.1/32    2.2.2.2/32
157     \    &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}
158     \    TemplatedRequests.Post_As_Xml_Templated    ${BGP_RR_VAR_FOLDER}/route    mapping=${mapping}    session=${CONFIG_SESSION}
159     BuiltIn.Set_Suite_Variable    ${nr_configured_routes}    2
160     Start_Tool_And_Verify_Connected    ${cfg_file}
161     BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s    Verify_Tool_Received_Updates    ${nr_configured_routes}
162
163 Deconfigure_Routes_And_Stop_Tool
164     [Documentation]    Teardown keyword for exa to odl test case
165     Stop_Tool
166     &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}
167     TemplatedRequests.Delete_Templated    ${BGP_RR_VAR_FOLDER}/route    mapping=${mapping}    session=${CONFIG_SESSION}
168
169 Verify_Odl_Sent_Route_Request
170     [Arguments]    ${expcount}
171     [Documentation]    Compares expected count of route request messages on exabgp side
172     ${count}=    BgpRpcClient.exa_get_received_route_refresh_count
173     BuiltIn.Should Be Equal As Numbers    ${count}    ${expcount}
174
175 Verify_Odl_Received_Route_Request
176     [Arguments]    ${expcount}
177     [Documentation]    Gets numebr of received route requests and compares with given expected count
178     ${rsp}=    RequestsLibrary.Get_Request    ${CONFIG_SESSION}    ${JOLOKURL}
179     BuiltIn.Log    ${rsp.content}
180     BuiltIn.Should_Be_Equal_As_Numbers    ${rsp.status_code}    200
181     BuiltIn.Should_Be_Equal_As_Numbers    ${rsp.json()['status']}    200
182     BuiltIn.Should_Be_Equal_As_Numbers    ${rsp.json()['value']['BgpSessionState']['messagesStats']['routeRefreshMsgs']['received']['count']['value']}    ${expcount}
183
184 Verify_Tool_Received_Updates
185     [Arguments]    ${expcount}
186     [Documentation]    Gets numebr of received update requests and compares with given expected count
187     ${count_recv}=    BgpRpcClient.exa_get_received_update_count
188     BuiltIn.Should Be Equal As Numbers    ${count_recv}    ${expcount}