2 Documentation Controller functional HA testing of global singleton rpcs.
4 ... Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
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 Suite Setup Setup_Suite
10 Suite Teardown SSHLibrary.Close_All_Connections
11 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
12 Test Teardown SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
14 Resource ${CURDIR}/../../../libraries/ClusterManagement.robot
15 Resource ${CURDIR}/../../../libraries/KarafKeywords.robot
16 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
17 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
18 Resource ${CURDIR}/../../../libraries/WaitForFailure.robot
19 Resource ${CURDIR}/../../../variables/Variables.robot
22 ${RPC_URL} /restconf/operations/basic-rpc-test:basic-global
24 ${SERVICE} Basic-rpc-test']
25 ${TEST_LOG_LEVEL} info
26 @{TEST_LOG_COMPONENTS} org.opendaylight.controller.remote.rpc
27 ${EOS_URL} /restconf/operational/entity-owners:entity-owners
31 Get_Basic_Rpc_Test_Owner
32 [Documentation] Find a service owner and successors.
34 Get_Present_Brt_Owner_And_Successors 1 store=${True}
36 Rpc_Before_Killing_On_Owner
37 [Documentation] Run rpc on the service owner.
40 Rpc_Before_Kill_On_Successors
41 [Documentation] Run rpc on non owher cluster nodes.
42 : FOR ${idx} IN @{brt_successors}
45 Kill_Current_Owner_Member
46 [Documentation] Kill cluster node which is the owner.
48 ClusterManagement.Kill_Single_Member ${brt_owner}
49 BuiltIn.Set Suite variable ${old_brt_owner} ${brt_owner}
50 BuiltIn.Set Suite variable ${old_brt_successors} ${brt_successors}
52 Verify_New_Basic_Rpc_Test_Owner_Elected
53 [Documentation] Verify new owner of the service is elected.
54 ${idx}= Collections.Get_From_List ${old_brt_successors} 0
55 BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Owner_Elected ${True} ${old_brt_owner} ${idx}
56 Get_Present_Brt_Owner_And_Successors ${idx} store=${True}
58 Rpc_On_Remained_Cluster_Nodes
59 [Documentation] Run rpc on remained cluster nodes.
60 : FOR ${idx} IN @{old_brt_successors}
64 [Documentation] Restart killed node
66 ClusterManagement.Start_Single_Member ${old_brt_owner}
68 Verify_New_Owner_Remained_After_Rejoin
69 [Documentation] Verify no owner change happened after rejoin.
70 WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout 15s 2s Verify_Owner_Elected ${False} ${brt_owner} ${brt_owner}
72 Rpc_After_Rejoin_On_New_Owner
73 [Documentation] Run rpc on the new service owner node.
76 Rpc_After_Rejoin_On_Old_Owner
77 [Documentation] Run rpc on rejoined cluster node.
78 Run_Rpc ${old_brt_owner}
80 Rpc_After_Rejoin_On_All
81 [Documentation] Run rpc again on all nodes.
83 : FOR ${idx} IN @{brt_successors}
88 SetupUtils.Setup_Utils_For_Setup_And_Teardown
89 SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All ${TEST_LOG_LEVEL} ${TEST_LOG_COMPONENTS}
92 [Arguments] ${node_idx}
93 [Documentation] Run rpc and log the entity ownership service details to karaf log.
94 ... Logging the details was a developer's request during the implementation to improve debugging.
95 ${session} = Resolve_Http_Session_For_Member member_index=${node_idx}
96 ${out} = TemplatedRequests.Get_From_Uri ${EOS_URL} session=${session}
97 KarafKeywords.Log_Message_To_Controller_Karaf EOS rest resp: ${out}
98 TemplatedRequests.Post_To_Uri ${RPC_URL} ${EMPTY} ${EMPTY_DICT} ${EMPTY_DICT} session=${session}
101 [Arguments] ${new_elected} ${old_owner} ${node_to_ask}
102 [Documentation] Verify new owner was elected or remained the same.
103 ${owner} ${successors}= Get_Present_Brt_Owner_And_Successors ${node_to_ask}
104 BuiltIn.Run_Keyword_If ${new_elected} BuiltIn.Should_Not_Be_Equal_As_Numbers ${old_owner} ${owner}
105 BuiltIn.Run_Keyword_Unless ${new_elected} BuiltIn.Should_Be_Equal_As_numbers ${old_owner} ${owner}
107 Get_Present_Brt_Owner_And_Successors
108 [Arguments] ${node_to_ask} ${store}=${False}
109 [Documentation] Find a basic rpc test service owner and successors and store them if indicated.
110 ${brt_owner} ${brt_successors}= ClusterManagement.Get_Owner_And_Successors_For_Device ${SERVICE} org.opendaylight.mdsal.ServiceEntityType ${node_to_ask}
111 BuiltIn.Run_Keyword_If ${store} BuiltIn.Set_Suite_Variable ${brt_owner} ${brt_owner}
112 BuiltIn.Run_Keyword_If ${store} BuiltIn.Set_Suite_Variable ${brt_successors} ${brt_successors}
113 BuiltIn.Return_From_Keyword ${brt_owner} ${brt_successors}