new bgpclustering ha scenario with node isolation 63/45963/4
authorPeter Gubka <pgubka@cisco.com>
Wed, 21 Sep 2016 09:46:52 +0000 (11:46 +0200)
committerVratko Polák <vrpolak@cisco.com>
Mon, 26 Sep 2016 17:42:30 +0000 (17:42 +0000)
Change-Id: I637493b266a81b5c81e6d2fbe7387831908594f8
Signed-off-by: Peter Gubka <pgubka@cisco.com>
csit/suites/bgpcep/bgpclustering/050_bgp_ha_karaf_isolation.robot [new file with mode: 0644]
csit/testplans/bgpcep-bgpclustering-ha.txt

diff --git a/csit/suites/bgpcep/bgpclustering/050_bgp_ha_karaf_isolation.robot b/csit/suites/bgpcep/bgpclustering/050_bgp_ha_karaf_isolation.robot
new file mode 100644 (file)
index 0000000..718b81a
--- /dev/null
@@ -0,0 +1,170 @@
+*** Settings ***
+Documentation     BGP functional HA testing with one exabgp peer.
+...
+...               Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+...
+...               This program and the accompanying materials are made available under the
+...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
+...               and is available at http://www.eclipse.org/legal/epl-v10.html
+...
+...               This suite uses exabgp. It is configured to have 3 peers (all 3 nodes of odl).
+...               Bgp implemented with singleton accepts only one incomming conection. Exabgp
+...               logs will show that one peer will be connected and two will fail.
+...               After killing karaf which owned connection new owner should be elected and
+...               this new owner should accept incomming bgp connection.
+Suite Setup       Setup_Everything
+Suite Teardown    Teardown_Everything
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Library           SSHLibrary    timeout=10s
+Library           RequestsLibrary
+Variables         ${CURDIR}/../../../variables/Variables.py
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+Resource          ${CURDIR}/../../../libraries/ClusterManagement.robot
+Resource          ${CURDIR}/../../../libraries/SSHKeywords.robot
+Resource          ${CURDIR}/../../../libraries/TemplatedRequests.robot
+
+*** Variables ***
+${BGP_VAR_FOLDER}    ${CURDIR}/../../../variables/bgpclustering
+${BGP_PEER_FOLDER}    ${CURDIR}/../../../variables/bgpfunctional/openconfig_bgp_peer
+${DEFAUTL_EXA_CFG}    exa.cfg
+${EXA_CMD}        env exabgp.tcp.port=1790 exabgp
+${PEER_CHECK_URL}    /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F
+${DEVICE_NAME}    peer-controller-config
+${HOLDTIME}       180
+${RIB_INSTANCE}    example-bgp-rib
+
+*** Test Cases ***
+Get Example Bgp Rib Owner
+    [Documentation]    Find an odl node which is able to accept incomming connection. To this node netconf connector should be configured.
+    ${rib_owner}    ${rib_candidates}=    ClusterManagement.Get_Owner_And_Successors_For_device    example-bgp-rib    org.opendaylight.mdsal.ServiceEntityType    1
+    BuiltIn.Set Suite variable    ${rib_owner}    ${rib_owner}
+    BuiltIn.Set Suite variable    ${rib_owner_node_id}    ${ODL_SYSTEM_${rib_owner}_IP}
+    BuiltIn.Set Suite variable    ${rib_candidates}    ${rib_candidates}
+    ${session}=    Resolve_Http_Session_For_Member    member_index=${rib_owner}
+    BuiltIn.Set_Suite_Variable    ${living_session}    ${session}
+    BuiltIn.Set_Suite_Variable    ${living_node}    ${rib_owner}
+
+Reconfigure_ODL_To_Accept_Connection
+    [Documentation]    Configure BGP peer module with initiate-connection set to false.
+    [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+    &{mapping}    Create Dictionary    IP=${TOOLS_SYSTEM_IP}    HOLDTIME=${HOLDTIME}    PEER_PORT=${BGP_TOOL_PORT}    PASSIVE_MODE=true    BGP_RIB=${RIB_INSTANCE}
+    TemplatedRequests.Post_As_Xml_Templated    ${BGP_PEER_FOLDER}    mapping=${mapping}    session=${living_session}
+    [Teardown]    SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+
+Start_ExaBgp_Peer
+    [Documentation]    Starts exabgp
+    Start_Tool    ${DEFAUTL_EXA_CFG}
+
+Verify ExaBgp Connected
+    [Documentation]    Verifies exabgp's presence in operational ds.
+    BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Tools_Connection    ${living_session}
+
+Isolate_Current_Owner_Member
+    [Documentation]    Isolating cluster node which is connected with exabgp.
+    ClusterManagement.Isolate_Member_From_List_Or_All    ${rib_owner}
+    BuiltIn.Set Suite variable    ${old_rib_owner}    ${rib_owner}
+    BuiltIn.Set Suite variable    ${old_rib_candidates}    ${rib_candidates}
+    ${idx}=    Collections.Get From List    ${old_rib_candidates}    0
+    ${session}=    Resolve_Http_Session_For_Member    member_index=${idx}
+    BuiltIn.Set_Suite_Variable    ${living_session}    ${session}
+    BuiltIn.Set_Suite_Variable    ${living_node}    ${idx}
+
+Verify_New_Rib_Owner
+    [Documentation]    Verifies if new owner of example-bgp-rib is elected.
+    BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_New_Rib_Owner_Elected    ${old_rib_owner}    ${living_node}
+
+Verify_ExaBgp_Reconnected
+    [Documentation]    Verifies exabgp's presence in operational ds.
+    BuiltIn.Wait_Until_Keyword_Succeeds    5x    2s    Verify_Tools_Connection    ${living_session}
+
+Rejoin_Isolated_Member
+    [Documentation]    Rejoin isolated node
+    ClusterManagement.Rejoin_Member_From_List_Or_All    ${old_rib_owner}
+
+Verify_New_Candidate
+    [Documentation]    Verifies started node become candidate for example-bgp-rib
+    BuiltIn.Wait_Until_Keyword_Succeeds    10x    5s    Verify_New_Rib_Candidate_Present    ${old_rib_owner}    ${living_node}
+
+Verify ExaBgp Still Connected
+    [Documentation]    Verifies exabgp's presence in operational ds
+    Verify_Tools_Connection    ${living_session}
+
+Stop_ExaBgp_Peer
+    [Documentation]    Stops exabgp
+    Stop_Tool
+
+Delete_Bgp_Peer_Configuration
+    [Documentation]    Revert the BGP configuration to the original state: without any configured peers
+    &{mapping}    Create Dictionary    BGP_RIB=${RIB_INSTANCE}
+    TemplatedRequests.Delete_Templated    ${BGP_PEER_FOLDER}    mapping=${mapping}    session=${living_session}
+
+*** Keywords ***
+Setup_Everything
+    [Documentation]    Initial setup
+    SetupUtils.Setup_Utils_For_Setup_And_Teardown
+    ClusterManagement.ClusterManagement_Setup
+    ${tools_system_conn_id}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=6s
+    Builtin.Set_Suite_Variable    ${tools_system_conn_id}
+    Utils.Flexible_Mininet_Login    ${TOOLS_SYSTEM_USER}
+    SSHKeywords.Virtual_Env_Create
+    SSHKeywords.Virtual_Env_Install_Package    exabgp==3.4.16
+    Upload_Config_Files
+
+Teardown_Everything
+    [Documentation]    Suite cleanup
+    SSHKeywords.Virtual_Env_Delete
+    RequestsLibrary.Delete_All_Sessions
+    SSHLibrary.Close_All_Connections
+
+Start_Tool
+    [Arguments]    ${cfg_file}    ${mapping}={}
+    [Documentation]    Starts the tool
+    ${start_cmd}    BuiltIn.Set_Variable    ${EXA_CMD} ${cfg_file}
+    BuiltIn.Log    ${start_cmd}
+    SSHKeywords.Virtual_Env_Activate_On_Current_Session    log_output=${True}
+    ${output}=    SSHLibrary.Write    ${start_cmd}
+    BuiltIn.Log    ${output}
+
+Stop_Tool
+    [Documentation]    Stops the tool by sending ctrl+c
+    ${output}=    SSHLibrary.Read
+    BuiltIn.Log    ${output}
+    Utils.Write_Bare_Ctrl_C
+    ${output}=    SSHLibrary.Read_Until_Prompt
+    BuiltIn.Log    ${output}
+    SSHKeywords.Virtual_Env_Deactivate_On_Current_Session    log_output=${True}
+
+Upload_Config_Files
+    [Documentation]    Uploads exabgp config files.
+    SSHLibrary.Put_File    ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG}    .
+    @{cfgfiles}=    SSHLibrary.List_Files_In_Directory    .    *.cfg
+    : FOR    ${cfgfile}    IN    @{cfgfiles}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP1/${ODL_SYSTEM_1_IP}/g' ${cfgfile}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP2/${ODL_SYSTEM_2_IP}/g' ${cfgfile}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/ODLIP3/${ODL_SYSTEM_3_IP}/g' ${cfgfile}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/ROUTEREFRESH/disable/g' ${cfgfile}
+    \    SSHLibrary.Execute_Command    sed -i -e 's/ADDPATH/disable/g' ${cfgfile}
+    \    ${stdout}=    SSHLibrary.Execute_Command    cat ${cfgfile}
+    \    Log    ${stdout}
+
+Verify_New_Rib_Owner_Elected
+    [Arguments]    ${old_owner}    ${node_to_ask}
+    [Documentation]    Verifies new owner was elected
+    ${owner}    ${candidates}=    ClusterManagement.Get_Owner_And_Successors_For_device    example-bgp-rib    org.opendaylight.mdsal.ServiceEntityType    ${node_to_ask}
+    BuiltIn.Should_Not_Be_Equal    ${old_owner}    ${owner}
+
+Verify_New_Rib_Candidate_Present
+    [Arguments]    ${candidate}    ${node_to_ask}
+    [Documentation]    Verifies candidate's presence.
+    ${owner}    ${candidates}=    ClusterManagement.Get_Owner_And_Successors_For_device    example-bgp-rib    org.opendaylight.mdsal.ServiceEntityType    ${node_to_ask}
+    BuiltIn.Should_Contain    ${candidates}    ${candidate}
+
+Verify_Tools_Connection
+    [Arguments]    ${session}    ${connected}=${True}
+    [Documentation]    Checks peer presence in operational datastore
+    ${exp_status_code}=    BuiltIn.Set_Variable_If    ${connected}    ${200}    ${404}
+    ${rsp}=    RequestsLibrary.Get Request    ${session}    ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP}
+    BuiltIn.Log    ${rsp.content}
+    BuiltIn.Should_Be_Equal_As_Numbers    ${exp_status_code}    ${rsp.status_code}
index 81fab6de2c0716653f3003da227ea2ad09feeb0a..fb8dc42ee8bd63d4c45b4b7e59be1f6792022ac1 100644 (file)
@@ -7,3 +7,4 @@
 # Place the suites in run order:
 integration/test/csit/suites/netconf/ready/netconfready.robot
 integration/test/csit/suites/bgpcep/bgpclustering/040_bgp_ha_karaf_restart.robot
+integration/test/csit/suites/bgpcep/bgpclustering/050_bgp_ha_karaf_isolation.robot