6fb8573f8b98149bb2838baa7f01c520c7133ec2
[integration/test.git] / csit / suites / bgpcep / bgpclustering / singlepeer_pc_shm_300kroutes_shards_local.robot
1 *** Settings ***
2 Documentation     BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.
3 ...
4 ...               Copyright (c) 2015-2017 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 on all nodes.
13 ...               RIB is not examined.
14 ...
15 ...               singlepeer_pc_shm_300kroutes_shards_local:
16 ...               pc - prefix counting
17 ...               shm - shard monitoring (during the process of prefix advertizing)
18 ...               shards_local - default and topology shards are on the same node as rib owner
19 ...               singleton instance
20 Suite Setup       PrefixcountKeywords.Setup_Everything
21 Suite Teardown    PrefixcountKeywords.Teardown_Everything
22 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
23 Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
24 Library           SSHLibrary    timeout=10s
25 Library           RequestsLibrary
26 Resource          ${CURDIR}/../../../variables/Variables.robot
27 Resource          ${CURDIR}/../../../libraries/BGPSpeaker.robot
28 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
29 Resource          ${CURDIR}/../../../libraries/FailFast.robot
30 Resource          ${CURDIR}/../../../libraries/KillPythonTool.robot
31 Resource          ${CURDIR}/../../../libraries/PrefixCounting.robot
32 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
33 Resource          ${CURDIR}/../../../libraries/ClusterManagement.robot
34 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
35 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
36 Resource          ${CURDIR}/../../../libraries/CompareStream.robot
37 Resource          ${CURDIR}/PrefixcountKeywords.robot
38
39 *** Variables ***
40 ${COUNT}          300000
41
42 *** Test Cases ***
43 Get_Example_Bgp_Rib_Owner
44     [Documentation]    Find an odl node which is able to accept incomming connection. It is a node, which is the owner of bgp rib, as it is a singleton service.
45     ...    This node should be used for bgp peer to connect to.
46     ${rib_owner}    ${rib_candidates}=    ClusterManagement.Get_Owner_And_Successors_For_device    example-bgp-rib    org.opendaylight.mdsal.ServiceEntityType    1
47     BuiltIn.Set_Suite_Variable    ${rib_owner}    ${rib_owner}
48     BuiltIn.Set_Suite_Variable    ${rib_candidates}    ${rib_candidates}
49     BuiltIn.Set_Suite_Variable    ${rib_owner_node_id}    ${ODL_SYSTEM_${rib_owner}_IP}
50     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    ${rib_owner}
51     BuiltIn.Set_Suite_Variable    ${config_session}    ${session}
52
53 Move_Shard_Leaders_If_Needed
54     [Documentation]    Set shard leaders to expected location
55     PrefixcountKeywords.Set_Shard_Leaders_Location_And_Verify    ${rib_owner}
56
57 Check_For_Empty_Ipv4_Topology_Before_Talking_1
58     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
59     [Tags]    critical
60     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
61     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
62
63 Check_For_Empty_Ipv4_Topology_Before_Talking_2
64     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
65     [Tags]    critical
66     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
67     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
68
69 Check_For_Empty_Ipv4_Topology_Before_Talking_3
70     [Documentation]    Wait for ${EXAMPLE_IPV4_TOPOLOGY} to come up and empty. Give large timeout for case when BGP boots slower than restconf.
71     [Tags]    critical
72     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
73     BuiltIn.Wait_Until_Keyword_Succeeds    ${INITIAL_RESTCONF_TIMEOUT}    1s    PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
74
75 Reconfigure_ODL_To_Accept_Connection
76     [Documentation]    Configure BGP peer module with initiate-connection set to false.
77     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
78     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
79     ...    INITIATE=false    BGP_RIB=${RIB_INSTANCE}    PASSIVE_MODE=true    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
80     TemplatedRequests.Put_As_Json_Templated    ${BGP_VARIABLES_FOLDER}    mapping=${mapping}    session=${config_session}
81     [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
82
83 Start_Talking_BGP_Speaker
84     [Documentation]    Start Python speaker to connect to ODL.
85     PrefixcountKeywords.Start_Bgp_Peer_And_Verify_Connected    connection_retries=${3}
86
87 Wait_For_Stable_Talking_Ipv4_Topology_1
88     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 1.
89     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${operational_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
90     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
91
92 Wait_For_Stable_Talking_Ipv4_Topology_2
93     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 2.
94     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${operational_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
95     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
96
97 Wait_For_Stable_Talking_Ipv4_Topology_3
98     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable. This is done by checking stability of prefix count as seen from node 3.
99     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=0    session=${operational_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
100     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
101
102 Check_Talking_Ipv4_Topology_Count_1
103     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 1.
104     [Tags]    critical
105     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
106     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${operational_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
107
108 Check_Talking_Ipv4_Topology_Count_2
109     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 2.
110     [Tags]    critical
111     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
112     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${operational_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
113
114 Check_Talking_Ipv4_Topology_Count_3
115     [Documentation]    Count the routes in ${EXAMPLE_IPV4_TOPOLOGY} and fail if the count is not correct as seen from node 3.
116     [Tags]    critical
117     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
118     PrefixCounting.Check_Ipv4_Topology_Count    ${COUNT}    session=${operational_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
119
120 Kill_Talking_BGP_Speaker
121     [Documentation]    Abort the Python speaker. Also, attempt to stop failing fast.
122     [Tags]    critical
123     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
124     BGPSpeaker.Kill_BGP_Speaker
125     FailFast.Do_Not_Fail_Fast_From_Now_On
126
127 Wait_For_Stable_Ipv4_Topology_After_Listening_1
128     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 1.
129     [Tags]    critical
130     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${operational_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
131     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
132
133 Wait_For_Stable_Ipv4_Topology_After_Listening_2
134     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 2.
135     [Tags]    critical
136     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${operational_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
137     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
138
139 Wait_For_Stable_Ipv4_Topology_After_Listening_3
140     [Documentation]    Wait until ${EXAMPLE_IPV4_TOPOLOGY} becomes stable again as seen from node 3.
141     [Tags]    critical
142     PrefixCounting.Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable    timeout=${bgp_filling_timeout}    period=${CHECK_PERIOD}    repetitions=${REPETITIONS}    excluded_count=${COUNT}    session=${operational_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
143     ...    shards_list=${SHARD_MONITOR_LIST}    shards_details=${init_shard_details}
144
145 Check_For_Empty_Ipv4_Topology_After_Listening_1
146     [Documentation]    Example-ipv4-topology should be empty now as seen from node 1.
147     [Tags]    critical
148     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
149     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_1}    topology=${EXAMPLE_IPV4_TOPOLOGY}
150
151 Check_For_Empty_Ipv4_Topology_After_Listening_2
152     [Documentation]    Example-ipv4-topology should be empty now as seen from node 2.
153     [Tags]    critical
154     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
155     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_2}    topology=${EXAMPLE_IPV4_TOPOLOGY}
156
157 Check_For_Empty_Ipv4_Topology_After_Listening_3
158     [Documentation]    Example-ipv4-topology should be empty now as seen from node 3.
159     [Tags]    critical
160     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
161     PrefixCounting.Check_Ipv4_Topology_Is_Empty    session=${operational_3}    topology=${EXAMPLE_IPV4_TOPOLOGY}
162
163 Delete_Bgp_Peer_Configuration
164     [Documentation]    Revert the BGP configuration to the original state: without any configured peers.
165     [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
166     &{mapping}    BuiltIn.Create_Dictionary    DEVICE_NAME=${DEVICE_NAME}    BGP_NAME=${BGP_PEER_NAME}    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}
167     ...    INITIATE=false    BGP_RIB=${RIB_INSTANCE}    BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}
168     TemplatedRequests.Delete_Templated    ${BGP_VARIABLES_FOLDER}    mapping=${mapping}    session=${config_session}