Cleanup bgp-ingest tests
[integration/test.git] / csit / suites / bgpcep / bgpingest / bgp_app_peer_prefixcount.robot
1 *** Settings ***
2 Documentation     BGP performance of ingesting from 1 BGP application peer
3 ...
4 ...               Copyright (c) 2015 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 ...               Test suite performs basic BGP performance test cases for
11 ...               BGP application peer. BGP application peer introduces routes -
12 ...               using restconf - in two steps:
13 ...               1. introduces the ${PREFILL} number of routes in one POST request
14 ...               2. POSTs the rest of routes (up to the ${COUNT} number) one by one
15 ...               Test suite checks that the prefixes are propagated to
16 ...               IPv4 topology and announced to BGP peer via updates. Test case
17 ...               where the BGP peer is disconnected and reconnected and all routes
18 ...               are deleted by BGP application peer are performed as well.
19 ...               Brief description how to configure BGP application peer and
20 ...               how to use restconf application peer interface:
21 ...               https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Application_Peer
22 ...               https://wiki.opendaylight.org/view/BGP_LS_PCEP:Programmer_Guide#BGP
23 ...               http://docs.opendaylight.org/en/stable-boron/user-guide/bgp-user-guide.html#bgp-peering
24 ...               http://docs.opendaylight.org/en/stable-boron/user-guide/bgp-user-guide.html#application-peer-configuration
25 ...
26 ...               Reported bugs:
27 ...               Bug 4689 - Not a reasonable duration of 1M prefix introduction from BGP application peer via restconf
28 ...               Bug 4791 - BGPSessionImpl: Failed to send message Update logged even all UPDATE mesages received by iBGP peer
29 Suite Setup       Setup_Everything
30 Suite Teardown    Teardown_Everything
31 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
32 Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
33 Force Tags        critical
34 Library           SSHLibrary    timeout=10s
35 Library           RequestsLibrary
36 Resource          ${CURDIR}/../../../variables/Variables.robot
37 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
38 Resource          ${CURDIR}/../../../libraries/BGPSpeaker.robot
39 Resource          ${CURDIR}/../../../libraries/FailFast.robot
40 Resource          ${CURDIR}/../../../libraries/KillPythonTool.robot
41 Resource          ${CURDIR}/../../../libraries/PrefixCounting.robot
42 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
43 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
44 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
45
46 *** Variables ***
47 ${BGP_VARIABLES_FOLDER}    ${CURDIR}/../../../variables/bgpuser/
48 ${HOLDTIME}       180
49 ${HOLDTIME_APP_PEER_PREFIX_COUNT}    ${HOLDTIME}
50 ${COUNT}          200000
51 ${PREFILL}        100000
52 ${COUNT_APP_PEER_PREFIX_COUNT}    ${COUNT}
53 ${CHECK_PERIOD}    1
54 ${CHECK_PERIOD_APP_PEER_PREFIX_COUNT}    ${CHECK_PERIOD}
55 ${REPETITIONS_APP_PEER_PREFIX_COUNT}    1
56 ${BGP_PEER_LOG_LEVEL}    info
57 ${BGP_APP_PEER_LOG_LEVEL}    info
58 ${ODL_LOG_LEVEL}    INFO
59 ${ODL_BGP_LOG_LEVEL}    DEFAULT
60 ${BGP_PEER_COMMAND}    python play.py --amount 0 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_PEER_LOG_LEVEL}
61 ${BGP_PEER_OPTIONS}    &>bgp_peer.log
62 ${BGP_APP_PEER_ID}    10.0.0.10
63 ${BGP_APP_PEER_INITIAL_COMMAND}    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command post --count ${PREFILL} --prefix 8.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL}
64 ${BGP_APP_PEER_PUT_COMMAND}    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command put --count ${PREFILL} --prefix 8.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL}
65 ${BGP_APP_PEER_DELETE_ALL_COMMAND}    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command delete-all --${BGP_APP_PEER_LOG_LEVEL}
66 ${BGP_APP_PEER_GET_COMMAND}    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command get --${BGP_APP_PEER_LOG_LEVEL}
67 ${BGP_APP_PEER_OPTIONS}    &>bgp_app_peer.log
68 ${TEST_DURATION_MULTIPLIER}    30
69 ${last_prefix_count}    -1
70 ${DEVICE_NAME}    controller-config
71 ${BGP_PEER_NAME}    example-bgp-peer
72 ${RIB_INSTANCE}    example-bgp-rib
73 ${PROTOCOL_OPENCONFIG}    ${RIB_INSTANCE}
74
75 *** Test Cases ***
76 Check_For_Empty_Ipv4_Topology_Before_Starting
77     [Documentation]    Wait for example-ipv4-topology to come up and empty. Give large timeout for case when BGP boots slower than restconf.
78     BuiltIn.Wait_Until_Keyword_Succeeds    120s    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty
79
80 Reconfigure_ODL_To_Accept_Connection
81     [Documentation]    Configure BGP peer module with initiate-connection set to false.
82     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME_APP_PEER_PREFIX_COUNT}    PEER_PORT=${BGP_TOOL_PORT}
83     ...    INITIATE=false    BGP_RIB=${RIB_INSTANCE}    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}    RIB_INSTANCE_NAME=${RIB_INSTANCE}
84     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}
85
86 Reconfigure_ODL_To_Accept_BGP_Application_Peer
87     [Documentation]    Configure BGP application peer module.
88     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    NAME=example-bgp-peer-app    RIB_INSTANCE_NAME=${RIB_INSTANCE}    IP=${BGP_APP_PEER_ID}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
89     TemplatedRequests.Put_As_Xml_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer    mapping=${mapping}
90
91 Connect_BGP_Peer
92     [Documentation]    Start BGP peer tool
93     SSHLibrary.Switch Connection    bgp_peer_console
94     Start_Console_Tool    ${BGP_PEER_COMMAND}    ${BGP_PEER_OPTIONS}
95     Read_And_Fail_If_Prompt_Is_Seen
96
97 BGP_Application_Peer_Prefill_Routes
98     [Documentation]    Start BGP application peer tool and prefill routes.
99     SSHLibrary.Switch Connection    bgp_app_peer_console
100     Start_Console_Tool    ${BGP_APP_PEER_INITIAL_COMMAND} ${script_uri_opt}    ${BGP_APP_PEER_OPTIONS}
101     Wait_Until_Console_Tool_Finish    ${bgp_filling_timeout}
102     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_prefill.log
103
104 Wait_For_Ipv4_Topology_Is_Prefilled
105     [Documentation]    Wait until example-ipv4-topology reaches the target prfix count.
106     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    10s    PrefixCounting.Check_Ipv4_Topology_Count    ${PREFILL}
107
108 Check_Bgp_Peer_Updates_For_Prefilled_Routes
109     [Documentation]    Count the routes introduced by updates.
110     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
111     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    1s    Check_File_For_Word_Count    bgp_peer.log    total_received_nlri_prefix_counter: ${PREFILL}    2
112
113 BGP_Application_Peer_Introduce_Single_Routes
114     [Documentation]    Start BGP application peer tool and introduce routes.
115     SSHLibrary.Switch Connection    bgp_app_peer_console
116     Start_Console_Tool    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command add --count ${remaining_prefixes} --prefix 12.0.0.0 --prefixlen 28 --${BGP_APP_PEER_LOG_LEVEL} ${script_uri_opt}    ${BGP_APP_PEER_OPTIONS}
117     Wait_Until_Console_Tool_Finish    ${bgp_filling_timeout}
118     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_singles.log
119
120 Wait_For_Ipv4_Topology_Is_Filled
121     [Documentation]    Wait until example-ipv4-topology reaches the target prfix count.
122     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    10s    PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT_APP_PEER_PREFIX_COUNT}
123
124 Check_Bgp_Peer_Updates_For_All_Routes
125     [Documentation]    Count the routes introduced by updates.
126     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
127     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    1s    Check_File_For_Word_Count    bgp_peer.log    total_received_nlri_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT}    2
128
129 Disconnect_BGP_Peer
130     [Documentation]    Stop BGP peer tool
131     SSHLibrary.Switch Connection    bgp_peer_console
132     Stop_Console_Tool
133     Store_File_To_Workspace    bgp_peer.log    bgp_peer_reconnect.log
134
135 Reconnect_BGP_Peer
136     [Documentation]    Start BGP peer tool
137     SSHLibrary.Switch Connection    bgp_peer_console
138     Start_Console_Tool    ${BGP_PEER_COMMAND}    ${BGP_PEER_OPTIONS}
139     Read_And_Fail_If_Prompt_Is_Seen
140
141 Check_Bgp_Peer_Updates_For_Reintroduced_Routes
142     [Documentation]    Count the routes introduced by updates.
143     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
144     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    1s    Check_File_For_Word_Count    bgp_peer.log    total_received_nlri_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT}    2
145
146 BGP_Application_Peer_Delete_All_Routes
147     [Documentation]    Start BGP application peer tool and delete all routes.
148     SSHLibrary.Switch Connection    bgp_app_peer_console
149     Start_Console_Tool    ${BGP_APP_PEER_DELETE_ALL_COMMAND} ${script_uri_opt}    ${BGP_APP_PEER_OPTIONS}
150     Wait_Until_Console_Tool_Finish    ${bgp_emptying_timeout}
151     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_delete_all.log
152
153 Wait_For_Stable_Topology_After_Deletion
154     [Documentation]    Wait until example-ipv4-topology becomes stable again.
155     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_emptying_timeout}    period=${CHECK_PERIOD_APP_PEER_PREFIX_COUNT}    repetitions=${REPETITIONS_APP_PEER_PREFIX_COUNT}    excluded_count=${COUNT_APP_PEER_PREFIX_COUNT}
156
157 Check_For_Empty_Ipv4_Topology_After_Deleting
158     [Documentation]    Example-ipv4-topology should be empty now.
159     PrefixCounting.Check_Ipv4_Topology_Is_Empty
160
161 Check_Bgp_Peer_Updates_For_Prefix_Withdrawals
162     [Documentation]    Count the routes withdrawn by updates.
163     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
164     BuiltIn.Wait Until Keyword Succeeds    ${bgp_emptying_timeout}    1s    Check_File_For_Word_Count    bgp_peer.log    total_received_withdrawn_prefix_counter: ${COUNT_APP_PEER_PREFIX_COUNT}    2
165
166 Stop_BGP_Peer
167     [Documentation]    Stop BGP peer tool
168     SSHLibrary.Switch Connection    bgp_peer_console
169     Stop_Console_Tool
170     Store_File_To_Workspace    bgp_peer.log    bgp_peer_reconnect.log
171
172 Delete_Bgp_Peer_Configuration
173     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
174     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
175     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    mapping=${mapping}
176
177 Delete_Bgp_Application_Peer_Configuration
178     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
179     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    NAME=example-bgp-peer-app    IP=${BGP_APP_PEER_ID}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
180     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer    mapping=${mapping}
181
182 Check_Bug_4791
183     [Documentation]    Check controller's log for errors
184     Check Karaf Log File Does Not Have Messages    ${ODL_SYSTEM_IP}    Failed to send message Update
185
186 *** Keywords ***
187 Setup_Everything
188     [Documentation]    Setup imported resources, SSH-login to tools system,
189     ...    create HTTP session, put Python tool to tools system.
190     SetupUtils.Setup_Utils_For_Setup_And_Teardown
191     TemplatedRequests.Create_Default_Session
192     PrefixCounting.PC_Setup
193     SSHLibrary.Set_Default_Configuration    prompt=${TOOLS_SYSTEM_PROMPT}
194     RequestsLibrary.Create_Session    operational    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    timeout=125    max_retries=0
195     # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
196     # TODO: Alternatively, create variable in Variables which starts with http.
197     # Both TODOs would probably need to update every suite relying on current Variables.
198     Open_BGP_Peer_Console
199     Open_BGP_Aplicationp_Peer_Console
200     SSHKeywords.Require_Python
201     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
202     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
203     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/bgp_app_peer.py
204     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/ipv4-routes-template.xml*
205     # Calculate the timeout value based on how many routes are going to be pushed.
206     # The offset (20) is set for keeping reasonable timeout for low COUNT values.
207     ${timeout} =    BuiltIn.Evaluate    ${TEST_DURATION_MULTIPLIER} * ${COUNT_APP_PEER_PREFIX_COUNT} * 3.0 / 10000 + 20
208     Builtin.Set_Suite_Variable    ${bgp_filling_timeout}    ${timeout}
209     Builtin.Set_Suite_Variable    ${bgp_emptying_timeout}    ${bgp_filling_timeout*3.0/4}
210     ${result} =    BuiltIn.Evaluate    str(int(${COUNT_APP_PEER_PREFIX_COUNT}) - int(${PREFILL}))
211     Builtin.Set_Suite_Variable    ${remaining_prefixes}    ${result}
212     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_LOG_LEVEL}
213     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
214     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol
215     ${script_uri_opt}=    Set Variable    --uri config/bgp-rib:application-rib/${BGP_APP_PEER_ID}/tables/bgp-types:ipv4-address-family/bgp-types:unicast-subsequent-address-family/
216     BuiltIn.Set_Suite_Variable    ${script_uri_opt}
217
218 Teardown_Everything
219     [Documentation]    Make sure Python tool was killed and tear down imported Resources.
220     SSHLibrary.Switch Connection    bgp_peer_console
221     KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
222     KillPythonTool.Search_And_Kill_Remote_Python    'bgp_app_peer\.py'
223     RequestsLibrary.Delete_All_Sessions
224     SSHLibrary.Close_All_Connections
225
226 Open_BGP_Peer_Console
227     [Documentation]    Create a session for BGP peer.
228     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    alias=bgp_peer_console
229     SSHKeywords.Flexible_Mininet_Login
230
231 Open_BGP_Aplicationp_Peer_Console
232     [Documentation]    Create a session for BGP peer.
233     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    alias=bgp_app_peer_console
234     SSHKeywords.Flexible_Mininet_Login