Add bgp suites with explicit shard leader location
[integration/test.git] / csit / suites / bgpcep / bgpclustering / PrefixcountKeywords.robot
1 *** Settings ***
2 Documentation     BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.
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 Library           SSHLibrary    timeout=10s
10 Library           RequestsLibrary
11 Variables         ${CURDIR}/../../../variables/Variables.py
12 Resource          ${CURDIR}/../../../libraries/BGPSpeaker.robot
13 Resource          ${CURDIR}/../../../libraries/BGPcliKeywords.robot
14 Resource          ${CURDIR}/../../../libraries/FailFast.robot
15 Resource          ${CURDIR}/../../../libraries/KillPythonTool.robot
16 Resource          ${CURDIR}/../../../libraries/PrefixCounting.robot
17 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
18 Resource          ${CURDIR}/../../../libraries/ClusterManagement.robot
19 Resource          ${CURDIR}/../../../libraries/ShardStability.robot
20 Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
21 Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
22 Resource          ${CURDIR}/../../../libraries/ClusterAdmin.robot
23
24 *** Variables ***
25 ${BGP_TOOL_LOG_LEVEL}    info
26 ${BGP_PEER_FOLDER}    ${CURDIR}/../../../variables/bgpclustering/bgp_peer_openconf    # used for configuration of bgp peer via openconfig
27 ${BGP_VARIABLES_FOLDER}    ${CURDIR}/../../../variables/bgpclustering/bgp_peer    # used for configuration of bgp peer vie netconf connector
28 ${BGP_VARIABLES_FOLDER_OP}    ${CURDIR}/../../../variables/bgpclustering/bgp_peer_operational
29 ${NETCONF_DEV_FOLDER}    ${CURDIR}/../../../variables/netconf/device/full-uri-device
30 ${NETCONF_MOUNT_FOLDER}    ${CURDIR}/../../../variables/netconf/device/full-uri-mount
31 ${CHECK_PERIOD}    10
32 ${HOLDTIME}       180
33 ${INSERT}         1
34 ${KARAF_LOG_LEVEL}    INFO
35 ${KARAF_BGPCEP_LOG_LEVEL}    ${KARAF_LOG_LEVEL}
36 ${KARAF_PROTOCOL_LOG_LEVEL}    ${KARAF_BGPCEP_LOG_LEVEL}
37 ${PREFILL}        0
38 ${REPETITIONS}    1
39 ${RESULTS_FILE_NAME}    bgp.csv
40 ${TEST_DURATION_MULTIPLIER}    1
41 ${UPDATE}         single
42 ${WITHDRAW}       0
43 ${INITIAL_RESTCONF_TIMEOUT}    30s
44 ${KARAF_HOME}     ${WORKSPACE}/${BUNDLEFOLDER}
45 ${SHARD_DEFAULT_CONFIG}    shard-default-config
46 ${SHARD_DEFAULT_OPERATIONAL}    shard-default-operational
47 ${CONFIG_SESSION}    config-session
48 ${CONFIGURATION_1}    operational-1
49 ${CONFIGURATION_2}    operational-2
50 ${CONFIGURATION_3}    operational-3
51 ${EXAMPLE_IPV4_TOPOLOGY}    example-ipv4-topology
52 ${DEVICE_NAME}    peer-controller-config
53 ${DEVICE_CHECK_TIMEOUT}    60s
54 ${RIB_INSTANCE}    example-bgp-rib
55 ${PROTOCOL_OPENCONFIG}    ${RIB_INSTANCE}
56 ${BGP_PEER_NAME}    example-bgp-peer
57 ${PEER_CHECK_URL}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
58 @{SHARD_MONITOR_LIST}    default:config    default:operational    topology:config    topology:operational    inventory:config    inventory:operational
59
60 *** Keywords ***
61 Setup_Everything
62     [Documentation]    Setup imported resources, SSH-login to tools system,
63     ...    create HTTP session, put Python tool to tools system.
64     SetupUtils.Setup_Utils_For_Setup_And_Teardown
65     RequestsLibrary.Create_Session    ${CONFIGURATION_1}    http://${ODL_SYSTEM_1_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}    timeout=40    max_retries=0
66     RequestsLibrary.Create_Session    ${CONFIGURATION_2}    http://${ODL_SYSTEM_2_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}    timeout=40    max_retries=0
67     RequestsLibrary.Create_Session    ${CONFIGURATION_3}    http://${ODL_SYSTEM_3_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}    timeout=40    max_retries=0
68     PrefixCounting.PC_Setup
69     SSHLibrary.Set_Default_Configuration    prompt=${TOOLS_SYSTEM_PROMPT}
70     SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}
71     Utils.Flexible_Mininet_Login
72     # TODO: Do not include slash in ${OPERATIONAL_TOPO_API}, having it typed here is more readable.
73     # TODO: Alternatively, create variable in Variables which starts with http.
74     # Both TODOs would probably need to update every suite relying on current Variables.
75     SSHLibrary.Put_File    ${CURDIR}/../../../../tools/fastbgp/play.py
76     SSHKeywords.Require_Python
77     SSHKeywords.Assure_Library_Ipaddr    target_dir=.
78     # Calculate the timeout value based on how many routes are going to be pushed
79     # TODO: Replace 35 with some formula from period and repetitions.
80     ${timeout} =    BuiltIn.Evaluate    ${TEST_DURATION_MULTIPLIER} * (${COUNT} * 6.0 / 10000 + 35)
81     Builtin.Set_Suite_Variable    ${bgp_filling_timeout}    ${timeout}
82     Builtin.Set_Suite_Variable    ${bgp_emptying_timeout}    ${bgp_filling_timeout*3.0/4}
83     KarafKeywords.Execute_Controller_Karaf_Command_On_Background    log:set ${KARAF_LOG_LEVEL}
84     ${init_shard_details} =    ShardStability.Shards_Stability_Get_Details    ${SHARD_MONITOR_LIST}
85     BuiltIn.Set_Suite_Variable    ${init_shard_details}
86
87 Teardown_Everything
88     [Documentation]    Make sure Python tool was killed and tear down imported Resources.
89     # TODO:    This keyword is not specific to prefix counting. Find a better place for it.
90     # Environment issue may have dropped the SSH connection, but we do not want Teardown to fail.
91     BuiltIn.Run_Keyword_And_Ignore_Error    KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
92     RequestsLibrary.Delete_All_Sessions
93     SSHLibrary.Close_All_Connections
94
95 Configure_Netconf_Device_And_Check_Mounted
96     [Arguments]    ${mapping}
97     [Documentation]    Configures netconf device
98     # TODO:    This keyword is not specific to prefix counting. Find a better place for it.
99     TemplatedRequests.Put_As_Xml_Templated    ${NETCONF_DEV_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
100     BuiltIn.Wait_Until_Keyword_Succeeds    10x    3s    TemplatedRequests.Get_As_Xml_Templated    ${NETCONF_MOUNT_FOLDER}    mapping=${mapping}    session=${CONFIG_SESSION}
101
102 Start_Bgp_Peer
103     [Arguments]    ${peerip}=${rib_owner_node_id}
104     [Documentation]    Starts bgp peer and verifies that the peer runs.
105     # TODO:    This keyword is not specific to prefix counting. Find a better place for it.
106     BGPSpeaker.Start_BGP_Speaker    --amount ${COUNT} --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${peerip} --peerport=${ODL_BGP_PORT} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}
107
108 Start_Bgp_Peer_And_Verify_Connected
109     [Arguments]    ${connection_retries}=${1}    ${peerip}=${rib_owner_node_id}
110     [Documentation]    Starts the peer and verifies its connection. The verification is done by checking the presence
111     ...    of the peer in the bgp rib.
112     # TODO:    This keyword is not specific to prefix counting. Find a better place for it.
113     : FOR    ${idx}    IN RANGE    ${connection_retries}
114     \    Start_Bgp_Peer    peerip=${peerip}
115     \    ${status}    ${value}=    BuiltIn.Run_Keyword_And_Ignore_Error    BuiltIn.Wait_Until_Keyword_Succeeds    3x    3s
116     \    ...    Verify_Bgp_Peer_Connection    ${CONFIG_SESSION}    ${TOOLS_SYSTEM_IP}    connected=${True}
117     \    BuiltIn.Run_Keyword_Unless    "${status}" == "PASS"    BGPSpeaker.Kill_BGP_Speaker
118     \    BuiltIn.Return_From_Keyword_If    "${status}" == "PASS"
119     BuiltIn.Fail    Unable to connect bgp peer to ODL
120
121 Verify_Bgp_Peer_Connection
122     [Arguments]    ${session}    ${peer_ip}    ${connected}=${True}
123     [Documentation]    Checks peer presence in operational datastore
124     # TODO:    This keyword is not specific to prefix counting. Find a better place for it.
125     ${exp_status_code}=    BuiltIn.Set_Variable_If    ${connected}    ${200}    ${404}
126     ${rsp}=    RequestsLibrary.Get Request    ${session}    ${PEER_CHECK_URL}${peer_ip}
127     BuiltIn.Log    ${rsp.content}
128     BuiltIn.Should_Be_Equal_As_Numbers    ${exp_status_code}    ${rsp.status_code}
129
130 Set_Shard_Leaders_Location_And_Verify
131     [Arguments]    ${requested_shard_localtion_idx}
132     [Documentation]    Move default/topology config/operational shard location to local or remote node as requested
133     ...    towards the given rib singleton instance location.
134     ShardStability.Set_Shard_Location    ${requested_shard_localtion_idx}
135     BuiltIn.Wait_Until_Keyword_Succeeds    30s    5s    ShardStability.Verify_Shard_Leader_Located_As_Expected    ${requested_shard_localtion_idx}
136     ${init_shard_details} =    ShardStability.Shards_Stability_Get_Details    ${SHARD_MONITOR_LIST}
137     BuiltIn.Set_Suite_Variable    ${init_shard_details}