Skip to content

Add portable unit test specs for ably-go REST client#694

Open
paddybyers wants to merge 4 commits into
mainfrom
uts-experiments
Open

Add portable unit test specs for ably-go REST client#694
paddybyers wants to merge 4 commits into
mainfrom
uts-experiments

Add experimental tests for REST presence

bbc4b8d
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
GitHub Actions / Integration Test Results (Go 1.19, json) succeeded Jan 30, 2026 in 0s

397 passed, 0 failed and 6 skipped

Tests passed successfully

✅ json-integration.junit

403 tests were completed in 1279s with 397 passed, 0 failed and 6 skipped.

Test suite Passed Failed Skipped Time
github.com/ably/ably-go/ably 389✅ 6⚪ 1279s
github.com/ably/ably-go/ably/internal/ablyutil 8✅ 32ms

✅ github.com/ably/ably-go/ably

ably
  ✅ Test_errorInfo_String
  ✅ Test_errorInfo_String/error_with_all_fields
  ✅ Test_errorInfo_String/error_with_no_href
  ✅ Test_errorInfo_String/error_with_no_server
  ✅ Test_errorInfo_String/nil_error
  ✅ Test_decodeMessage
  ✅ Test_decodeMessage/foo
  ✅ Test_decodeMessage/{"foo":42}
  ✅ Test_decodeMessage/{"foo":42,"bar":["a",1.2,{"boo":"ha"}]}
  ✅ Test_decodeMessage/[{"foo":42},"qux"]
  ✅ Test_decodeMessage/3q2+7w==
  ✅ TestMsgpackExtrasJsonCompatible
  ✅ TestMsgpackDecoding
  ✅ TestMsgpackDecoding/json_array
  ✅ TestMsgpackDecoding/short_string
  ✅ TestMsgpackDecoding/200_character_string
  ✅ TestMsgpackDecoding/2000_character_string
  ✅ TestMsgpackDecoding/short_binary
  ✅ TestMsgpackDecoding/200_byte_binary
  ✅ TestMsgpackDecoding/2000_byte_binary
  ✅ TestMsgpackDecoding/an_object
  ✅ TestDeltaExtras_extractDeltaExtras
  ✅ TestDeltaExtras_extractDeltaExtras/nil_extras
  ✅ TestDeltaExtras_extractDeltaExtras/empty_extras
  ✅ TestDeltaExtras_extractDeltaExtras/no_delta_field
  ✅ TestDeltaExtras_extractDeltaExtras/valid_delta_extras
  ✅ TestDeltaExtras_extractDeltaExtras/partial_delta_extras
  ✅ TestDeltaExtras_extractDeltaExtras/invalid_delta_format
  ✅ TestMessage_withDecodedDataAndContext
  ✅ TestMessage_withDecodedDataAndContext/message_without_encoding
  ✅ TestMessage_withDecodedDataAndContext/base64_encoded_message
  ✅ TestMessage_withDecodedDataAndContext/utf-8_encoded_message
  ✅ TestMessage_withDecodedDataAndContext/json_encoded_message
  ✅ TestMessage_withDecodedDataAndContext/vcdiff_without_plugin
  ✅ TestMessage_withDecodedDataAndContext/vcdiff_without_base_payload
  ✅ TestMessage_withDecodedDataAndContext/successful_vcdiff_decoding
  ✅ TestMessage_withDecodedDataAndContext_MultipleEncodings
  ✅ TestMessage_withDecodedDataAndContext_VCDiffWithBase64
  ✅ TestRealtimeExperimentalObjects_PublishObjects
  ✅ TestRealtimeExperimentalObjects_PublishObjects/successful_publish_with_single_message
  ✅ TestRealtimeExperimentalObjects_PublishObjects/successful_publish_with_multiple_messages
  ✅ TestRealtimeExperimentalObjects_PublishObjects/error_when_no_plugin_configured
  ✅ TestRealtimeExperimentalObjects_PublishObjects/error_during_prepare_object
  ✅ TestRealtimeExperimentalObjects_PublishObjects/error_during_send
  ✅ TestRealtimeExperimentalObjects_PublishObjects/error_during_ack
  ✅ TestRealtimeExperimentalObjects_PublishObjectsContextCancellation
  ✅ TestVCDiffPlugin
  ✅ TestVCDiffPlugin/implements_VCDiffDecoder_interface
  ✅ TestVCDiffPlugin/returns_AblyVCDiffDecoder_type
  ✅ TestVCDiffPlugin/handle_empty_delta
  ✅ TestVCDiffPlugin/handle_nil_inputs
  ✅ TestVCDiffPlugin/handle_invalid_vcdiff_data
  ✅ TestVCDiffPlugin/decode_with_empty_base
  ✅ TestVCDiffPlugin_Integration
  ✅ TestVCDiffPlugin_Integration/can_be_used_as_VCDiffDecoder_in_DecodingContext
  ✅ TestVCDiffPlugin_Integration/can_be_used_with_WithVCDiffPlugin_option
  ✅ TestVCDiffPlugin_Integration/plugin_is_reusable_across_multiple_decodes
  ✅ TestAuth_BasicAuth
  ✅ TestAuth_BasicAuth/RSA2:_Should_use_basic_auth_as_default_authentication_if_an_API_key_exists
  ✅ TestAuth_BasicAuth/RSA1:_Should_connect_to_HTTPS_by_default,_trying_to_connect_with_non-TLS_should_result_in_error
  ✅ TestAuth_BasicAuth/RSA11:_API_key_should_follow_format_KEY_NAME:KEY_SECRET_in_auth_header
  ✅ TestAuth_TokenAuth
  ✅ TestAuth_TokenAuth_Renew
  ✅ TestAuth_RequestToken
  ✅ TestAuth_JWT_Token_RSA8c
  ✅ TestAuth_JWT_Token_RSA8c/Get_JWT_from_echo_server
  ✅ TestAuth_JWT_Token_RSA8c/Should_be_able_to_use_it_as_a_token
  ✅ TestAuth_JWT_Token_RSA8c/RSA8g,_RSA3d:_Should_be_able_to_authenticate_using_authURL
  ✅ TestAuth_JWT_Token_RSA8c/RSA8g,_RSA3d:_Should_be_able_to_authenticate_using_authCallback
  ✅ TestAuth_JWT_Token_RSA8c/RSA4e,_RSA4b:_Should_return_error_when_JWT_is_invalid
  ✅ TestAuth_ReuseClientID
  ✅ TestAuth_RequestToken_PublishClientID
  ✅ TestAuth_ClientID
  ✅ TestAuth_ClientID/Auth_ClientID
  ✅ TestAuth_CreateTokenRequest
  ✅ TestAuth_CreateTokenRequest/RSA9h
  ✅ TestAuth_CreateTokenRequest/RSA9h/parameters_are_optional
  ✅ TestAuth_CreateTokenRequest/RSA9h/authOptions_must_not_be_merged
  ✅ TestAuth_CreateTokenRequest/RSA9c_must_generate_a_unique_16+_character_nonce
  ✅ TestAuth_CreateTokenRequest/RSA9g_generate_a_signed_request
  ✅ TestAuth_RealtimeAccessToken
  ✅ TestAuth_IgnoreTimestamp_QueryTime
  ✅ TestAuth_RSA7c
  ✅ TestEventEmitterConcurrency
  ✅ Test_RTE3_EventEmitter_On
  ✅ Test_RTE3_EventEmitter_On/event:_qux,_data:_42
  ✅ Test_RTE3_EventEmitter_On/event:_foo,_data:_42
  ✅ Test_RTE3_EventEmitter_On/event:_bar,_data:_42
  ✅ Test_RTE4_EventEmitter_Once
  ✅ Test_RTE4_EventEmitter_Once/event:_qux,_data:_42
  ✅ Test_RTE4_EventEmitter_Once/event:_foo,_data:_42
  ✅ Test_RTE4_EventEmitter_Once/event:_bar,_data:_42
  ✅ Test_RTE5_EventEmitter_Off
  ✅ Test_RTE5_EventEmitter_Off/specific_listener
  ✅ Test_RTE5_EventEmitter_Off/specific_event
  ✅ Test_RTE5_EventEmitter_Off/all
  ✅ Test_RTE6_EventEmitter_EmitPanic
  ✅ Test_RTE6a_EventEmitter_EmitToFixedListenersCollection
  ✅ TestHTTPPaginatedFallback
  ✅ TestHTTPPaginatedFallback/request_time
  ✅ TestHTTPPaginatedResponse
  ✅ TestHTTPPaginatedResponse/request_time
  ✅ TestHTTPPaginatedResponse/request_404
  ✅ TestHTTPPaginatedResponse/request_post_get_messages
  ✅ TestHTTPPaginatedResponse/request_post_get_messages/post
  ✅ TestHTTPPaginatedResponse/request_post_get_messages/get
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c/with_a_128_keylength
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c/with_a_128_keylength/fixture_encode
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c/with_a_256_keylength
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c/with_a_256_keylength/fixture_encode
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c_TM3
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c_TM3/with_a_128_keylength
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c_TM3/with_a_128_keylength/fixture_encode
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c_TM3/with_a_256_keylength
  ✅ TestMessage_CryptoDataFixtures_RSL6a1_RSL5b_RSL5c_TM3/with_a_256_keylength/fixture_encode
  ✅ TestRealtime_ChannelParams_DeltaSupport
  ✅ TestDelta_PluginBasicFunctionality
  ✅ TestDeltaPluginRecovery
  ✅ TestDeltaPluginRecovery/WithMessagesOutOfOrder
  ✅ TestDeltaPluginRecovery/WithCorruptDelta
  ✅ TestRealtimeChannel_Publish
  ✅ TestRealtimeChannel_PublishAsync
  ✅ TestRealtimeChannel_Subscribe
  ✅ TestRealtimeChannel_SubscriptionFilters
  ✅ TestRealtimeChannel_AttachWhileDisconnected
  ✅ TestRealtimeChannel_ShouldSetProvidedReadLimit
  ✅ TestRealtimeChannel_SetDefaultReadLimitIfServerHasNoLimit
  ✅ TestRealtimeChannel_ShouldReturnErrorIfReadLimitExceeded
  ✅ TestRealtimeChannels_Release
  ✅ TestRealtimeChannel_RTL2_ChannelEventForStateChange
  ✅ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_ATTACHING
  ✅ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_ATTACHED
  ✅ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_DETACHING
  ✅ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_DETACHED
  ⚪ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_SUSPENDED
  ⚪ TestRealtimeChannel_RTL2_ChannelEventForStateChange/on_UPDATE
  ✅ TestRealtimeChannel_RTL4_Attach
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4a:_If_already_attached,_nothing_is_done
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4b:_If_connection_state_is_INITIALIZED,_CLOSING,_CLOSED_returns_error
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4b:_If_connection_state_is_FAILED,_returns_error
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4b:_If_connection_state_is_SUSPENDED,_returns_error
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4c_RTL4d:_If_connected,_should_get_attached_successfully
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4d_:_should_return_error_on_FAILED_while_attaching_channel
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4d_:_should_return_error_on_DETACHED_while_attaching_channel
  ⚪ TestRealtimeChannel_RTL4_Attach/RTL4d_:_should_return_error_on_SUSPENDED_while_attaching_channel
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4e:_Transition_to_failed_if_no_attach_permission
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4f:_Channel_attach_timeout_if_not_received_within_realtime_request_timeout
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4g:_If_channel_in_FAILED_state,_set_err_to_null_and_proceed_with_attach
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4h:_If_channel_is_ATTACHING,_listen_to_the_attach_event_and_don't_send_attach_event
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4h:_If_channel_is_DETACHING,_do_attach_after_completion_of_request
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4i_:_If_connection_state_is_CONNECTING,_do_ATTACH_after_CONNECTED
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4i_:_If_connection_state_is_DISCONNECTED,_do_ATTACH_after_CONNECTED
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4j_RTL13a:_If_channel_attach_is_not_a_clean_attach,_should_set_ATTACH_RESUME_in_the_ATTACH_message
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4j1:_AttachResume_should_be_True_when_Attached_(Clean_ATTACH)
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4j2:_Rewind_flag_should_allow_to_receive_historic_messages
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4k:_If_params_given_channel_options,_should_be_sent_in_ATTACH_message
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4k1:_If_params_given_channel_options,_should_be_exposed_as_readonly_field_on_ATTACHED_message
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4l:_If_modes_provided_in_channelOptions,_should_be_encoded_as_bitfield_and_set_as_flags_field_of_ATTACH_message
  ✅ TestRealtimeChannel_RTL4_Attach/RTL4m:_If_modes_provides_while_attach,_should_receive_modes_in_attached_message
  ✅ TestRealtimeChannel_RTL5_Detach
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5a:_If_channel_is_INITIALIZED_or_DETACHED,_do_nothing
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5b:_If_channel_state_is_FAILED,_return_error
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5d_RTL5e:_If_connected,_should_do_successful_detach_with_server
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5e:_return_error_if_channel_detach_fails
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5f:_return_error_on_request_timeout
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5g:_If_connection_state_CLOSING_or_FAILED,_should_return_error
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5h_:_If_Connection_state_CONNECTING,_queue_the_DETACH_message_and_send_on_CONNECTED
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5h,_RTN19b:_If_Connection_state_DISCONNECTED,_queue_the_DETACH_message_and_send_on_CONNECTED
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5i:_If_channel_in_DETACHING_or_ATTACHING_state,_do_detach_after_completion_of_operation
  ⚪ TestRealtimeChannel_RTL5_Detach/RTL5j:_if_channel_state_is_SUSPENDED,_immediately_transition_to_DETACHED_state
  ✅ TestRealtimeChannel_RTL5_Detach/RTL5k:_When_receive_ATTACH_in_detaching_state,_send_new_DETACH_message
  ✅ TestRealtimeChannel_RTL6c1_PublishNow
  ✅ TestRealtimeChannel_RTL6c1_PublishNow/when_INITIALIZED
  ✅ TestRealtimeChannel_RTL6c1_PublishNow/when_ATTACHING
  ✅ TestRealtimeChannel_RTL6c1_PublishNow/when_ATTACHED
  ✅ TestRealtimeChannel_RTL6c1_PublishNow/when_DETACHING
  ✅ TestRealtimeChannel_RTL6c1_PublishNow/when_DETACHED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_INITIALIZED,_channel_is_INITIALIZED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_CONNECTING,_channel_is_INITIALIZED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_CONNECTING,_channel_is_ATTACHING
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_DISCONNECTED,_channel_is_INITIALIZED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_DISCONNECTED,_channel_is_ATTACHING
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_DISCONNECTED,_channel_is_ATTACHED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_DISCONNECTED,_channel_is_DETACHING
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_DISCONNECTED,_channel_is_DETACHED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_CONNECTING,_channel_is_ATTACHED
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_CONNECTING,_channel_is_DETACHING
  ✅ TestRealtimeChannel_RTL6c2_PublishEnqueue/when_connection_is_CONNECTING,_channel_is_DETACHED
  ✅ TestRealtimeChannel_RTL6c4_PublishFail
  ✅ TestRealtimeChannel_RTL6c4_PublishFail/when_connection_is_SUSPENDED,_channel_is_INITIALIZED
  ✅ TestRealtimeChannel_RTL6c5_NoImplicitAttach
  ✅ TestRealtimeChannel_RTL2f_RTL12_HandleResume
  ✅ TestRealtimeChannel_RTL2f_RTL12_HandleResume/RTL2f:_when_flag_has_presence_is_provided,_set_channelChangeState_resume_to_false
  ✅ TestRealtimeChannel_RTL2f_RTL12_HandleResume/RTL2f:_when_flag_has_backlog_is_provided,_set_channelChangeState_resume_to_false
  ✅ TestRealtimeChannel_RTL2f_RTL12_HandleResume/RTL2f:_when_flag_resumed_is_provided,_set_channelChangeState_resume_to_true
  ✅ TestRealtimeChannel_RTL2f_RTL12_HandleResume/RTL12:_when_RE-ATTACH_with_error,_set_ChannelEventUpdated
  ✅ TestRealtimeChannel_RTL13_HandleDetached
  ✅ TestRealtimeChannel_RTL13_HandleDetached/RTL13a:_when_ATTACHED,_successful_reattach
  ✅ TestRealtimeChannel_RTL13_HandleDetached/RTL13b:_when_ATTACHING
  ✅ TestRealtimeChannel_RTL13_HandleDetached/RTL13c:_stop_on_non-CONNECTED
  ✅ TestRealtimeChannel_RTL17_IgnoreMessagesWhenNotAttached
  ✅ TestRealtimeChannel_RTL17_IgnoreMessagesWhenNotAttached/Shouldn't_receive_message_when_not_attached
  ✅ Test_UpdateEmptyMessageFields_TM2a_TM2c_TM2f
  ✅ TestRealtimeChannel_RTL14_HandleChannelError
  ✅ TestRealtimeChannel_RTL14_HandleChannelError/RTL14:_when_Error,_should_transition_to_failed_state
  ✅ TestRealtime_RealtimeHost
  ✅ TestRealtime_RealtimeHost/REC1b_with_endpoint_option
  ✅ TestRealtime_RealtimeHost/REC1d2_with_legacy_realtimeHost_option
  ✅ TestRealtime_RSC7_AblyAgent
  ✅ TestRealtime_RSC7_AblyAgent/using_endpoint_option
  ✅ TestRealtime_RSC7_AblyAgent/using_endpoint_option/RSC7d3_:_Should_set_ablyAgent_header_with_correct_identifiers
  ✅ TestRealtime_RSC7_AblyAgent/using_endpoint_option/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents
  ✅ TestRealtime_RSC7_AblyAgent/using_endpoint_option/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents_missing_version
  ✅ TestRealtime_RSC7_AblyAgent/using_legacy_options
  ✅ TestRealtime_RSC7_AblyAgent/using_legacy_options/RSC7d3_:_Should_set_ablyAgent_header_with_correct_identifiers
  ✅ TestRealtime_RSC7_AblyAgent/using_legacy_options/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents
  ✅ TestRealtime_RSC7_AblyAgent/using_legacy_options/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents_missing_version
  ✅ TestRealtime_RTN17_HostFallback
  ✅ TestRealtime_RTN17_Integration_HostFallback_Internal_Server_Error
  ✅ TestRealtime_RTN17_Integration_HostFallback_Timeout
  ✅ TestRealtime_multiple
  ✅ TestRealtime_DontCrashOnCloseWhenEchoOff
  ✅ TestRealtimeConn_AutoConnect_And_Close
  ✅ TestRealtimeConn_No_AutoConnect
  ✅ TestRealtimeConn_AlreadyConnected
  ✅ TestRealtimeConn_AuthError
  ✅ TestRealtimeConn_ReceiveTimeout
  ✅ TestRealtimeConn_BreakConnLoopOnInactiveState
  ✅ TestRealtimeConn_BreakConnLoopOnInactiveState/error
  ✅ TestRealtimeConn_BreakConnLoopOnInactiveState/closed
  ✅ TestRealtimeConn_SendErrorReconnects
  ✅ TestRealtimeConn_ReconnectFromSuspendedState
  ✅ TestRealtimeConn_PreviousConnectionsAreClosed
  ✅ Test_RTN2_WebsocketQueryParams
  ✅ Test_RTN2_WebsocketQueryParams/RTN2a:_format_should_be_msgPack_or_json
  ✅ Test_RTN2_WebsocketQueryParams/RTN2b:_echo_should_be_true_by_default
  ✅ Test_RTN2_WebsocketQueryParams/RTN2d:_clientId_contains_provided_clientId
  ✅ Test_RTN2_WebsocketQueryParams/RTN2e:_depending_on_the_auth_scheme,_accessToken_contains_token_string_or_key_contains_api_key
  ✅ Test_RTN2_WebsocketQueryParams/RTN2f:_api_version_v_should_be_the_API_version
  ✅ Test_RTN3_ConnectionAutoConnect
  ✅ Test_RTN4a_ConnectionEventForStateChange
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_CONNECTING
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_CONNECTED
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_DISCONNECTED
  ⚪ Test_RTN4a_ConnectionEventForStateChange/on_SUSPENDED
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_CLOSING
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_CLOSED
  ✅ Test_RTN4a_ConnectionEventForStateChange/on_FAILED
  ✅ Test_RTN6_Connected_When_CONNECTED_Msg_Received
  ✅ TestRealtimeConn_RTN12_Connection_Close
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12a:_transition_to_closed_on_connection_close
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12b:_transition_to_closed_on_close_request_timeout
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12c:_transition_to_closed_on_transport_error
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12d_:_should_abort_reconnection_timer_while_disconnected_on_closed
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12d:_should_abort_reconnection_timer_while_suspended_on_closed
  ✅ TestRealtimeConn_RTN12_Connection_Close/RTN12f:_transition_to_closed_when_close_is_called_intermittently
  ✅ TestRealtimeConn_RTN15a_ReconnectOnEOF
  ✅ TestRealtimeConn_RTN15b
  ✅ TestRealtimeConn_RTN15c6
  ✅ TestRealtimeConn_RTN15c7_attached
  ✅ TestRealtimeConn_RTN15d_MessageRecovery
  ✅ TestRealtimeConn_RTN15e_ConnKeyUpdatedOnReconnect
  ✅ TestRealtimeConn_RTN15g_NewConnectionOnStateLost
  ✅ TestRealtimeConn_RTN15h1_OnDisconnectedCannotRenewToken
  ✅ TestRealtimeConn_RTN15h2_ReauthFails
  ✅ TestRealtimeConn_RTN15h2_ReauthWithBadToken
  ✅ TestRealtimeConn_RTN15h2_Success
  ✅ TestRealtimeConn_RTN15h3_Success
  ✅ TestRealtimeConn_RTN22a_RTN15h2_Integration_ServerInitiatedAuth
  ✅ TestRealtimeConn_RTN22_RTC8_Integration_ServerInitiatedAuth
  ✅ TestRealtimeConn_RTN15i_OnErrorWhenConnected
  ✅ TestRealtimeConn_RTN16
  ✅ TestRealtimeConn_RTN23
  ✅ TestRealtimeConn_RTN14c_ConnectedTimeout
  ⚪ TestRealtimeConn_RTN14a
  ✅ TestRealtimeConn_RTN14b
  ✅ TestRealtimeConn_RTN14b/renewable_token_that_fails_to_renew_with_token_error
  ✅ TestRealtimeConn_RTN14b/renewable_token,_consecutive_token_errors
  ✅ TestRealtimeConn_RTN14g
  ✅ TestRealtimeConn_RTN14g/Non_RTN14b_error
  ✅ TestRealtimeConn_RTN14e
  ✅ TestRealtimeConn_RTN19b
  ✅ TestRealtimeConn_RTN19a
  ✅ TestRealtimeConn_RTN24_RTN21_RTC8a_RTN4h_Override_ConnectionDetails_On_Connected
  ✅ Test_RTN7b_ACK_NACK
  ✅ TestImplicitNACK
  ✅ TestIdempotentACK
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a1:_Successful_reauth_with_more_capabilities
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a1:_Successful_reauth_with_more_capabilities#01
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a1:_Unsuccessful_reauth_with_capabilities_downgrade
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a3:_Authorize_waits_for_connection_update
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a4,_RSA3d:_reauthorize_with_JWT_token
  ✅ TestRealtimeConn_RTC8a_ExplicitAuthorizeWhileConnected/RTC8a2:_Failed_reauth_moves_connection_to_FAILED
  ✅ TestRealtimePresence_Sync
  ✅ TestRealtimePresence_EnsureChannelIsAttached
  ✅ TestRealtimePresence_Presence_Enter_Update_Leave
  ✅ TestRealtimePresence_ServerSynthesized_Leave
  ✅ Test_ShouldEncodeRecoveryKeyContextObject
  ✅ Test_ShouldDecodeRecoveryKeyToRecoveryKeyContextObject
  ✅ Test_ShouldReturnNullRecoveryContextWhileDecodingFaultyRecoveryKey
  ✅ TestRESTChannel
  ✅ TestRESTChannel/Publish
  ✅ TestRESTChannel/Publish/is_available_in_the_history
  ✅ TestRESTChannel/PublishMultiple
  ✅ TestRESTChannel/encryption
  ✅ TestIdempotentPublishing
  ✅ TestIdempotentPublishing/when_ID_is_not_included_(#RSL1k2)
  ✅ TestIdempotentPublishing/when_ID_is_included_(#RSL1k2,_#RSL1k5)
  ✅ TestIdempotentPublishing/multiple_messages_in_one_publish_operation_(#RSL1k3)
  ✅ TestIdempotentPublishing/multiple_messages_in_one_publish_operation_with_IDs_following_the_required_format_described_in_RSL1k1_(#RSL1k3)
  ✅ TestIdempotentPublishing/the_ID_is_populated_with_a_random_ID_and_serial_0_from_this_lib_(#RSL1k1)
  ✅ TestIdempotentPublishing/publishing_a_batch_of_messages
  ✅ TestIdempotent_retry
  ✅ TestIdempotent_retry/when_there_is_a_network_failure_triggering_an_automatic_retry_(#RSL1k4)
  ✅ TestIdempotent_retry/when_there_is_a_network_failure_triggering_an_automatic_retry_(#RSL1k4)/two_REST_publish_retries_result_in_only_one_message_being_published'
  ✅ TestIdempotent_retry/when_there_is_a_network_failure_triggering_an_automatic_retry_(#RSL1k4)/or_multiple_messages_in_one_publish_operation'
  ✅ TestRSL1f1
  ✅ TestRSL1g
  ✅ TestRSL1g/RSL1g1b
  ✅ TestRSL1g/RSL1g2
  ✅ TestRSL1g/RSL1g3
  ✅ TestHistory_RSL2_RSL2b3
  ✅ TestHistory_RSL2_RSL2b3/limit=2
  ✅ TestHistory_RSL2_RSL2b3/limit=3
  ✅ TestHistory_RSL2_RSL2b3/limit=20
  ✅ TestHistory_Direction_RSL2b2
  ✅ TestHistory_Direction_RSL2b2/direction=backwards
  ✅ TestHistory_Direction_RSL2b2/direction=forwards
  ✅ TestGetChannelLifecycleStatus_RSL8
  ✅ TestGetChannelLifecycleStatus_RSL8/Test_Channel_Status_after_Publish
  ✅ TestRestClient
  ✅ TestRestClient/encoding_messages
  ✅ TestRestClient/encoding_messages/json
  ✅ TestRestClient/encoding_messages/msgpack
  ✅ TestRestClient/Time
  ✅ TestRestClient/Stats
  ✅ TestRSC7
  ✅ TestRSC7/must_set_version_header
  ✅ TestRest_RSC7_AblyAgent
  ✅ TestRest_RSC7_AblyAgent/RSC7d2_:_Should_set_ablyAgent_header_with_correct_identifiers
  ✅ TestRest_RSC7_AblyAgent/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents
  ✅ TestRest_RSC7_AblyAgent/RSC7d6_:_Should_set_ablyAgent_header_with_custom_agents_missing_version
  ✅ TestRest_RSC15_HostFallback
  ✅ TestRest_RSC15_HostFallback/RSC15a,_RSC15b,_RSC15d,_RSC15g3:_must_use_alternative_host
  ✅ TestRest_RSC15_HostFallback/RSC15l2_must_use_alternative_host_on_timeout
  ✅ TestRest_RSC15_HostFallback/RSC15l1_must_use_alternative_host_on_host_unresolvable_or_unreachable
  ✅ TestRest_RSC15_HostFallback/rsc15b
  ✅ TestRest_RSC15_HostFallback/rsc15b/must_not_occur_when_default_rest.ably.io_is_overridden
  ✅ TestRest_RSC15_HostFallback/rsc15b/must_occur_when_fallbackHostsUseDefault_is_true
  ✅ TestRest_RSC15_HostFallback/rsc15b/must_occur_when_fallbackHosts_is_set
  ✅ TestRest_RSC15_HostFallback/RSC15e_must_start_with_default_host
  ✅ TestRest_RSC15_HostFallback/must_not_occur_when_FallbackHosts_is_an_empty_array
  ✅ TestRest_rememberHostFallback
  ✅ TestRest_rememberHostFallback/remember_success_host_RSC15f
  ✅ TestRESTChannels_RSN1
  ✅ TestRESTChannels_RSN1/RSN3_RSN3a__must_create_new_channels_when_they_don't_exist
  ✅ TestRESTChannels_RSN1/RSN4_RSN4a_must_release_channels
  ✅ TestFixConnLeak_ISSUE89
  ✅ TestStatsPagination_RSC6a_RSCb3
  ✅ TestStatsPagination_RSC6a_RSCb3/limit=2
  ✅ TestStatsPagination_RSC6a_RSCb3/limit=3
  ✅ TestStatsPagination_RSC6a_RSCb3/limit=20
  ✅ TestStats_StartEnd_RSC6b1
  ✅ TestStats_Direction_RSC6b2
  ✅ TestStats_Direction_RSC6b2/direction=backwards
  ✅ TestStats_Direction_RSC6b2/direction=forwards
  ✅ TestStats_Unit_RSC6b4
  ✅ TestPresenceHistory_RSP4_RSP4b3
  ✅ TestPresenceHistory_RSP4_RSP4b3/limit=2
  ✅ TestPresenceHistory_RSP4_RSP4b3/limit=3
  ✅ TestPresenceHistory_RSP4_RSP4b3/limit=20
  ✅ TestPresenceHistory_Direction_RSP4b2
  ✅ TestPresenceHistory_Direction_RSP4b2/direction=backwards
  ✅ TestPresenceHistory_Direction_RSP4b2/direction=forwards
  ✅ TestPresenceGet_RSP3_RSP3a1
  ✅ TestPresenceGet_RSP3_RSP3a1/limit=2
  ✅ TestPresenceGet_RSP3_RSP3a1/limit=3
  ✅ TestPresenceGet_RSP3_RSP3a1/limit=20
  ✅ TestPresenceGet_ClientID_RSP3a2
  ✅ TestPresenceGet_ClientID_RSP3a2/clientID=client_bool
  ✅ TestPresenceGet_ClientID_RSP3a2/clientID=client_string
  ✅ TestPresenceGet_ConnectionID_RSP3a3
  ✅ TestRealtime_RTN17_HostFallback/RTN17a:_First_attempt_should_be_made_on_default_primary_host
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour
  ✅ TestRealtime_RTN17_HostFallback/RTN17c:_Verifies_internet_connection_is_active_in_case_of_error_necessitating_use_of_an_alternative_host
  ✅ TestRealtime_RTN17_HostFallback/RTN17d:_Check_for_compatible_errors_before_attempting_to_reconnect_to_a_fallback_host
  ✅ TestRealtime_RTN17_HostFallback/RTN17e:_Same_fallback_host_should_be_used_for_REST_as_Realtime_Fallback_Host_for_a_given_active_connection
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour/apply_when_default_realtime_endpoint_is_not_overridden,_port/tlsport_not_set
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour/does_not_apply_when_endpoint_with_fqdn_is_used
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour/does_not_apply_when_legacy_custom_realtimeHost_is_used
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour/apply_when_fallbacks_are_provided
  ✅ TestRealtime_RTN17_HostFallback/RTN17b:_Fallback_behaviour/apply_when_fallbackHostUseDefault_is_true,_even_if_legacy_realtimeHost_is_set

✅ github.com/ably/ably-go/ably/internal/ablyutil

ablyutil
  ✅ Test_string
  ✅ Test_string/String_array_Shuffle
  ✅ Test_string/String_array_contains
  ✅ Test_string/Empty_String
  ✅ TestHashSet
  ✅ TestHashSet/Add_should_not_duplicate_entries
  ✅ TestHashSet/Should_check_if_item_is_present
  ✅ TestHashSet/Should_remove_element