375b499a2177862bd256244037ef1fc3524ee5d7
[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 ...
24 ...               Reported bugs:
25 ...               Bug 4689 - Not a reasonable duration of 1M prefix introduction from BGP application peer via restconf
26 ...               Bug 4791 - BGPSessionImpl: Failed to send message Update logged even all UPDATE mesages received by iBGP peer
27 Suite Setup       Setup_Everything
28 Suite Teardown    Teardown_Everything
29 Test Setup        Setup_Test_With_Logging_And_Without_Fast_Failing
30 Test Teardown     FailFast.Start_Failing_Fast_If_This_Failed
31 Force Tags        critical
32 Library           SSHLibrary    timeout=10s
33 Library           RequestsLibrary
34 Variables         ${CURDIR}/../../../variables/Variables.py
35 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
36 Resource          ${CURDIR}/../../../libraries/BGPSpeaker.robot
37 Resource          ${CURDIR}/../../../libraries/ConfigViaRestconf.robot
38 Resource          ${CURDIR}/../../../libraries/FailFast.robot
39 Resource          ${CURDIR}/../../../libraries/KillPythonTool.robot
40 Resource          ${CURDIR}/../../../libraries/PrefixCounting.robot
41 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
42
43 *** Variables ***
44 ${BGP_VARIABLES_FOLDER}    ${CURDIR}/../../../variables/bgpuser/
45 ${HOLDTIME}       180
46 ${HOLDTIME_APP_PEER_PREFIX_COUNT}    ${HOLDTIME}
47 ${COUNT}          200000
48 ${PREFILL}        100000
49 ${COUNT_APP_PEER_PREFIX_COUNT}    ${COUNT}
50 ${CHECK_PERIOD}    1
51 ${CHECK_PERIOD_APP_PEER_PREFIX_COUNT}    ${CHECK_PERIOD}
52 ${REPETITIONS_APP_PEER_PREFIX_COUNT}    1
53 ${BGP_PEER_LOG_LEVEL}    info
54 ${BGP_APP_PEER_LOG_LEVEL}    info
55 ${CONTROLLER_LOG_LEVEL}    INFO
56 ${CONTROLLER_BGP_LOG_LEVEL}    DEFAULT
57 ${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}
58 ${BGP_PEER_OPTIONS}    &>bgp_peer.log
59 ${BGP_APP_PEER_ID}    10.0.0.10
60 ${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}
61 ${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}
62 ${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}
63 ${BGP_APP_PEER_GET_COMMAND}    python bgp_app_peer.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} --command get --${BGP_APP_PEER_LOG_LEVEL}
64 ${BGP_APP_PEER_OPTIONS}    &>bgp_app_peer.log
65 ${TEST_DURATION_MULTIPLIER}    30
66 ${last_prefix_count}    -1
67
68 *** Test Cases ***
69 Check_For_Empty_Ipv4_Topology_Before_Starting
70     [Documentation]    Wait for example-ipv4-topology to come up and empty. Give large timeout for case when BGP boots slower than restconf.
71     BuiltIn.Wait_Until_Keyword_Succeeds    120s    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty
72
73 Reconfigure_ODL_To_Accept_Connection
74     [Documentation]    Configure BGP peer module with initiate-connection set to false.
75     ${template_as_string}=    BuiltIn.Set_Variable    {'NAME': 'example-bgp-peer', 'IP': '${TOOLS_SYSTEM_IP}', 'HOLDTIME': '${HOLDTIME_APP_PEER_PREFIX_COUNT}', 'PEER_PORT': '${BGP_TOOL_PORT}', 'INITIATE': 'false'}
76     ConfigViaRestconf.Put_Xml_Template_Folder_Config_Via_Restconf    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    ${template_as_string}
77
78 Reconfigure_ODL_To_Accept_BGP_Application_Peer
79     [Documentation]    Configure BGP application peer module.
80     ${template_as_string}=    BuiltIn.Set_Variable    {'NAME': 'example-bgp-peer-app', 'IP': '${BGP_APP_PEER_ID}'}
81     ConfigViaRestconf.Put_Xml_Template_Folder_Config_Via_Restconf    ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer    ${template_as_string}
82
83 Connect_BGP_Peer
84     [Documentation]    Start BGP peer tool
85     SSHLibrary.Switch Connection    bgp_peer_console
86     Start_Console_Tool    ${BGP_PEER_COMMAND}    ${BGP_PEER_OPTIONS}
87     Read_And_Fail_If_Prompt_Is_Seen
88
89 BGP_Application_Peer_Prefill_Routes
90     [Documentation]    Start BGP application peer tool and prefill routes.
91     SSHLibrary.Switch Connection    bgp_app_peer_console
92     Start_Console_Tool    ${BGP_APP_PEER_INITIAL_COMMAND}    ${BGP_APP_PEER_OPTIONS}
93     Wait_Until_Console_Tool_Finish    ${bgp_filling_timeout}
94     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_prefill.log
95
96 Wait_For_Ipv4_Topology_Is_Prefilled
97     [Documentation]    Wait until example-ipv4-topology reaches the target prfix count.
98     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    10s    PrefixCounting.Check_Ipv4_Topology_Count    ${PREFILL}
99     [Teardown]    Report_Failure_Due_To_Bug    4689
100
101 Check_Bgp_Peer_Updates_For_Prefilled_Routes
102     [Documentation]    Count the routes introduced by updates.
103     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
104     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    1s    Check_File_For_Word_Count    bgp_peer.log    total_received_nlri_prefix_counter: ${PREFILL}    2
105     [Teardown]    Report_Failure_Due_To_Bug    4689
106
107 BGP_Application_Peer_Introduce_Single_Routes
108     [Documentation]    Start BGP application peer tool and introduce routes.
109     SSHLibrary.Switch Connection    bgp_app_peer_console
110     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}    ${BGP_APP_PEER_OPTIONS}
111     Wait_Until_Console_Tool_Finish    ${bgp_filling_timeout}
112     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_singles.log
113
114 Wait_For_Ipv4_Topology_Is_Filled
115     [Documentation]    Wait until example-ipv4-topology reaches the target prfix count.
116     BuiltIn.Wait Until Keyword Succeeds    ${bgp_filling_timeout}    10s    PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT_APP_PEER_PREFIX_COUNT}
117     [Teardown]    Report_Failure_Due_To_Bug    4689
118
119 Check_Bgp_Peer_Updates_For_All_Routes
120     [Documentation]    Count the routes introduced by updates.
121     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
122     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
123     [Teardown]    Report_Failure_Due_To_Bug    4689
124
125 Disconnect_BGP_Peer
126     [Documentation]    Stop BGP peer tool
127     SSHLibrary.Switch Connection    bgp_peer_console
128     Stop_Console_Tool
129     Store_File_To_Workspace    bgp_peer.log    bgp_peer_reconnect.log
130
131 Reconnect_BGP_Peer
132     [Documentation]    Start BGP peer tool
133     SSHLibrary.Switch Connection    bgp_peer_console
134     Start_Console_Tool    ${BGP_PEER_COMMAND}    ${BGP_PEER_OPTIONS}
135     Read_And_Fail_If_Prompt_Is_Seen
136
137 Check_Bgp_Peer_Updates_For_Reintroduced_Routes
138     [Documentation]    Count the routes introduced by updates.
139     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
140
141 BGP_Application_Peer_Delete_All_Routes
142     [Documentation]    Start BGP application peer tool and delete all routes.
143     SSHLibrary.Switch Connection    bgp_app_peer_console
144     Start_Console_Tool    ${BGP_APP_PEER_DELETE_ALL_COMMAND}    ${BGP_APP_PEER_OPTIONS}
145     Wait_Until_Console_Tool_Finish    ${bgp_emptying_timeout}
146     Store_File_To_Workspace    bgp_app_peer.log    bgp_app_peer_delete_all.log
147
148 Wait_For_Stable_Topology_After_Deletion
149     [Documentation]    Wait until example-ipv4-topology becomes stable again.
150     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}
151
152 Check_For_Empty_Ipv4_Topology_After_Deleting
153     [Documentation]    Example-ipv4-topology should be empty now.
154     PrefixCounting.Check_Ipv4_Topology_Is_Empty
155
156 Check_Bgp_Peer_Updates_For_Prefix_Withdrawals
157     [Documentation]    Count the routes withdrawn by updates.
158     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
159     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
160     [Teardown]    Report_Failure_Due_To_Bug    4689
161
162 Stop_BGP_Peer
163     [Documentation]    Stop BGP peer tool
164     SSHLibrary.Switch Connection    bgp_peer_console
165     Stop_Console_Tool
166     Store_File_To_Workspace    bgp_peer.log    bgp_peer_reconnect.log
167
168 Delete_Bgp_Peer_Configuration
169     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
170     ${template_as_string}=    BuiltIn.Set_Variable    {'NAME': 'example-bgp-peer'}
171     ConfigViaRestconf.Delete_Xml_Template_Folder_Config_Via_Restconf    ${BGP_VARIABLES_FOLDER}${/}bgp_peer    ${template_as_string}
172
173 Delete_Bgp_Application_Peer_Configuration
174     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
175     ${template_as_string}=    BuiltIn.Set_Variable    {'NAME': 'example-bgp-peer-app'}
176     ConfigViaRestconf.Delete_Xml_Template_Folder_Config_Via_Restconf    ${BGP_VARIABLES_FOLDER}${/}bgp_application_peer    ${template_as_string}
177
178 Check_Controller_Logs
179     [Documentation]    Check controller's log for errors
180     Check Karaf Log File Does Not Have Messages    ${ODL_SYSTEM_IP}    Failed to send message Update
181     [Teardown]    Report_Failure_Due_To_Bug    4791
182
183 *** Keywords ***
184 Setup_Everything
185     [Documentation]    Setup imported resources, SSH-login to tools system,
186     ...    create HTTP session, put Python tool to tools system.
187     SetupUtils.Setup_Utils_For_Setup_And_Teardown
188     ConfigViaRestconf.Setup_Config_Via_Restconf
189     PrefixCounting.PC_Setup
190     SSHLibrary.Set_Default_Configuration    prompt=${TOOLS_SYSTEM_PROMPT}
191     RequestsLibrary.Create_Session    operational    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}
192     # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
193     # TODO: Alternatively, create variable in Variables which starts with http.
194     # Both TODOs would probably need to update every suite relying on current Variables.
195     Open_BGP_Peer_Console
196     Open_BGP_Aplicationp_Peer_Console
197     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
198     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/bgp_app_peer.py
199     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/ipv4-routes-template.xml
200     # Calculate the timeout value based on how many routes are going to be pushed.
201     # The offset (20) is set for keeping reasonable timeout for low COUNT values.
202     ${timeout} =    BuiltIn.Evaluate    ${TEST_DURATION_MULTIPLIER} * ${COUNT_APP_PEER_PREFIX_COUNT} * 3.0 / 10000 + 20
203     Builtin.Set_Suite_Variable    ${bgp_filling_timeout}    ${timeout}
204     Builtin.Set_Suite_Variable    ${bgp_emptying_timeout}    ${bgp_filling_timeout*3.0/4}
205     ${result} =    BuiltIn.Evaluate    str(int(${COUNT_APP_PEER_PREFIX_COUNT}) - int(${PREFILL}))
206     Builtin.Set_Suite_Variable    ${remaining_prefixes}    ${result}
207     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${CONTROLLER_LOG_LEVEL}
208     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${CONTROLLER_BGP_LOG_LEVEL} org.opendaylight.bgpcep
209     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${CONTROLLER_BGP_LOG_LEVEL} org.opendaylight.protocol
210
211 Teardown_Everything
212     [Documentation]    Make sure Python tool was killed and tear down imported Resources.
213     SSHLibrary.Switch Connection    bgp_peer_console
214     KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
215     KillPythonTool.Search_And_Kill_Remote_Python    'bgp_app_peer\.py'
216     ConfigViaRestconf.Teardown_Config_Via_Restconf
217     RequestsLibrary.Delete_All_Sessions
218     SSHLibrary.Close_All_Connections
219
220 Open_BGP_Peer_Console
221     [Documentation]    Create a session for BGP peer.
222     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    alias=bgp_peer_console
223     Utils.Flexible_Mininet_Login
224
225 Open_BGP_Aplicationp_Peer_Console
226     [Documentation]    Create a session for BGP peer.
227     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    alias=bgp_app_peer_console
228     Utils.Flexible_Mininet_Login