Add initial files for dom data broker testing 00/53600/77
authorPeter Gubka <pgubka@cisco.com>
Tue, 21 Mar 2017 11:32:08 +0000 (12:32 +0100)
committerVratko Polák <vrpolak@cisco.com>
Tue, 25 Apr 2017 19:09:50 +0000 (19:09 +0000)
Change-Id: Ib45527e7a565ab8283c0d5f2fffd023274e6e20f
Signed-off-by: Peter Gubka <pgubka@cisco.com>
37 files changed:
csit/libraries/ClusterAdmin.robot [new file with mode: 0644]
csit/libraries/ClusterManagement.robot
csit/libraries/MdsalLowlevel.robot
csit/libraries/MdsalLowlevelPy.py
csit/libraries/controller/DdbCommons.robot [new file with mode: 0644]
csit/suites/controller/dom_data_broker/clean_leader_shutdown.robot [new file with mode: 0644]
csit/suites/controller/dom_data_broker/client_isolation.robot [new file with mode: 0644]
csit/suites/controller/dom_data_broker/explicit_leader_movement.robot [new file with mode: 0644]
csit/suites/controller/dom_data_broker/leader_isolation.robot [new file with mode: 0644]
csit/suites/controller/dom_data_broker/remote_listener.robot [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/location.uri [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/add_shard_replica/location.uri [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/add_shard_replica/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/make_leader_local/location.uri [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/make_leader_local/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/location.uri [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/remove_shard_replica/location.uri [new file with mode: 0644]
csit/variables/mdsal/clusteradmin/remove_shard_replica/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/add_shard_replica/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/add_shard_replica/post_data.xml [deleted file]
csit/variables/mdsal/lowlevelrpc/become_module_leader/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/become_module_leader/post_data.xml [deleted file]
csit/variables/mdsal/lowlevelrpc/become_prefix_leader/post_data.xml
csit/variables/mdsal/lowlevelrpc/create_prefix_shard/location.uri [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/create_prefix_shard/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/deconfigure_id_ints_shard/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/is_client_aborted/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/register_default_constant/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/location.uri [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/remove_shard_replica/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/subscribe_dtcl/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/unregister_default_constant/location.uri [deleted file]
csit/variables/mdsal/lowlevelrpc/unsubscribe_dtcl/post_data.xml [new file with mode: 0644]
csit/variables/mdsal/lowlevelrpc/write_transactions/post_data.xml

diff --git a/csit/libraries/ClusterAdmin.robot b/csit/libraries/ClusterAdmin.robot
new file mode 100644 (file)
index 0000000..3de2c8c
--- /dev/null
@@ -0,0 +1,55 @@
+*** Settings ***
+Documentation     Keywords wrapping controller's cluster-admin yang model rpcs.
+...
+...               Copyright (c) 2017 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
+Library           XML
+Resource          ${CURDIR}/ClusterManagement.robot
+Resource          ${CURDIR}/TemplatedRequests.robot
+
+*** Variables ***
+${CLUSTERADMIN_RPC_DIR}    ${CURDIR}/../variables/mdsal/clusteradmin
+${ADD_PREFIX_SHARD_REPLICA_DIR}    ${CLUSTERADMIN_RPC_DIR}/add_prefix_shard_replica
+${ADD_SHARD_REPLICA_DIR}    ${CLUSTERADMIN_RPC_DIR}/add_shard_replica
+${MAKE_LEADER_LOCAL_DIR}    ${CLUSTERADMIN_RPC_DIR}/make_leader_local
+${REMOVE_PREFIX_SHARD_REPLICA_DIR}    ${CLUSTERADMIN_RPC_DIR}/remove_prefix_shard_replica
+${REMOVE_SHARD_REPLICA_DIR}    ${CLUSTERADMIN_RPC_DIR}/remove_shard_replica
+
+*** Keywords ***
+Make_Leader_Local
+    [Arguments]    ${member_index}    ${shard_name}    ${shard_type}
+    [Documentation]    Makes the node to be a shard leader by invoking make-leader-local rpc.
+    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
+    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}    SHARD_TYPE=${shard_type}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${MAKE_LEADER_LOCAL_DIR}    mapping=${mapping}    session=${session}
+
+Add_Prefix_Shard_Replica
+    [Arguments]    ${member_index}    ${shard_prefix}    ${ds_type}
+    [Documentation]    Add prefix shard replica to given member by invoking add-prefix-shard-replica rpc.
+    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
+    &{mapping}    BuiltIn.Create_Dictionary    SHARD_PREFIX=${shard_prefix}    DATA_STORE_TYPE=${ds_type}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${ADD_PREFIX_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
+
+Remove_Prefix_Shard_Replica
+    [Arguments]    ${member_index}    ${shard_prefix}    ${member_name}    ${ds_type}
+    [Documentation]    Remove prefix shard replica from the given member by invoking remove-prefix-shard-replica rpc.
+    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
+    &{mapping}    BuiltIn.Create_Dictionary    SHARD_PREFIX=${shard_prefix}    MEMBER_NAME=${member_name}    DATA_STORE_TYPE=${ds_type}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${REMOVE_PREFIX_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
+
+Add_Shard_Replica
+    [Arguments]    ${member_index}    ${shard_name}    ${ds_type}
+    [Documentation]    Add shard replica to given member by invoking add-shard-replica rpc.
+    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
+    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}    DATA_STORE_TYPE=${ds_type}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${ADD_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
+
+Remove_Shard_Replica
+    [Arguments]    ${member_index}    ${shard_name}    ${member_name}    ${ds_type}
+    [Documentation]    Remove shard replica from the given member by invoking remove-shard-replica rpc.
+    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
+    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}    MEMBER_NAME=${member_name}    DATA_STORE_TYPE=${ds_type}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${REMOVE_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
index 3a72b01fa1a33cc199b58ffe6a4004ff7f75caa4..37fa62f5ffd8ff41f56dfbc84ad0414ccf49bbc4 100644 (file)
@@ -659,6 +659,15 @@ Resolve_IP_Address_For_Member
     ${ip_address} =    Collections.Get From Dictionary    dictionary=${ClusterManagement__index_to_ip_mapping}    key=${member_index}
     [Return]    ${ip_address}
 
     ${ip_address} =    Collections.Get From Dictionary    dictionary=${ClusterManagement__index_to_ip_mapping}    key=${member_index}
     [Return]    ${ip_address}
 
+Resolve_IP_Address_For_Members
+    [Arguments]    ${member_index_list}
+    [Documentation]    Return a list of IP address of given indexes.
+    ${member_ip_list} =    BuiltIn.Create_List
+    : FOR    ${index}    IN    @{member_index_list}
+    \    ${ip_address} =    Collections.Get From Dictionary    dictionary=${ClusterManagement__index_to_ip_mapping}    key=${index}
+    \    Collections.Append_To_List    ${member_ip_list}    ${ip_address}
+    [Return]    ${member_ip_list}
+
 Resolve_Http_Session_For_Member
     [Arguments]    ${member_index}
     [Documentation]    Return RequestsLibrary session alias pointing to node of given index.
 Resolve_Http_Session_For_Member
     [Arguments]    ${member_index}
     [Documentation]    Return RequestsLibrary session alias pointing to node of given index.
index 603371e7cb635eb4a424d353aba87db7e88f15dd..bbc188af90bfb660925934ee2684a5fff110971b 100644 (file)
@@ -1,11 +1,6 @@
 *** Settings ***
 Documentation     Keywords wrapping controller's odl-mdsal-lowlevel yang model rpcs.
 ...
 *** Settings ***
 Documentation     Keywords wrapping controller's odl-mdsal-lowlevel yang model rpcs.
 ...
-...               This is just an initial skeleton implementation, calls are debugged. Multiple
-...               changes will follow as suites will be implemented.
-...               This suite should be preferably merged before any suite to avoid conflicting
-...               situations while suites will be implementing.
-...
 ...               Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
 ...
 ...               This program and the accompanying materials are made available under the
 ...               Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
 ...
 ...               This program and the accompanying materials are made available under the
@@ -16,36 +11,31 @@ Resource          ${CURDIR}/ClusterManagement.robot
 Resource          ${CURDIR}/TemplatedRequests.robot
 
 *** Variables ***
 Resource          ${CURDIR}/TemplatedRequests.robot
 
 *** Variables ***
-${RPC_DIR}        ${CURDIR}/../variables/mdsal/lowlevelrpc
-${ADD_SHARD_REPLICA_DIR}    ${RPC_DIR}/add_shard_replica
-${BECOME_MODULE_LEADER_DIR}    ${RPC_DIR}/become_module_leader
-${BECOME_PREFIX_LEADER_DIR}    ${RPC_DIR}/become_prefix_leader
-${CHECK_PUBLISH_NOTIFICATIONS_DIR}    ${RPC_DIR}/check_publish_notifications
-${DECONFIGURE_ID_INTS_SHARD_DIR}    ${RPC_DIR}/deconfigure_id_ints_shard
-${GET_CONSTANT_DIR}    ${RPC_DIR}/get_constant
-${GET_CONTEXTED_CONSTANT_DIR}    ${RPC_DIR}/get_contexted_constant
-${GET_SINGLETON_CONSTANT_DIR}    ${RPC_DIR}/get_singleton_constant
-${IS_CLIENT_ABORTED_DIR}    ${RPC_DIR}/is_client_aborted
-${PRODUCE_TRANSACTIONS_DIR}    ${RPC_DIR}/produce_transactions
-${REGISTER_BOUND_CONSTANT_DIR}    ${RPC_DIR}/register_bound_constant
-${REGISTER_CONSTANT_DIR}    ${RPC_DIR}/register_constant
-${REGISTER_DEFAULT_CONSTANT_DIR}    ${RPC_DIR}/register_default_constant
-${REGISTER_FLAPPING_SINGLETON_DIR}    ${RPC_DIR}/register_flapping_singleton
-${REGISTER_SINGLETON_CONSTANT_DIR}    ${RPC_DIR}/register_singleton_constant
-${REMOVE_SHARD_REPLICA_DIR}    ${RPC_DIR}/remove_shard_replica
-${START_PUBLISH_NOTIFICATIONS_DIR}    ${RPC_DIR}/start_publish_notifications
-${SUBSCRIBE_DDTL_DIR}    ${RPC_DIR}/subscribe_ddtl
-${SUBSCRIBE_DTCL_DIR}    ${RPC_DIR}/subscribe_dtcl
-${SUBSCRIBE_YNL_DIR}    ${RPC_DIR}/subscribe_ynl
-${UNREGISTER_BOUND_CONSTANT_DIR}    ${RPC_DIR}/unregister_bound_constant
-${UNREGISTER_CONSTANT_DIR}    ${RPC_DIR}/unregister_constant
-${UNREGISTER_DEFAULT_CONSTANT_DIR}    ${RPC_DIR}/unregister_default_constant
-${UNREGISTER_FLAPPING_SINGLETON_DIR}    ${RPC_DIR}/unregister_flapping_singleton
-${UNREGISTER_SINGLETON_CONSTANT_DIR}    ${RPC_DIR}/unregister_singleton_constant
-${UNSUBSCRIBE_DDTL_DIR}    ${RPC_DIR}/unsubscribe_ddtl
-${UNSUBSCRIBE_DTCL_DIR}    ${RPC_DIR}/unsubscribe_dtcl
-${UNSUBSCRIBE_YNL_DIR}    ${RPC_DIR}/unsubscribe_ynl
-${WRITE_TRANSACTIONS_DIR}    ${RPC_DIR}/write_transactions
+${LOWLEVEL_RPC_DIR}    ${CURDIR}/../variables/mdsal/lowlevelrpc
+${BECOME_PREFIX_LEADER_DIR}    ${LOWLEVEL_RPC_DIR}/become_prefix_leader
+${CHECK_PUBLISH_NOTIFICATIONS_DIR}    ${LOWLEVEL_RPC_DIR}/check_publish_notifications
+${CREATE_PREFIX_SHARD_DIR}    ${LOWLEVEL_RPC_DIR}/create_prefix_shard
+${GET_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/get_constant
+${GET_CONTEXTED_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/get_contexted_constant
+${GET_SINGLETON_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/get_singleton_constant
+${PRODUCE_TRANSACTIONS_DIR}    ${LOWLEVEL_RPC_DIR}/produce_transactions
+${REGISTER_BOUND_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/register_bound_constant
+${REGISTER_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/register_constant
+${REGISTER_FLAPPING_SINGLETON_DIR}    ${LOWLEVEL_RPC_DIR}/register_flapping_singleton
+${REGISTER_SINGLETON_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/register_singleton_constant
+${REMOVE_PREFIX_SHARD_DIR}    ${LOWLEVEL_RPC_DIR}/remove_prefix_shard
+${START_PUBLISH_NOTIFICATIONS_DIR}    ${LOWLEVEL_RPC_DIR}/start_publish_notifications
+${SUBSCRIBE_DDTL_DIR}    ${LOWLEVEL_RPC_DIR}/subscribe_ddtl
+${SUBSCRIBE_DTCL_DIR}    ${LOWLEVEL_RPC_DIR}/subscribe_dtcl
+${SUBSCRIBE_YNL_DIR}    ${LOWLEVEL_RPC_DIR}/subscribe_ynl
+${UNREGISTER_BOUND_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/unregister_bound_constant
+${UNREGISTER_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/unregister_constant
+${UNREGISTER_FLAPPING_SINGLETON_DIR}    ${LOWLEVEL_RPC_DIR}/unregister_flapping_singleton
+${UNREGISTER_SINGLETON_CONSTANT_DIR}    ${LOWLEVEL_RPC_DIR}/unregister_singleton_constant
+${UNSUBSCRIBE_DDTL_DIR}    ${LOWLEVEL_RPC_DIR}/unsubscribe_ddtl
+${UNSUBSCRIBE_DTCL_DIR}    ${LOWLEVEL_RPC_DIR}/unsubscribe_dtcl
+${UNSUBSCRIBE_YNL_DIR}    ${LOWLEVEL_RPC_DIR}/unsubscribe_ynl
+${WRITE_TRANSACTIONS_DIR}    ${LOWLEVEL_RPC_DIR}/write_transactions
 
 *** Keywords ***
 Get_Constant
 
 *** Keywords ***
 Get_Constant
@@ -99,26 +89,27 @@ Unregister_Constant
 
 Register_Singleton_Constant
     [Arguments]    ${member_index}    ${constant}
 
 Register_Singleton_Constant
     [Arguments]    ${member_index}    ${constant}
-    [Documentation]    TODO: more desctiptive comment than: Invoke register-singleton-constant rpc.
+    [Documentation]    Register singleton application on given node by invoking register-singleton-constant rpc.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    CONSTANT=${constant}
     TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_SINGLETON_CONSTANT_DIR}    mapping=${mapping}    session=${session}
 
 Unregister_Singleton_Constant
     [Arguments]    ${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    CONSTANT=${constant}
     TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_SINGLETON_CONSTANT_DIR}    mapping=${mapping}    session=${session}
 
 Unregister_Singleton_Constant
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke unregister-singleton-constant rpc.
+    [Documentation]    Unregister singleton application on given node by invoking unregister-singleton-constant rpc.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_SINGLETON_CONSTANT_DIR}    session=${session}
 
 Register_Flapping_Singleton
     [Arguments]    ${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_SINGLETON_CONSTANT_DIR}    session=${session}
 
 Register_Flapping_Singleton
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke register-flapping-singleton rpc.
+    [Documentation]    Activate flapping application on given node by invoking register-flapping-singleton rpc.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_FLAPPING_SINGLETON_DIR}    session=${session}
 
 Unregister_Flapping_Singleton
     [Arguments]    ${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_FLAPPING_SINGLETON_DIR}    session=${session}
 
 Unregister_Flapping_Singleton
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke unregister-flapping-singleton rpc.
+    [Documentation]    Deactivate flapping singleton application by invoking unregister-flapping-singleton rpc.
+    ...    Return the successful re-registrations count.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_FLAPPING_SINGLETON_DIR}    session=${session}
     ${xml} =    XML.Parse_Xml    ${text}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_FLAPPING_SINGLETON_DIR}    session=${session}
     ${xml} =    XML.Parse_Xml    ${text}
@@ -126,85 +117,65 @@ Unregister_Flapping_Singleton
     BuiltIn.Return_From_Keyword    ${count}
 
 Write_Transactions
     BuiltIn.Return_From_Keyword    ${count}
 
 Write_Transactions
-    [Arguments]    ${member_index}    ${seconds}    ${trans_per_sec}    ${chained_trans}=${True}
-    [Documentation]    TODO: more desctiptive comment than: Invoke write-transactions rpc.
+    [Arguments]    ${member_index}    ${identifier}    ${seconds}    ${trans_per_sec}    ${chained_trans}=${True}
+    [Documentation]    Create transactions with given rate for given time for module-based shards.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    SECONDS=${seconds}    TPS=${trans_per_sec}    CHAINED_TRANSACTIONS=${chained_trans}
+    &{mapping}    BuiltIn.Create_Dictionary    ID=${identifier}    DURATION=${seconds}    RATE=${trans_per_sec}    CHAINED_FLAG=${chained_trans}
     TemplatedRequests.Post_As_Xml_Templated    ${WRITE_TRANSACTIONS_DIR}    mapping=${mapping}    session=${session}
 
 Produce_Transactions
     [Arguments]    ${member_index}    ${seconds}    ${trans_per_sec}    ${isolated_trans}=${True}
     TemplatedRequests.Post_As_Xml_Templated    ${WRITE_TRANSACTIONS_DIR}    mapping=${mapping}    session=${session}
 
 Produce_Transactions
     [Arguments]    ${member_index}    ${seconds}    ${trans_per_sec}    ${isolated_trans}=${True}
-    [Documentation]    TODO: more desctiptive comment than: Invoke produce-transactions rpc.
+    [Documentation]    Create transactions with given rate for given time for prefix-based shards.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    SECONDS=${seconds}    TPS=${trans_per_sec}    ISOLATED_TRANSACTIONS=${chained_trans}
     TemplatedRequests.Post_As_Xml_Templated    ${PRODUCE_TRANSACTIONS_DIR}    mapping=${mapping}    session=${session}
 
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    SECONDS=${seconds}    TPS=${trans_per_sec}    ISOLATED_TRANSACTIONS=${chained_trans}
     TemplatedRequests.Post_As_Xml_Templated    ${PRODUCE_TRANSACTIONS_DIR}    mapping=${mapping}    session=${session}
 
-Become_Prefix_Leader
-    [Arguments]    ${member_index}    ${shard_name}
-    [Documentation]    TODO: more desctiptive comment than: Invoke become-prefix-leader rpc.
-    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}
-    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${BECOME_PREFIX_LEADER_DIR}    mapping=${mapping}    session=${session}
-
-Become_Module_Leader
-    [Arguments]    ${member_index}    ${shard_name}
-    [Documentation]    TODO: more desctiptive comment than: Invoke become-module-leader rpc.
-    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}
-    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${BECOME_MODULE_LEADER_DIR}    mapping=${mapping}    session=${session}
-
-Remove_Shard_Replica
-    [Arguments]    ${member_index}    ${shard_name}
-    [Documentation]    TODO: more desctiptive comment than: Invoke remove-shard-replica rpc.
-    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}
-    TemplatedRequests.Post_As_Xml_Templated    ${REMOVE_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
-
-Add_Shard_Replica
-    [Arguments]    ${member_index}    ${shard_name}
-    [Documentation]    TODO: more desctiptive comment than: Invoke add-shard-replica rpc.
+Create_Prefix_Shard
+    [Arguments]    ${member_index}    ${prefix}    ${replicas}
+    [Documentation]    Create prefix based shard.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    SHARD_NAME=${shard_name}
-    TemplatedRequests.Post_As_Xml_Templated    ${ADD_SHARD_REPLICA_DIR}    mapping=${mapping}    session=${session}
+    ${replicas_str}    BuiltIn.Set_Variable    ${EMPTY}
+    : FOR    ${replica}    IN    @{replicas}
+    \    ${replicas_str}    BuiltIn.Set_Variable    ${replicas_str}<replica>${replica}</replica>
+    &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}    REPLICAS=${replicas_str}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${CREATE_PREFIX_SHARD_DIR}    mapping=${mapping}    session=${session}
 
 
-Deconfigure_Id_Ints_Shard
-    [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke deconfigure-id-ints-shard rpc.
+Remove_Prefix_Shard
+    [Arguments]    ${member_index}    ${prefix}
+    [Documentation]    Remove prefix based shard.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${DECONFIGURE_ID_INTS_SHARD_DIR}    base_name=location    extension=uri
-    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
+    &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${REMOVE_PREFIX_SHARD_DIR}    mapping=${mapping}    session=${session}
 
 
-Is_Client_Aborted
-    [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke is-client-aborted rpc.
+Become_Prefix_Leader
+    [Arguments]    ${member_index}    ${prefix}
+    [Documentation]    Given node ask to become a shard leader.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${IS_CLIENT_ABORTED_SHARD_DIR}    base_name=location    extension=uri
-    ${text} =    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
+    &{mapping}    BuiltIn.Create_Dictionary    PREFIX=${prefix}
+    ${text} =    TemplatedRequests.Post_As_Xml_Templated    ${BECOME_PREFIX_LEADER_DIR}    mapping=${mapping}    session=${session}
 
 Subscribe_Dtcl
     [Arguments]    ${member_index}
 
 Subscribe_Dtcl
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke subscribe-dtcl rpc.
+    [Documentation]    Subscribe a listener for data changes. Invoke subscribe-dtcl rpc.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${SUBSCRIBE_DTCL_DIR}    base_name=location    extension=uri
-    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
+    TemplatedRequests.Post_As_Xml_Templated    ${SUBSCRIBE_DTCL_DIR}    session=${session}
 
 Unsubscribe_Dtcl
     [Arguments]    ${member_index}
 
 Unsubscribe_Dtcl
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke unsubscribe-dtcl rpc.
+    [Documentation]    Unsubscribe a listener from the data changes. Invoke unsubscribe-dtcl rpc.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${UNSUBSCRIBE_DTCL_DIR}    base_name=location    extension=uri
-    ${text} =    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
+    TemplatedRequests.Post_As_Xml_Templated    ${UNSUBSCRIBE_DTCL_DIR}    session=${session}
 
 Subscribe_Ddtl
     [Arguments]    ${member_index}
 
 Subscribe_Ddtl
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke subscribe-ddtl rpc.
+    [Documentation]    Subscribe DOMDataTreeListener to listen for the data changes.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${SUBSCRIBE_DDTL_DIR}    base_name=location    extension=uri
     TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
 
 Unsubscribe_Ddtl
     [Arguments]    ${member_index}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${SUBSCRIBE_DDTL_DIR}    base_name=location    extension=uri
     TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
 
 Unsubscribe_Ddtl
     [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke unsubscribe-ddtl rpc.
+    [Documentation]    Unsubscribe DOMDataTreeListener from listening to the data changes.
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${UNSUBSCRIBE_DDTL_DIR}    base_name=location    extension=uri
     ${text} =    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     ${uri} =    TemplatedRequests.Resolve_Text_From_Template_Folder    folder=${UNSUBSCRIBE_DDTL_DIR}    base_name=location    extension=uri
     ${text} =    TemplatedRequests.Post_To_Uri    uri=${uri}    data=${EMPTY}    accept=${ACCEPT_JSON}    content_type=${HEADERS_YANG_JSON}    session=${session}
@@ -268,16 +239,3 @@ Unregister_Bound_Constant
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    CONTEXT=${context}
     TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_BOUND_CONSTANT_DIR}    mapping=${mapping}    session=${session}
     ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
     &{mapping}    BuiltIn.Create_Dictionary    CONTEXT=${context}
     TemplatedRequests.Post_As_Xml_Templated    ${UNREGISTER_BOUND_CONSTANT_DIR}    mapping=${mapping}    session=${session}
-
-Register_Default_Constant
-    [Arguments]    ${member_index}    ${constant}
-    [Documentation]    TODO: more desctiptive comment than: Invoke register-default-constant rpc.
-    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    &{mapping}    BuiltIn.Create_Dictionary    CONSTANT=${constant}
-    TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_DEFAULT_CONSTANT_DIR}    mapping=${mapping}    session=${session}
-
-Unregister_Default_Constant
-    [Arguments]    ${member_index}
-    [Documentation]    TODO: more desctiptive comment than: Invoke unregister-default-constant rpc.
-    ${session} =    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${member_index}
-    TemplatedRequests.Post_As_Xml_Templated    ${REGISTER_DEFAULT_CONSTANT_DIR}    session=${session}
index c9e4c4520efb617a81e55ebc347ea8b44b615a4b..012f87c2cf2c4bc3ddf3d0612d498cf47791989b 100644 (file)
@@ -1,53 +1,81 @@
 """
 Python invocation of several parallel publish-notifications RPCs.
 """
 """
 Python invocation of several parallel publish-notifications RPCs.
 """
+from robot.api import logger
 import Queue
 import requests
 import string
 import threading
 
 
 import Queue
 import requests
 import string
 import threading
 
 
-def publish_notifications(host, grprefix, duration, rate, nrpairs=1):
+_globals = {}
+
+
+def start_write_transactions_on_nodes(host_list, id_prefix, duration, rate, chained_flag=True):
     """Invoke publish notification rpcs and verify the response.
 
     """Invoke publish notification rpcs and verify the response.
 
-    :param host: ip address of odl node
-    :type host: string
-    :param grprefix: prefix identifier for publisher/listener pair
-    :type grprefix: string
-    :param duration: publishing notification duration in seconds
+    :param host_list: list of ip address of odl nodes
+    :type host_list: list of strings
+    :param id_prefix: identifier prefix
+    :type id_prefix: string
+    :param duration: time in seconds
     :type duration: int
     :type duration: int
-    :param rate: events rate per second
+    :param rate: writing transactions rate per second
     :type rate: int
     :type rate: int
-    :param nrpairs: number of publisher/listener pairs, id suffix is counted from it
-    :type nrpairs: int
+    :param chained_flag: specify chained vs. simple transactions
+    :type chained_flag: bool
     """
     """
-    def _publ_notifications(rqueue, url, grid, duration, rate):
+    def _write_transactions(rqueue, url, grid, duration, rate, chained_flag):
         dtmpl = string.Template('''<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
   <id>$ID</id>
   <seconds>$DURATION</seconds>
         dtmpl = string.Template('''<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
   <id>$ID</id>
   <seconds>$DURATION</seconds>
-  <notifications-per-second>$RATE</notifications-per-second>
+  <transactions-per-second>$RATE</transactions-per-second>
+  <chained-transactions>$CHAINED_FLAG</chained-transactions>
 </input>''')
 </input>''')
-        data = dtmpl.substitute({'ID': grid, 'DURATION': duration, 'RATE': rate})
+        data = dtmpl.substitute({'ID': grid, 'DURATION': duration, 'RATE': rate, 'CHAINED_FLAG': chained_flag})
+        logger.info('write-transactions rpc indoked with details: {}'.format(data))
         try:
             resp = requests.post(url=url, headers={'Content-Type': 'application/xml'},
                                  data=data, auth=('admin', 'admin'), timeout=int(duration)+60)
         except Exception as exc:
             resp = exc
         try:
             resp = requests.post(url=url, headers={'Content-Type': 'application/xml'},
                                  data=data, auth=('admin', 'admin'), timeout=int(duration)+60)
         except Exception as exc:
             resp = exc
+            logger.debug(exc)
         rqueue.put(resp)
 
         rqueue.put(resp)
 
-    resqueue = Queue.Queue()
-    lthreads = []
-    url = 'http://{}:8181/restconf/operations/odl-mdsal-lowlevel-control:publish-notifications'.format(host)
-    for i in range(nrpairs):
-        t = threading.Thread(target=_publ_notifications,
-                             args=(resqueue, url, '{}{}'.format(grprefix, i+1), duration, rate))
+    logger.info("Input parameters: host_list:{}, id_prefix:{}, duration:{}, rate:{}, chained_flag:{}".format(
+        host_list, id_prefix, duration, rate, chained_flag))
+    resqueue = _globals.pop('result_queue', Queue.Queue())
+    lthreads = _globals.pop('threads', [])
+    for i, host in enumerate(host_list):
+        url = 'http://{}:8181/restconf/operations/odl-mdsal-lowlevel-control:write-transactions'.format(host)
+        t = threading.Thread(target=_write_transactions,
+                             args=(resqueue, url, '{}{}'.format(id_prefix, i), duration, rate, chained_flag))
         t.daemon = True
         t.start()
         lthreads.append(t)
 
         t.daemon = True
         t.start()
         lthreads.append(t)
 
+    _globals.update({'threads': lthreads, 'result_queue': resqueue})
+
+
+def wait_for_write_transactions():
+    """Blocking call, waiting for responses from all threads."""
+    lthreads = _globals.pop('threads')
+    resqueue = _globals.pop('result_queue')
+
     for t in lthreads:
         t.join()
 
     for t in lthreads:
         t.join()
 
-    for i in range(nrpairs):
-        resp = resqueue.get()
-        assert resp.status_code == 200
+    results = []
+    while not resqueue.empty():
+        results.append(resqueue.get())
+    logger.info(results)
+    return results
+
+
+def get_next_write_transactions_response():
+    """Get http response from write-transactions rpc if available."""
+    resqueue = _globals.get('result_queue')
+
+    if not resqueue.empty():
+        return resqueue.get()
+    return None
diff --git a/csit/libraries/controller/DdbCommons.robot b/csit/libraries/controller/DdbCommons.robot
new file mode 100644 (file)
index 0000000..6d38806
--- /dev/null
@@ -0,0 +1,175 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Common keywords
+...
+...               Copyright (c) 2017 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
+Library           ${CURDIR}/../MdsalLowlevelPy.py
+Resource          ${CURDIR}/../ClusterAdmin.robot
+Resource          ${CURDIR}/../ClusterManagement.robot
+Resource          ${CURDIR}/../MdsalLowlevel.robot
+Resource          ${CURDIR}/../TemplatedRequests.robot
+Resource          ${CURDIR}/../WaitForFailure.robot
+
+*** Variables ***
+${SHARD_NAME}     default
+${SHARD_TYPE}     config
+${TRANSACTION_RATE_1K}    ${1000}
+${DURATION_30S}    ${30}
+${DURATION_10S}    ${10}
+${ID_PREFIX}      prefix-
+${TRANSACTION_TIMEOUT}    ${30}
+${TRANSACTION_TIMEOUT_2X}    ${2*${TRANSACTION_TIMEOUT}}
+${SIMPLE_TX}      ${False}
+${CHAINED_TX}     ${True}
+${HARD_TIMEOUT}    ${60}
+@{TRANSACTION_FAILED}    ${500}
+
+*** Keywords ***
+Explicit_Leader_Movement_Test_Templ
+    [Arguments]    ${leader_from}    ${leader_to}    ${shard_name}=${SHARD_NAME}    ${shard_type}=${SHARD_TYPE}
+    [Documentation]    Implements explicit leader movement test scenario.
+    ${idx_from}    ${idx_to}    ${idx_trans} =    Get_Node_Indexes_For_The_ELM_Test    ${leader_from}    ${leader_to}
+    ${ip_trans_as_list} =    BuiltIn.Create_List    ${ODL_SYSTEM_${idx_trans}_IP}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${ip_trans_as_list}    ${ID_PREFIX}    ${DURATION_30S}    ${TRANSACTION_RATE_1K}    chained_flag=${False}
+    ClusterAdmin.Make_Leader_Local    ${idx_to}    ${shard_name}    ${shard_type}
+    ${new_leader}    ${new_followers} =    BuiltIn.Wait_Until_Keyword_Succeeds    10s    1s    ClusterManagement.Verify_Shard_Leader_Elected    ${shard_name}
+    ...    ${shard_type}    ${True}    ${idx_from}
+    BuiltIn.Should_Be_Equal    ${idx_to}    ${new_leader}
+    ${resp_list} =    MdsalLowlevelPy.Wait_For_Write_Transactions
+    TemplatedRequests.Check_Status_Code    @{resp_list}[0]
+
+Get_Node_Indexes_For_The_ELM_Test
+    [Arguments]    ${leader_from}    ${leader_to}
+    [Documentation]    Return indexes for explicit leader movement test case, indexes of present to next leader node and index where transaction
+    ...    producer should be deployed.
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}
+    ${idx_from} =    BuiltIn.Set_Variable    ${leader}
+    ${idx_to} =    BuiltIn.Set_Variable    @{follower_list}[0]
+    ${idx_trans} =    BuiltIn.Set_Variable_If    "${leader_from}" == "remote" and "${leader_to}" == "remote"    @{follower_list}[1]    "${leader_from}" == "local"    ${leader}    "${leader_to}" == "local"
+    ...    @{follower_list}[0]
+    BuiltIn.Return_From_Keyword    ${idx_from}    ${idx_to}    ${idx_trans}
+
+Clean_Leader_Shutdown_Test_Templ
+    [Arguments]    ${leader_location}    ${shard_name}=${SHARD_NAME}    ${shard_type}=${SHARD_TYPE}
+    [Documentation]    Implements clean leader shutdown test scenario.
+    ${removed} =    BuiltIn.Set_Variable    ${False}
+    ${producer_idx}    ${actual_leader} =    Get_Node_Indexes_For_Clean_Leader_Shutdown_Test    ${leader_location}
+    ${producer_ip_as_list} =    BuiltIn.Create_List    ${ODL_SYSTEM_${producer_idx}_IP}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${producer_ip_as_list}    ${ID_PREFIX}    ${DURATION_30S}    ${TRANSACTION_RATE_1K}    chained_flag=${False}
+    ClusterAdmin.Remove_Shard_Replica    ${actual_leader}    ${shard_name}    member-${actual_leader}    ${shard_type}
+    ${removed} =    BuiltIn.Set_Variable    ${True}
+    ${resp_list} =    MdsalLowlevelPy.Wait_For_Write_Transactions
+    TemplatedRequests.Check_Status_Code    @{resp_list}[0]
+    [Teardown]    ClusterAdmin.Add_Shard_Replica    ${actual_leader}    ${shard_name}    ${shard_type}
+
+Get_Node_Indexes_For_Clean_Leader_Shutdown_Test
+    [Arguments]    ${leader_location}
+    [Documentation]    Return indexes for clean leader shudown test case, index where transaction producer shoudl be deployed and a shard leader index.
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}
+    ${follower_list_leangth} =    BuiltIn.Evaluate    ${NUM_ODL_SYSTEM}-1
+    BuiltIn.Length_Should_Be    ${follower_list}    ${follower_list_leangth}
+    ${producer_idx} =    BuiltIn.Set_Variable_If    "${leader_location}" == "local"    ${leader}    @{follower_list}[0]
+    BuiltIn.Return_From_Keyword    ${producer_idx}    ${leader}
+
+Leader_Isolation_Test_Templ
+    [Arguments]    ${heal_timeout}
+    [Documentation]    Implements leader isolation test scenario.
+    ${producing_transactions_time} =    BuiltIn.Set_Variable    ${${heal_timeout}+60}
+    ${all_indices} =    ClusterManagement.List_All_Indices
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${SHARD_NAME}    shard_type=${SHARD_TYPE}    member_index_list=${all_indices}
+    ${all_ip_list} =    ClusterManagement.Resolve_IP_Address_For_Members    ${all_indices}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${all_ip_list}    ${ID_PREFIX}    ${producing_transactions_time}    ${TRANSACTION_RATE_1K}    chained_flag=${SIMPLE_TX}
+    ${date_start} =    DateTime.Get_Current_Date
+    ${date_end} =    DateTime.Add_Time_To_Date    ${date_start}    ${producing_transactions_time}
+    ClusterManagement.Isolate_Member_From_List_Or_All    ${leader}
+    BuiltIn.Wait_Until_Keyword_Succeeds    10s    2s    ClusterManagement.Verify_Shard_Leader_Elected    ${SHARD_NAME}    ${SHARD_TYPE}    ${True}
+    ...    ${leader}    member_index_list=${follower_list}
+    BuiltIn.Sleep    ${heal_timeout}
+    ClusterManagement.Rejoin_Member_From_List_Or_All    ${leader}
+    BuiltIn.Wait_Until_Keyword_Succeeds    20s    2s    ClusterManagement.Get_Leader_And_Followers_For_Shard    ${SHARD_NAME}    ${SHARD_TYPE}
+    ${time_to_finish} =    Get_Seconds_To_Time    ${date_end}
+    BuiltIn.Run_Keyword_If    ${heal_timeout} < ${TRANSACTION_TIMEOUT}    Leader_Isolation_Heal_Within_Tt
+    ...    ELSE    Leader_Isolation_Heal_Default    ${time_to_finish}
+
+Leader_Isolation_Heal_Within_Tt
+    [Documentation]    The leader isolation test case end if the heal happens within transaction timeout. All write transaction
+    ...    producers shoudl finish without error.
+    ${resp_list} =    MdsalLowlevelPy.Wait_For_Write_Transactions
+    : FOR    ${resp}    IN    @{resp_list}
+    \    TemplatedRequests.Check_Status_Code    ${resp}
+
+Leader_Isolation_Heal_Default
+    [Arguments]    ${isolated_node}    ${time_to_finish}
+    [Documentation]    The leader isolation test case end. The transaction producer on isolated node shoudl fail and should be restarted.
+    Then all write transaction producers shoudl finish without error.
+    ${resp} =    MdsalLowlevelPy.Get_Next_Write_Transactions_Response
+    BuiltIn.Log    ${resp}
+    ${restart_producer_node}    BuiltIn.Create_List    ${isolated_node}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${restart_producer_node}    ${ID_PREFIX}    ${time_to_finish}    ${TRANSACTION_RATE_1K}    chained_flag=${SIMPLE_TX}
+    ${resp_list} =    MdsalLowlevelPy.Wait_For_Write_Transactions
+    : FOR    ${resp}    IN    @{resp_list}
+    \    TemplatedRequests.Check_Status_Code    ${resp}
+
+Client_Isolation_Test_Templ
+    [Arguments]    ${listener_node_role}    ${trans_chain_flag}    ${shard_name}=${SHARD_NAME}    ${shard_type}=${SHARD_TYPE}
+    [Documentation]    Implements client isolation test scenario.
+    ${all_indices} =    ClusterManagement.List_All_Indices
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}
+    ${follower1} =    Collections.Get_From_List    ${follower_list}    ${0}
+    ${client_node_dst} =    BuiltIn.Set_Variable_If    "${listener_node_role}" == "leader"    ${leader}    ${follower1}
+    ${client_node_ip} =    ClusterManagement.Resolve_IP_Address_For_Member    ${client_node_dst}
+    ${client_node_ip_as_list}    BuiltIn.Create_List    ${client_node_ip}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${client_node_ip_as_list}    ${ID_PREFIX}    ${DURATION_30S}    ${TRANSACTION_RATE_1K}    chained_flag=${trans_chain_flag}
+    ${start_date}    DateTime.Get_Current_Date
+    ${timeout_date} =    DateTime.Add_Time_To_Date    ${start_date}    ${TRANSACTION_TIMEOUT}
+    ${abort_date} =    DateTime.Add_Time_To_Date    ${start_date}    ${HARD_TIMEOUT}
+    ClusterManagement.Isolate_Member_From_List_Or_All    ${client_node_dst}
+    WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout    ${TRANSACTION_TIMEOUT}    1s    Write_Transactions_Not_Failed_Yet
+    WaitForFailure.Confirm_Keyword_Fails_Within_Timeout    3s    1s    Write_Transactions_Failed
+    ${abort_time}    Get_Seconds_To_Time    ${abort_date}
+    WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout    ${abort_time}    1s    Verify_Client_Aborted    ${False}
+    WaitForFailure.Confirm_Keyword_Fails_Within_Timeout    3s    1s    Verify_Client_Aborted    ${True}
+    [Teardown]    BuiltIn.Run Keywords    ClusterManagement.Rejoin_Member_From_List_Or_All    ${client_node_dst}
+    ...    AND    MdsalLowlevelPy.Wait_For_Write_Transactions
+
+Write_Transactions_Not_Failed_Yet
+    [Documentation]    Verify that no write-transaction rpc finished, means they are still running.
+    ${resp} =    MdsalLowlevelPy.Get_Next_Write_Transactions_Response
+    BuiltIn.Should_Be_Equal    ${None}    ${resp}    ${resp} not expected.
+
+Write_Transactions_Failed
+    [Documentation]    Verify if write-transaction failed.
+    ${resp} =    MdsalLowlevelPy.Get_Next_Write_Transactions_Response
+    Check_Status_Code    ${resp}    explicit_status_codes=${TRANSACTION_FAILED}
+
+Verify_Client_Aborted
+    [Arguments]    ${exp_aborted}
+    [Documentation]    To be reworked
+    BuiltIn.Fail    TODO: Logic to be reworked
+
+Get_Seconds_To_Time
+    [Arguments]    ${date_in_future}
+    [Documentation]    Return number of seconds remaining to ${date_in_future}.
+    ${date_now} =    DateTime.Get_Current_Date
+    ${duration} =    DateTime.Subtract_Date_From_Date    ${date_in_future}    ${date_now}
+    BuiltIn.Run_Keyword_And_Return    BuiltIn.Convert_To_Integer    ${duration}
+
+Remote_Listener_Test_Templ
+    [Arguments]    ${listener_node_role}    ${shard_name}=${SHARD_NAME}    ${shard_type}=${SHARD_TYPE}
+    [Documentation]    Implements remote listener test scenario.
+    ${all_indices} =    ClusterManagement.List_All_Indices
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${all_indices}
+    ${follower1} =    Collections.Get_From_List    ${follower_list}    ${0}
+    ${follower2} =    Collections.Get_From_List    ${follower_list}    ${1}
+    ${listener_node_dst} =    BuiltIn.Set_Variable_If    "${listener_node_role}" == "leader"    ${leader}    ${follower1}
+    MdsalLowlevel.Subscribe_Dtcl    ${listener_node_dst}
+    ${all_ip_list} =    ClusterManagement.Resolve_IP_Address_For_Members    ${all_indices}
+    MdsalLowlevelPy.Start_Write_Transactions_On_Nodes    ${all_ip_list}    ${ID_PREFIX}    ${DURATION_10S}    ${TRANSACTION_RATE_1K}    chained_flag=${SIMPLE_TX}
+    ClusterAdmin.Make_Leader_Local    ${follower1}    ${shard_name}    ${shard_type}
+    ${resp_list} =    MdsalLowlevelPy.Wait_For_Write_Transactions
+    : FOR    ${resp}    IN    @{resp_list}
+    \    TemplatedRequests.Check_Status_Code    ${resp}
+    [Teardown]    MdsalLowlevel.Unsubscribe_Dtcl    ${listener_node_dst}
diff --git a/csit/suites/controller/dom_data_broker/clean_leader_shutdown.robot b/csit/suites/controller/dom_data_broker/clean_leader_shutdown.robot
new file mode 100644 (file)
index 0000000..3dc228a
--- /dev/null
@@ -0,0 +1,31 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Clean Leader Shutdown
+...
+...               Copyright (c) 2017 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
+...
+...               The goal is to ensure that applications do not observe disruption when a shard
+...               leader is shut down cleanly. This is performed by having a steady-stream
+...               producer execute operations against the shard and then initiate leader shard
+...               shutdown, then the producer is shut down cleanly.
+Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown
+Suite Teardown    SSHLibrary.Close_All_Connections
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Default Tags      critical
+Test Template     DdbCommons.Clean_Leader_Shutdown_Test_Templ
+Library           SSHLibrary
+Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+
+*** Test Cases ***
+Local_Leader_Shutdown
+    [Documentation]    Shutdown the leader on the same node as transaction producer.
+    local
+
+Remote_Leader_Shutdown
+    [Documentation]    Shutdown the leader on different node as transaction producer.
+    remote
diff --git a/csit/suites/controller/dom_data_broker/client_isolation.robot b/csit/suites/controller/dom_data_broker/client_isolation.robot
new file mode 100644 (file)
index 0000000..8fdbd76
--- /dev/null
@@ -0,0 +1,39 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Client Isolation
+...
+...               Copyright (c) 2017 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
+...
+...               The purpose of this test is to ascertain that the failure modes of
+...               cds-access-client work as expected. This is performed by having a steady
+...               stream of transactions flowing from the frontend and isolating the node hosting
+...               the frontend from the rest of the cluster.
+Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown
+Suite Teardown    SSHLibrary.Close_All_Connections
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Default Tags      critical
+Test Template     DdbCommons.Client_Isolation_Test_Templ
+Library           SSHLibrary
+Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+
+*** Test Cases ***
+Producer_On_Shard_Leader_Node_ChainedTx
+    [Documentation]    Client isolation with producer on shard leader with chained transactions.
+    leader    ${CHAINED_TX}
+
+Producer_On_Shard_Leader_Node_SimpleTx
+    [Documentation]    Client isolation with producer on shard leader with simple transactions.
+    leader    ${SIMPLE_TX}
+
+Producer_On_Shard_Non_Leader_Node_ChainedTx
+    [Documentation]    Client isolation with producer on shard non-leader with chained transactions.
+    non-leader    ${CHAINED_TX}
+
+Producer_On_Shard_Non_Leader_Node_SimpleTx
+    [Documentation]    Client isolation with producer on shard non-leader with simple transactions.
+    non-leader    ${SIMPLE_TX}
diff --git a/csit/suites/controller/dom_data_broker/explicit_leader_movement.robot b/csit/suites/controller/dom_data_broker/explicit_leader_movement.robot
new file mode 100644 (file)
index 0000000..27faa5c
--- /dev/null
@@ -0,0 +1,35 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Explicit Leader Movement
+...
+...               Copyright (c) 2017 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
+...
+...               The goal is to ensure that applications do not observe disruption when a shard
+...               leader is moved as the result of explicit application request. This is performed
+...               by having a steady-stream producer execute operations against the shard and then
+...               initiate shard leader shutdown, then the producer is shut down cleanly.
+Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown
+Suite Teardown    SSHLibrary.Close_All_Connections
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Default Tags      critical
+Test Template     DdbCommons.Explicit_Leader_Movement_Test_Templ
+Library           SSHLibrary
+Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+
+*** Test Cases ***
+Local_To_Remote_Movement
+    [Documentation]    Leader moves from local to remote node during transaction producing.
+    local    remote
+
+Remote_To_Remote_Movement
+    [Documentation]    Leader moves from one remote to other remote node during transaction producing.
+    remote    remote
+
+Remote_To_Local_Movement
+    [Documentation]    Leader moves from remote to local node during transaction producing.
+    remote    local
diff --git a/csit/suites/controller/dom_data_broker/leader_isolation.robot b/csit/suites/controller/dom_data_broker/leader_isolation.robot
new file mode 100644 (file)
index 0000000..272b7fa
--- /dev/null
@@ -0,0 +1,30 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Leader Isolation
+...
+...               Copyright (c) 2017 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
+...
+...               The goal is to ensure the datastore succeeds in basic isolation/rejoin scenario,
+...               simulating either a network partition, or a prolonged GC pause.
+Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown
+Suite Teardown    SSHLibrary.Close_All_Connections
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Default Tags      critical
+Test Template     DdbCommons.Leader_Isolation_Test_Templ
+Library           SSHLibrary
+Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+
+*** Test Cases ***
+Healing_Within_Transaction_Timeout
+    [Documentation]    The isolated node (leader) is rejoined as soon as new leader is elected and
+    ...    and within transaction timeout.
+    ${0}
+
+Healing_After_2x_Transaction_Timeout
+    [Documentation]    The isolated node (leader) is rejoined after 2x transaction timeout.
+    ${${TRANSACTION_TIMEOUT_2X}+1}
diff --git a/csit/suites/controller/dom_data_broker/remote_listener.robot b/csit/suites/controller/dom_data_broker/remote_listener.robot
new file mode 100644 (file)
index 0000000..716056f
--- /dev/null
@@ -0,0 +1,30 @@
+*** Settings ***
+Documentation     DOMDataBroker testing: Remote Listener
+...
+...               Copyright (c) 2017 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
+...
+...               The goal is to ensure listeners do no observe disruption when the leader moves.
+...               This is performed by having a steady stream of transactions being observed by
+...               the listeners and having the leader move.
+Suite Setup       SetupUtils.Setup_Utils_For_Setup_And_Teardown
+Suite Teardown    SSHLibrary.Close_All_Connections
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown     SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
+Default Tags      critical
+Test Template     DdbCommons.Remote_Listener_Test_Templ
+Library           SSHLibrary
+Resource          ${CURDIR}/../../../libraries/controller/DdbCommons.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+
+*** Test Cases ***
+Listener_On_Shard_Leader_Node
+    [Documentation]    Listener runs on leader node when leader changed.
+    leader
+
+Listener_On_Shard_Non_Leader_Node
+    [Documentation]    Listener runs on non-leader node when leader changed.
+    non-leader
diff --git a/csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/location.uri b/csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/location.uri
new file mode 100644 (file)
index 0000000..d537015
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/cluster-admin:add-prefix-shard-replica
diff --git a/csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/post_data.xml b/csit/variables/mdsal/clusteradmin/add_prefix_shard_replica/post_data.xml
new file mode 100644 (file)
index 0000000..921061f
--- /dev/null
@@ -0,0 +1,5 @@
+<input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin">
+  <shard-prefix>$SHARD_PREFIX</shard-prefix>
+  <data-store-type>$DATA_STORE_TYPE</data-store-type>
+</input>
+
diff --git a/csit/variables/mdsal/clusteradmin/add_shard_replica/location.uri b/csit/variables/mdsal/clusteradmin/add_shard_replica/location.uri
new file mode 100644 (file)
index 0000000..e1eff69
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/cluster-admin:add-shard-replica
diff --git a/csit/variables/mdsal/clusteradmin/add_shard_replica/post_data.xml b/csit/variables/mdsal/clusteradmin/add_shard_replica/post_data.xml
new file mode 100644 (file)
index 0000000..24da549
--- /dev/null
@@ -0,0 +1,5 @@
+<input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin">
+  <shard-name>$SHARD_NAME</shard-name>
+  <data-store-type>$DATA_STORE_TYPE</data-store-type>
+</input>
+
diff --git a/csit/variables/mdsal/clusteradmin/make_leader_local/location.uri b/csit/variables/mdsal/clusteradmin/make_leader_local/location.uri
new file mode 100644 (file)
index 0000000..dcf9dba
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/cluster-admin:make-leader-local
diff --git a/csit/variables/mdsal/clusteradmin/make_leader_local/post_data.xml b/csit/variables/mdsal/clusteradmin/make_leader_local/post_data.xml
new file mode 100644 (file)
index 0000000..a38bc35
--- /dev/null
@@ -0,0 +1,4 @@
+<input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin">
+  <shard-name>$SHARD_NAME</shard-name>
+  <data-store-type>$SHARD_TYPE</data-store-type>
+</input>
diff --git a/csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/location.uri b/csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/location.uri
new file mode 100644 (file)
index 0000000..007be8e
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/cluster-admin:remove-prefix-shard-replica
diff --git a/csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/post_data.xml b/csit/variables/mdsal/clusteradmin/remove_prefix_shard_replica/post_data.xml
new file mode 100644 (file)
index 0000000..933fa5a
--- /dev/null
@@ -0,0 +1,6 @@
+<input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin">
+  <shard-prefix>$SHARD_PREFIX</shard-prefix>
+  <member-name>$MEMBER_NAME</member-name>
+  <data-store-type>$DATA_STORE_TYPE</data-store-type>
+</input>
+
diff --git a/csit/variables/mdsal/clusteradmin/remove_shard_replica/location.uri b/csit/variables/mdsal/clusteradmin/remove_shard_replica/location.uri
new file mode 100644 (file)
index 0000000..cb85202
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/cluster-admin:remove-shard-replica
diff --git a/csit/variables/mdsal/clusteradmin/remove_shard_replica/post_data.xml b/csit/variables/mdsal/clusteradmin/remove_shard_replica/post_data.xml
new file mode 100644 (file)
index 0000000..0572b9d
--- /dev/null
@@ -0,0 +1,6 @@
+<input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin">
+  <shard-name>$SHARD_NAME</shard-name>
+  <member-name>$MEMBER_NAME</member-name>
+  <data-store-type>$DATA_STORE_TYPE</data-store-type>
+</input>
+
diff --git a/csit/variables/mdsal/lowlevelrpc/add_shard_replica/location.uri b/csit/variables/mdsal/lowlevelrpc/add_shard_replica/location.uri
deleted file mode 100644 (file)
index 7f93628..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:add-shard-replica
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/add_shard_replica/post_data.xml b/csit/variables/mdsal/lowlevelrpc/add_shard_replica/post_data.xml
deleted file mode 100644 (file)
index d9df073..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<input>
-  <shard-name>$SHARD_NAME</shard-name>
-</input>
diff --git a/csit/variables/mdsal/lowlevelrpc/become_module_leader/location.uri b/csit/variables/mdsal/lowlevelrpc/become_module_leader/location.uri
deleted file mode 100644 (file)
index 7491609..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:become-module-leader
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/become_module_leader/post_data.xml b/csit/variables/mdsal/lowlevelrpc/become_module_leader/post_data.xml
deleted file mode 100644 (file)
index a7dd01b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<input>
-  <shard-name>$NAME</shard-name>
-</input>
index a7dd01bfe9e8ce65fb752c5f7ee72b966fac8430..f0f32ff0d1c00fef2ea666a41dd14e2d672ae913 100644 (file)
@@ -1,3 +1,3 @@
-<input>
-  <shard-name>$NAME</shard-name>
+<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
+  <prefix>$PREFIX</prefix>
 </input>
 </input>
diff --git a/csit/variables/mdsal/lowlevelrpc/create_prefix_shard/location.uri b/csit/variables/mdsal/lowlevelrpc/create_prefix_shard/location.uri
new file mode 100644 (file)
index 0000000..43991e3
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/odl-mdsal-lowlevel-control:add-prefix-shard
diff --git a/csit/variables/mdsal/lowlevelrpc/create_prefix_shard/post_data.xml b/csit/variables/mdsal/lowlevelrpc/create_prefix_shard/post_data.xml
new file mode 100644 (file)
index 0000000..3a5ac96
--- /dev/null
@@ -0,0 +1,4 @@
+<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
+  <prefix>$PREFIX</prefix>
+  $REPLICAS
+</input>
diff --git a/csit/variables/mdsal/lowlevelrpc/deconfigure_id_ints_shard/location.uri b/csit/variables/mdsal/lowlevelrpc/deconfigure_id_ints_shard/location.uri
deleted file mode 100644 (file)
index d652897..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:deconfigure-id-ints-shard
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/is_client_aborted/location.uri b/csit/variables/mdsal/lowlevelrpc/is_client_aborted/location.uri
deleted file mode 100644 (file)
index 3dbc9c8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:is-client-aborted
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/register_default_constant/location.uri b/csit/variables/mdsal/lowlevelrpc/register_default_constant/location.uri
deleted file mode 100644 (file)
index 7f6e207..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:register-default-constant
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/location.uri b/csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/location.uri
new file mode 100644 (file)
index 0000000..fb88de7
--- /dev/null
@@ -0,0 +1 @@
+/restconf/operations/odl-mdsal-lowlevel-control:become-prefix-leader
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/post_data.xml b/csit/variables/mdsal/lowlevelrpc/remove_prefix_shard/post_data.xml
new file mode 100644 (file)
index 0000000..f0f32ff
--- /dev/null
@@ -0,0 +1,3 @@
+<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
+  <prefix>$PREFIX</prefix>
+</input>
diff --git a/csit/variables/mdsal/lowlevelrpc/remove_shard_replica/location.uri b/csit/variables/mdsal/lowlevelrpc/remove_shard_replica/location.uri
deleted file mode 100644 (file)
index 3d53ac0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:remove-shard-replica
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/subscribe_dtcl/post_data.xml b/csit/variables/mdsal/lowlevelrpc/subscribe_dtcl/post_data.xml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/csit/variables/mdsal/lowlevelrpc/unregister_default_constant/location.uri b/csit/variables/mdsal/lowlevelrpc/unregister_default_constant/location.uri
deleted file mode 100644 (file)
index 3a8efeb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/odl-mdsal-lowlevel-control:unregister-default-constant
\ No newline at end of file
diff --git a/csit/variables/mdsal/lowlevelrpc/unsubscribe_dtcl/post_data.xml b/csit/variables/mdsal/lowlevelrpc/unsubscribe_dtcl/post_data.xml
new file mode 100644 (file)
index 0000000..e69de29
index 473ec533eee358cada6d267e7ed0e11455d8bcd5..750e422cb83c318f5f570152c1fee446fa7af231 100644 (file)
@@ -1,5 +1,6 @@
-<input>
-  <seconds>$SECONDS</seconds>
-  <transactions-per-second>$TPS</transactions-per-second>
-  <chained-transactions>$CHAINED_TRANSACTIONS</chained-transactions>
+<input xmlns="tag:opendaylight.org,2017:controller:yang:lowlevel:control">
+  <id>$ID</id>
+  <seconds>$DURATION</seconds>
+  <transactions-per-second>$RATE</transactions-per-second>
+  <chained-transactions>$CHAINED_FLAG</chained-transactions>
 </input>
 </input>