updating bgp clustering test suite due to present bgpcep singleton impl
[integration/test.git] / csit / suites / bgpcep / bgpclustering / 010_singlepeer_prefixcount_1route.robot
1 *** Settings ***
2 Documentation     BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.
3 ...
4 ...               Copyright (c) 2015-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 uses play.py as single iBGP peer which talks to
11 ...               single controller in three node cluster configuration.
12 ...               Test suite checks changes of the the example-ipv4-topology-<dst_id> on all nodes.
13 ...               RIB is not examined.
14 ...               <dst-id> is recognized during the suite run, should be the Leader of default
15 ...               operational Shard, otherwise the scenario would fail due to
16 ...               https://bugs.opendaylight.org/show_bug.cgi?id=5536
17 Suite Setup       Setup_Everything
18 Suite Teardown    Teardown_Everything
19 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
20 Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
21 Library           SSHLibrary    timeout=10s
22 Library           RequestsLibrary
23 Variables         ${CURDIR}/../../../variables/Variables.py
24 Resource          ${CURDIR}/../../../libraries/BGPSpeaker.robot
25 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
26 Resource          ${CURDIR}/../../../libraries/FailFast.robot
27 Resource          ${CURDIR}/../../../libraries/KillPythonTool.robot
28 Resource          ${CURDIR}/../../../libraries/PrefixCounting.robot
29 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
30 Resource          ${CURDIR}/../../../libraries/ClusterManagement.robot
31 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
32 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
33
34 *** Variables ***
35 ${BGP_TOOL_LOG_LEVEL}    info
36 ${BGP_VARIABLES_FOLDER}    ${CURDIR}/../../../variables/bgpclustering/bgp_peer
37 ${BGP_VARIABLES_FOLDER_OP}    ${CURDIR}/../../../variables/bgpclustering/bgp_peer_operational
38 ${NETCONF_DEV_FOLDER}    ${CURDIR}/../../../variables/netconf/device/full-uri-device
39 ${NETCONF_MOUNT_FOLDER}    ${CURDIR}/../../../variables/netconf/device/full-uri-mount
40 ${CHECK_PERIOD}    10
41 ${COUNT}          1
42 ${HOLDTIME}       180
43 ${INSERT}         1
44 ${KARAF_LOG_LEVEL}    INFO
45 ${KARAF_BGPCEP_LOG_LEVEL}    ${KARAF_LOG_LEVEL}
46 ${KARAF_PROTOCOL_LOG_LEVEL}    ${KARAF_BGPCEP_LOG_LEVEL}
47 ${PREFILL}        0
48 ${REPETITIONS}    1
49 ${RESULTS_FILE_NAME}    bgp.csv
50 ${TEST_DURATION_MULTIPLIER}    1
51 ${UPDATE}         single
52 ${WITHDRAW}       0
53 ${INITIAL_RESTCONF_TIMEOUT}    30s
54 ${KARAF_HOME}     ${WORKSPACE}/${BUNDLEFOLDER}
55 ${SHARD_DEFAULT_CONFIG}    shard-default-config
56 ${SHARD_DEFAULT_OPERATIONAL}    shard-default-operational
57 ${CONFIG_SESSION}    config-session
58 ${CONFIGURATION_1}    operational-1
59 ${CONFIGURATION_2}    operational-2
60 ${CONFIGURATION_3}    operational-3
61 ${EXAMPLE_IPV4_TOPOLOGY}    example-ipv4-topology
62 ${DEVICE_NAME}    peer-controller-config
63 ${DEVICE_CHECK_TIMEOUT}    60s
64 ${RIB_INSTANCE}    example-bgp-rib
65 ${BGP_PEER_NAME}    example-bgp-peer
66
67 *** Test Cases ***
68 Get Example Bgp Rib Owner
69     [Documentation]    Find an odl node which is able to accept incomming connection. To this node netconf connector should be configured.
70     ${rib_owner}    ${rib_candidates}=    ClusterManagement.Get_Owner_And_Successors_For_device    example-bgp-rib    org.opendaylight.mdsal.ServiceEntityType    1
71     BuiltIn.Set Suite variable    ${rib_owner}    ${rib_owner}
72     BuiltIn.Set Suite variable    ${rib_owner_node_id}    ${ODL_SYSTEM_${rib_owner}_IP}
73     RequestsLibrary.Create_Session    ${CONFIG_SESSION}    http://${ODL_SYSTEM_${rib_owner}_IP}:${RESTCONFPORT}    auth=${AUTH}
74
75 Check_For_Empty_Ipv4_Topology_Before_Talking_1
76     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
77     [Tags]    critical
78     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
79     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
80
81 Check_For_Empty_Ipv4_Topology_Before_Talking_2
82     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
83     [Tags]    critical
84     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
85     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
86
87 Check_For_Empty_Ipv4_Topology_Before_Talking_3
88     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
89     [Tags]    critical
90     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
91     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
92
93 Configure_Netconf_Device
94     [Documentation]    Configures and verifies netconf device configuration. If configuration is not successful, it de-configures the device before the next attempt.
95     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    DEVICE_PORT=1830    DEVICE_IP=${rib_owner_node_id}    DEVICE_USER=admin    DEVICE_PASSWORD=admin
96     # After the netconf device is configured, odl starts downloading schemas. If the downloading will not finish within akka timeout, more tries are needed, 3 is based on a user experience.
97     : FOR    ${index}    IN RANGE    0    3
98     \    ${status}    ${value}=    Run Keyword And Ignore Error    Configure Netconf Device And Check Mounted    ${mapping}
99     \    Exit For Loop If    '${status}' == 'PASS'
100     \    Run Keyword Unless    '${status}' == 'PASS'    TemplatedRequests.Delete_Templated    ${NETCONF_DEV_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
101     Run Keyword Unless    '${status}' == 'PASS'    Fail
102
103 Reconfigure_ODL_To_Accept_Connection
104     [Documentation]    Configure BGP peer module with initiate-connection set to false.
105     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
106     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
107     ...    INITIATE=false    BGP_RIB=${RIB_INSTANCE}
108     TemplatedRequests.Put_As_Json_Templated    ${BGP_VARIABLES_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
109     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
110
111 Start_Talking_BGP_Speaker
112     [Documentation]    Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.
113     BuiltIn.Wait_Until_Keyword_Succeeds    3x    1s    Start Bgp Peer
114
115 Wait_For_Stable_Talking_Ipv4_Topology_1
116     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 1.
117     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${CONFIGURATION_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
118
119 Wait_For_Stable_Talking_Ipv4_Topology_2
120     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 2.
121     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${CONFIGURATION_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
122
123 Wait_For_Stable_Talking_Ipv4_Topology_3
124     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 3.
125     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${CONFIGURATION_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
126
127 Check_Talking_Ipv4_Topology_Count_1
128     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 1.
129     [Tags]    critical
130     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
131     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${CONFIGURATION_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
132
133 Check_Talking_Ipv4_Topology_Count_2
134     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 2.
135     [Tags]    critical
136     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
137     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${CONFIGURATION_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
138
139 Check_Talking_Ipv4_Topology_Count_3
140     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 3.
141     [Tags]    critical
142     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
143     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${CONFIGURATION_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
144
145 Kill_Talking_BGP_Speaker
146     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
147     [Tags]    critical
148     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
149     BGPSpeaker.Kill_BGP_Speaker
150     FailFast.Do_Not_Fail_Fast_From_Now_On
151
152 Wait_For_Stable_Ipv4_Topology_After_Listening_1
153     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 1.
154     [Tags]    critical
155     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${CONFIGURATION_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
156
157 Wait_For_Stable_Ipv4_Topology_After_Listening_2
158     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 2.
159     [Tags]    critical
160     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${CONFIGURATION_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
161
162 Wait_For_Stable_Ipv4_Topology_After_Listening_3
163     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 3.
164     [Tags]    critical
165     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${CONFIGURATION_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
166
167 Check_For_Empty_Ipv4_Topology_After_Listening_1
168     [Documentation]    Example-ipv4-topology should be empty now as seen from node 1.
169     [Tags]    critical
170     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
171     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
172
173 Check_For_Empty_Ipv4_Topology_After_Listening_2
174     [Documentation]    Example-ipv4-topology should be empty now as seen from node 2.
175     [Tags]    critical
176     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
177     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
178
179 Check_For_Empty_Ipv4_Topology_After_Listening_3
180     [Documentation]    Example-ipv4-topology should be empty now as seen from node 3.
181     [Tags]    critical
182     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
183     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${CONFIGURATION_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
184
185 Delete_Bgp_Peer_Configuration
186     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
187     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
188     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
189     ...    INITIATE=false    BGP_RIB=${RIB_INSTANCE}
190     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
191
192 Delete_Netconf_Device_Configuration
193     [Documentation]    Revert the netconf configuration to the original stat
194     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
195     &{mapping}    Create Dictionary    DEVICE_NAME=${DEVICE_NAME}    DEVICE_PORT=1830    DEVICE_IP=${rib_owner_node_id}    DEVICE_USER=admin    DEVICE_PASSWORD=admin
196     TemplatedRequests.Delete_Templated    ${NETCONF_DEV_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
197
198 *** Keywords ***
199 Setup_Everything
200     [Documentation]    Setup imported resources, SSH-login to tools system,
201     ...    create HTTP session, put Python tool to tools system.
202     SetupUtils.Setup_Utils_For_Setup_And_Teardown
203     ClusterManagement.ClusterManagement_Setup
204     RequestsLibrary.Create_Session    ${CONFIGURATION_1}    http://${ODL_SYSTEM_1_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}
205     RequestsLibrary.Create_Session    ${CONFIGURATION_2}    http://${ODL_SYSTEM_2_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}
206     RequestsLibrary.Create_Session    ${CONFIGURATION_3}    http://${ODL_SYSTEM_3_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}
207     PrefixCounting.PC_Setup
208     SSHLibrary.Set_Default_Configuration    prompt=${TOOLS_SYSTEM_PROMPT}
209     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}
210     Utils.Flexible_Mininet_Login
211     # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
212     # TODO: Alternatively, create variable in Variables which starts with http.
213     # Both TODOs would probably need to update every suite relying on current Variables.
214     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
215     SSHKeywords.Require_Python
216     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
217     # Calculate the timeout value based on how many routes are going to be pushed
218     # TODO: Replace 35 with some formula from period and repetitions.
219     ${timeout} =    BuiltIn.Evaluate    ${TEST_DURATION_MULTIPLIER} * (${COUNT} * 6.0 / 10000 + 35)
220     Builtin.Set_Suite_Variable    ${bgp_filling_timeout}    ${timeout}
221     Builtin.Set_Suite_Variable    ${bgp_emptying_timeout}    ${bgp_filling_timeout*3.0/4}
222     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${KARAF_LOG_LEVEL}
223
224 Teardown_Everything
225     [Documentation]    Make sure Python tool was killed and tear down imported Resources.
226     # Environment issue may have dropped the SSH connection, but we do not want Teardown to fail.
227     BuiltIn.Run_Keyword_And_Ignore_Error    KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
228     RequestsLibrary.Delete_All_Sessions
229     SSHLibrary.Close_All_Connections
230
231 Store_File_To_Workspace
232     [Arguments]    ${src_file_name}    ${dst_file_name}
233     [Documentation]    Store the provided file from the SSH client to workspace.
234     ${files}=    SSHLibrary.List Files In Directory    .
235     ${output_log}=    SSHLibrary.Execute_Command    cat ${src_file_name}
236     BuiltIn.Log    ${output_log}
237     Create File    ${dst_file_name}    ${output_log}
238
239 Configure Netconf Device And Check Mounted
240     [Arguments]    ${mapping}
241     TemplatedRequests.Put_As_Xml_Templated    ${NETCONF_DEV_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
242     BuiltIn.Wait Until Keyword Succeeds    10x    3s    TemplatedRequests.Get_As_Xml_Templated    ${NETCONF_MOUNT_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
243
244 Start Bgp Peer
245     [Documentation]    Starts bgp peer and verifies that the peer runs.
246     BGPSpeaker.Start_BGP_Speaker    --amount ${COUNT} --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${rib_owner_node_id} --peerport=${ODL_BGP_PORT} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}
247     BGPcliKeywords.Read_And_Fail_If_Prompt_Is_Seen