X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FMdsalLowlevel.robot;h=7af26d4c920f33f7ee52b1b309f4fa5932c7851b;hb=59849a247da401e8061bec7575908871ca755abb;hp=0ee7049440ac92853791f2cd5bbce24db117068f;hpb=d0cd46e5a33f120bf8866fac8c73006ffbc3a7bd;p=integration%2Ftest.git diff --git a/csit/libraries/MdsalLowlevel.robot b/csit/libraries/MdsalLowlevel.robot index 0ee7049440..7af26d4c92 100644 --- a/csit/libraries/MdsalLowlevel.robot +++ b/csit/libraries/MdsalLowlevel.robot @@ -24,6 +24,8 @@ ${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 +${SHUTDOWN_SHARD_REPLICA_DIR} ${LOWLEVEL_RPC_DIR}/shutdown_shard_replica +${SHUTDOWN_PREFIX_SHARD_REPLICA_DIR} ${LOWLEVEL_RPC_DIR}/shutdown_prefix_shard_replica ${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 @@ -148,10 +150,10 @@ Remove_Prefix_Shard ${text} = TemplatedRequests.Post_As_Xml_Templated ${REMOVE_PREFIX_SHARD_DIR} mapping=${mapping} session=${session} Become_Prefix_Leader - [Arguments] ${member_index} ${shard_name} ${id_prefix} + [Arguments] ${member_index} ${shard_name} [Documentation] Given node ask to become a shard leader. ${session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${member_index} - &{mapping} BuiltIn.Create_Dictionary SHARD_NAME=${shard_name} ID=${id_prefix}${member_index} + &{mapping} BuiltIn.Create_Dictionary SHARD_NAME=${shard_name} ID=prefix-0 ${text} = TemplatedRequests.Post_As_Xml_Templated ${BECOME_PREFIX_LEADER_DIR} mapping=${mapping} session=${session} Subscribe_Dtcl @@ -162,23 +164,56 @@ Subscribe_Dtcl Unsubscribe_Dtcl [Arguments] ${member_index} - [Documentation] Unsubscribe a listener from the data changes. Invoke unsubscribe-dtcl rpc. + [Documentation] Invoke unsubscribe-dtcl rpc, return copy-matches field as boolean. ${session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${member_index} - TemplatedRequests.Post_As_Xml_Templated ${UNSUBSCRIBE_DTCL_DIR} session=${session} + ${text} = TemplatedRequests.Post_As_Xml_Templated ${UNSUBSCRIBE_DTCL_DIR} session=${session} + BuiltIn.Run_Keyword_And_Return MdsalLowLevel__Parse_Matches ${text} + +Unsubscribe_Dtcl_No_Tx + [Arguments] ${member_index} + [Documentation] Unsubscribe a listener from the data changes. Expect success no notifications received. Return boolean status. + ${session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${member_index} + ${text} = TemplatedRequests.Post_As_Xml_Templated ${UNSUBSCRIBE_DTCL_DIR} session=${session} additional_allowed_status_codes=${INTERNAL_SERVER_ERROR} + BuiltIn.Run_Keyword_And_Return MdsalLowLevel__Parse_Maybe_No_Tx ${text} Subscribe_Ddtl [Arguments] ${member_index} [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} + TemplatedRequests.Post_As_Xml_Templated ${SUBSCRIBE_DDTL_DIR} session=${session} Unsubscribe_Ddtl [Arguments] ${member_index} - [Documentation] Unsubscribe DOMDataTreeListener from listening to the data changes. + [Documentation] Invoke unsubscribe-ddtl rpc, return copy-matches field as boolean. ${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} + ${text} = TemplatedRequests.Post_As_Xml_Templated ${UNSUBSCRIBE_DDTL_DIR} session=${session} + BuiltIn.Run_Keyword_And_Return MdsalLowLevel__Parse_Matches ${text} + +Unsubscribe_Ddtl_No_Tx + [Arguments] ${member_index} + [Documentation] Unsubscribe a listener from the data changes. Expect success no notifications received. Return boolean status. + ${session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${member_index} + ${text} = TemplatedRequests.Post_As_Xml_Templated ${UNSUBSCRIBE_DDTL_DIR} session=${session} additional_allowed_status_codes=${INTERNAL_SERVER_ERROR} + BuiltIn.Run_Keyword_And_Return MdsalLowLevel__Parse_Maybe_No_Tx ${text} + +MdsalLowLevel__Parse_Matches + [Arguments] ${text} + [Documentation] Interpret the \${text} as XML response to an unsubscribe call and return copy-matches as boolean. + ${xml} = XML.Parse_Xml ${text} + ${matches} = XML.Get_Element_Text ${xml} xpath=copy-matches + ${matches} = BuiltIn.Convert_To_Boolean ${matches} + BuiltIn.Return_From_Keyword ${matches} + +MdsalLowLevel__Parse_Maybe_No_Tx + [Arguments] ${text} + [Documentation] Attempt to parse the \${text} as successful unsubscribe. If that fails, extract the error message and expect no notifications. + ${status} ${message} = BuiltIn.Run_Keyword_And_Ignore_Error MdsalLowLevel__Parse_Matches ${text} + BuiltIn.Return_From_Keyword_If "${status}" == "PASS" ${message} + ${xml} = XML.Parse_Xml ${text} + ${message} = XML.Get_Element_Text ${xml} xpath=error/error-message + ${status} ${message} = BuiltIn.Run_Keyword_And_Ignore_Error BuiltIn.Should_Contain ${message} listener has not received + BuiltIn.Return_From_Keyword_If "${status}" == "PASS" ${TRUE} + [Return] ${FALSE} Start_Publish_Notifications [Arguments] ${member_index} ${gid} ${seconds} ${notif_per_sec} @@ -239,3 +274,17 @@ 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} + +Shutdown_Shard_Replica + [Arguments] ${member_index} ${shard_name} + [Documentation] Invoke shutdown-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 ${SHUTDOWN_SHARD_REPLICA_DIR} mapping=${mapping} session=${session} + +Shutdown_Prefix_Shard_Replica + [Arguments] ${member_index} ${shard_prefix} + [Documentation] Invoke shutdown-prefix-shard-replica rpc. + ${session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${member_index} + &{mapping} BuiltIn.Create_Dictionary PREFIX=${shard_prefix} + TemplatedRequests.Post_As_Xml_Templated ${SHUTDOWN_PREFIX_SHARD_REPLICA_DIR} mapping=${mapping} session=${session}