ebf7478c1f0709b8fe9fa48f5bf2f02865ddb917
[integration/test.git] / csit / suites / controller / dom_data_broker / ddb-sanity-module-based.robot
1 *** Settings ***
2 Documentation     DOMDataBroker testing: Module based shards sanity suite
3 ...
4 ...               Copyright (c) 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 ...               The goal is to call several basic rpc form ClusterAdmin.robot and
11 ...               MdsalLowlevel.robot to ensute that those rpcs can be safely used in
12 ...               other suites.
13 ...               It also verify the ability of the odl-controller-test-app to perform
14 ...               several activities.
15 Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown    http_timeout=125
16 Suite Teardown    SSHLibrary.Close_All_Connections
17 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
18 Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
19 Default Tags      critical
20 Library           SSHLibrary
21 Library           ${CURDIR}/../../../libraries/MdsalLowlevelPy.py
22 Resource          ${CURDIR}/../../../libraries/ClusterAdmin.robot
23 Resource          ${CURDIR}/../../../libraries/ClusterManagement.robot
24 Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
25 Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
26
27 *** Variables ***
28 ${SHARD_NAME}     default
29 ${SHARD_TYPE}     config
30 ${TRANSACTION_RATE_1K}    ${1000}
31 ${DURATION}       ${60}
32 ${SIMPLE_TX}      ${False}
33 ${CHAINED_TX}     ${True}
34 ${MODULE_SHARD_PREFIX}    prefix-
35
36 *** Test Cases ***
37 Get_Shard_Role
38     [Documentation]    Get shard role.
39     ${all_indices} =    ClusterManagement.List_All_Indices
40     : FOR    ${index}    IN    @{all_indices}
41     \    ${role} =    ClusterAdmin.Get_Shard_Role    ${index}    ${SHARD_NAME}    ${SHARD_TYPE}
42
43 Subscribe_Listener_To_Leader
44     [Documentation]    Subscribe listener to leader.
45     ${all_indices} =    ClusterManagement.List_All_Indices
46     ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}    verify_restconf=False
47     MdsalLowlevel.Subscribe_Dtcl    ${leader}
48     BuiltIn.Sleep    5s
49     ${copy_matches} =    MdsalLowlevel.Unsubscribe_Dtcl    ${leader}
50     BuiltIn.Should_Be_True    ${copy_matches}
51
52 Subscribe_Listener_To_Follower
53     [Documentation]    Subscribe listener to follower.
54     ${all_indices} =    ClusterManagement.List_All_Indices
55     ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}    verify_restconf=False
56     ${follower_idx} =    Collections.Get_From_List    ${follower_list}    ${0}
57     MdsalLowlevel.Subscribe_Dtcl    ${follower_idx}
58     BuiltIn.Sleep    5s
59     ${copy_matches} =    MdsalLowlevel.Unsubscribe_Dtcl    ${follower_idx}
60     BuiltIn.Should_Be_True    ${copy_matches}
61
62 Make_Leader_Local
63     [Documentation]    Make the loeader local and verify.
64     ${shard_name} =    BuiltIn.Set_Variable    ${SHARD_NAME}
65     ${shard_type} =    BuiltIn.Set_Variable    ${SHARD_TYPE}
66     ${all_indices} =    ClusterManagement.List_All_Indices
67     ${old_leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}    verify_restconf=False
68     ${follower1} =    Collections.Get_From_List    ${follower_list}    ${0}
69     ClusterAdmin.Make_Leader_Local    ${follower1}    ${shard_name}    ${shard_type}
70     ${leader}    ${follower_list} =    BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterManagement.Verify_Shard_Leader_Elected    ${shard_name}
71     ...    ${shard_type}    ${True}    ${old_leader}    member_index_list=${EMPTY}
72     BuiltIn.Should_Be_Equal_As_Numbers    ${follower1}    ${leader}
73
74 Remove_Leader_Shard_Replica_And_Add_It_Back
75     [Documentation]    Remove and add shard replica adn verify it.
76     ${shard_name} =    BuiltIn.Set_Variable    ${SHARD_NAME}
77     ${shard_type} =    BuiltIn.Set_Variable    ${SHARD_TYPE}
78     ${all_indices} =    ClusterManagement.List_All_Indices
79     ${old_leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}    verify_restconf=False
80     ClusterAdmin.Remove_Shard_Replica    ${old_leader}    ${shard_name}    member-${old_leader}    ${shard_type}
81     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    DdbCommons.Verify_Shard_Replica_Removed    ${old_leader}    ${shard_name}    ${shard_type}
82     ${actual_leader}    ${actual_follower_list} =    BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}
83     ...    verify_restconf=False    shard_type=${shard_type}    member_index_list=${follower_list}
84     BuiltIn.Should_Not_Be_Equal_As_Numbers    ${old_leader}    ${actual_leader}
85     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterAdmin.Add_Shard_Replica    ${old_leader}    ${shard_name}    ${shard_type}
86     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}
87     ...    verify_restconf=False
88
89 Remove_Follower_Shard_Replica_And_Add_It_Back
90     [Documentation]    Remove and add shard replica adn verify it.
91     ${shard_name} =    BuiltIn.Set_Variable    ${SHARD_NAME}
92     ${shard_type} =    BuiltIn.Set_Variable    ${SHARD_TYPE}
93     ${all_indices} =    ClusterManagement.List_All_Indices
94     ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}    verify_restconf=False
95     ${follower1} =    Collections.Get_From_List    ${follower_list}    ${0}
96     ClusterAdmin.Remove_Shard_Replica    ${follower1}    ${shard_name}    member-${follower1}    ${shard_type}
97     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    DdbCommons.Verify_Shard_Replica_Removed    ${follower1}    ${shard_name}    ${shard_type}
98     ${new_indices_list} =    ClusterManagement.List_Indices_Minus_Member    ${follower1}
99     ClusterManagement.Verify_Shard_Leader_Elected    ${shard_name}    ${shard_type}    ${False}    ${leader}    member_index_list=${new_indices_list}
100     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterAdmin.Add_Shard_Replica    ${follower1}    ${shard_name}    ${shard_type}
101     BuiltIn.Wait_Until_Keyword_Succeeds    60s    5s    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}
102     ...    verify_restconf=False
103
104 Write_Transactions_One_Node_Leader
105     [Documentation]    Write transactions.
106     ${all_indices} =    ClusterManagement.List_All_Indices
107     ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}    verify_restconf=False
108     ${leader_idx_as_list} =    BuiltIn.Create_List    ${leader}
109     ${leader_ip_as_list} =    ClusterManagement.Resolve_IP_Address_For_Members    ${leader_idx_as_list}
110     MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${leader_ip_as_list}    ${leader_idx_as_list}    ${MODULE_SHARD_PREFIX}    ${DURATION}    ${TRANSACTION_RATE_1K}    chained_flag=${CHAINED_TX}
111     ${resp_list} =    MdsalLowlevelPy.Wait_For_Transactions
112     : FOR    ${resp}    IN    @{resp_list}
113     \    TemplatedRequests.Check_Status_Code    @{resp}[2]
114
115 Write_Transactions_One_Node_Follower
116     [Documentation]    Write transactions.
117     ${all_indices} =    ClusterManagement.List_All_Indices
118     ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}    verify_restconf=False
119     ${follower_idx} =    Collections.Get_From_List    ${follower_list}    ${0}
120     ${follower_idx_as_list} =    BuiltIn.Create_List    ${follower_idx}
121     ${follower_ip_as_list} =    ClusterManagement.Resolve_IP_Address_For_Members    ${follower_idx_as_list}
122     MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${follower_ip_as_list}    ${follower_idx_as_list}    ${MODULE_SHARD_PREFIX}    ${DURATION}    ${TRANSACTION_RATE_1K}    chained_flag=${CHAINED_TX}
123     ${resp_list} =    MdsalLowlevelPy.Wait_For_Transactions
124     : FOR    ${resp}    IN    @{resp_list}
125     \    TemplatedRequests.Check_Status_Code    @{resp}[2]
126
127 Write_Transactions_All_Nodes
128     [Documentation]    Write transactions.
129     ${all_indices} =    ClusterManagement.List_All_Indices
130     ${all_ip_list} =    ClusterManagement.Resolve_IP_Address_For_Members    ${all_indices}
131     MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${all_ip_list}    ${all_indices}    ${MODULE_SHARD_PREFIX}    ${DURATION}    ${TRANSACTION_RATE_1K}    chained_flag=${CHAINED_TX}
132     ${resp_list} =    MdsalLowlevelPy.Wait_For_Transactions
133     : FOR    ${resp}    IN    @{resp_list}
134     \    TemplatedRequests.Check_Status_Code    @{resp}[2]