<testsuites name="Mocha Tests" time="690.824" tests="619" failures="2" skipped="38">
  <testsuite name="Root Suite" timestamp="2024-10-24T16:33:38" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/api" timestamp="2024-10-24T16:33:38" tests="5" file="/home/runner/work/ably-js/ably-js/test/realtime/api.test.js" time="0.010" failures="0">
    <testcase name="realtime/api Client constructors" time="0.000" classname="Client constructors">
    </testcase>
    <testcase name="realtime/api constructor without any arguments" time="0.000" classname="constructor without any arguments">
    </testcase>
    <testcase name="realtime/api Crypto" time="0.000" classname="Crypto">
    </testcase>
    <testcase name="realtime/api Message" time="0.000" classname="Message">
    </testcase>
    <testcase name="realtime/api PresenceMessage" time="0.000" classname="PresenceMessage">
    </testcase>
  </testsuite>
  <testsuite name="realtime/auth" timestamp="2024-10-24T16:33:38" tests="83" file="/home/runner/work/ably-js/ably-js/test/realtime/auth.test.js" time="235.120" failures="1">
    <testcase name="realtime/auth authbase0" time="0.078" classname="authbase0">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_json" time="0.371" classname="auth_useAuthUrl_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_post_json" time="0.161" classname="auth_useAuthUrl_post_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_plainText" time="0.306" classname="auth_useAuthUrl_plainText">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenRequestResponse" time="0.201" classname="auth_useAuthCallback_tokenRequestResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenDetailsResponse" time="0.115" classname="auth_useAuthCallback_tokenDetailsResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenStringResponse" time="0.126" classname="auth_useAuthCallback_tokenStringResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_mixed_authParams_qsParams" time="0.176" classname="auth_useAuthUrl_mixed_authParams_qsParams">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance" time="0.047" classname="auth_clientid_inheritance">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance2" time="0.014" classname="auth_clientid_inheritance2">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance3" time="0.154" classname="auth_clientid_inheritance3">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance4" time="0.053" classname="auth_clientid_inheritance4">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance5" time="0.054" classname="auth_clientid_inheritance5">
    </testcase>
    <testcase name="realtime/auth authCallback_error" time="0.002" classname="authCallback_error">
    </testcase>
    <testcase name="realtime/auth authCallback_timeout" time="0.101" classname="authCallback_timeout">
    </testcase>
    <testcase name="realtime/auth authCallback_nothing" time="0.001" classname="authCallback_nothing">
    </testcase>
    <testcase name="realtime/auth authCallback_malformed" time="0.000" classname="authCallback_malformed">
    </testcase>
    <testcase name="realtime/auth authCallback_too_long_string" time="0.003" classname="authCallback_too_long_string">
    </testcase>
    <testcase name="realtime/auth authCallback_empty_string" time="0.000" classname="authCallback_empty_string">
    </testcase>
    <testcase name="realtime/auth authUrl_timeout" time="0.101" classname="authUrl_timeout">
    </testcase>
    <testcase name="realtime/auth authUrl_404" time="0.028" classname="authUrl_404">
    </testcase>
    <testcase name="realtime/auth authUrl_wrong_content_type" time="0.008" classname="authUrl_wrong_content_type">
    </testcase>
    <testcase name="realtime/auth authUrl_401" time="0.075" classname="authUrl_401">
    </testcase>
    <testcase name="realtime/auth authUrl_double_encoded" time="0.076" classname="authUrl_double_encoded">
    </testcase>
    <testcase name="realtime/auth authUrl_403" time="0.076" classname="authUrl_403">
    </testcase>
    <testcase name="realtime/auth authUrl_403_custom_error" time="0.075" classname="authUrl_403_custom_error">
    </testcase>
    <testcase name="realtime/auth authUrl_403_previously_active" time="0.297" classname="authUrl_403_previously_active">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_web_socket_binary_transport" time="5.005" classname="auth_token_expires_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_web_socket_text_transport" time="5.005" classname="auth_token_expires_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_comet_binary_transport" time="5.010" classname="auth_token_expires_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_comet_text_transport" time="5.009" classname="auth_token_expires_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_binary_transport" time="5.005" classname="auth_token_expires_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_expires_with_text_transport" time="5.007" classname="auth_token_expires_with_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_query_time_once" time="0.016" classname="auth_query_time_once">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_web_socket_binary_transport" time="10.214" classname="auth_tokenDetails_expiry_with_authcallback_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_web_socket_text_transport" time="5.120" classname="auth_tokenDetails_expiry_with_authcallback_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_comet_binary_transport" time="5.073" classname="auth_tokenDetails_expiry_with_authcallback_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_comet_text_transport" time="5.111" classname="auth_tokenDetails_expiry_with_authcallback_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_binary_transport" time="31.750" classname="auth_tokenDetails_expiry_with_authcallback_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback_with_text_transport" time="5.056" classname="auth_tokenDetails_expiry_with_authcallback_with_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_web_socket_binary_transport" time="5.058" classname="auth_token_string_expiry_with_authcallback_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_web_socket_text_transport" time="5.056" classname="auth_token_string_expiry_with_authcallback_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_comet_binary_transport" time="5.083" classname="auth_token_string_expiry_with_authcallback_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_comet_text_transport" time="5.131" classname="auth_token_string_expiry_with_authcallback_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_binary_transport" time="5.120" classname="auth_token_string_expiry_with_authcallback_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback_with_text_transport" time="5.059" classname="auth_token_string_expiry_with_authcallback_with_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_web_socket_binary_transport" time="5.006" classname="auth_token_string_expiry_with_token_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_web_socket_text_transport" time="60.009" classname="auth_token_string_expiry_with_token_with_web_socket_text_transport">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/auth.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/auth.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_comet_binary_transport" time="5.008" classname="auth_token_string_expiry_with_token_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_comet_text_transport" time="5.009" classname="auth_token_string_expiry_with_token_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_binary_transport" time="5.006" classname="auth_token_string_expiry_with_token_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token_with_text_transport" time="5.006" classname="auth_token_string_expiry_with_token_with_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_web_socket_binary_transport" time="5.167" classname="auth_expired_token_string_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_web_socket_text_transport" time="0.165" classname="auth_expired_token_string_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_comet_binary_transport" time="0.157" classname="auth_expired_token_string_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_comet_text_transport" time="0.150" classname="auth_expired_token_string_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_binary_transport" time="0.156" classname="auth_expired_token_string_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string_with_text_transport" time="0.202" classname="auth_expired_token_string_with_text_transport">
    </testcase>
    <testcase name="realtime/auth authorize_updates_stored_details" time="0.000" classname="authorize_updates_stored_details">
    </testcase>
    <testcase name="realtime/auth mocked_reauth" time="0.083" classname="mocked_reauth">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid" time="0.325" classname="auth_jwt_with_clientid">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid_application_jwt" time="0.108" classname="auth_jwt_with_clientid_application_jwt">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_subscribe_only_capability" time="0.165" classname="auth_jwt_with_subscribe_only_capability">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_publish_capability" time="0.187" classname="auth_jwt_with_publish_capability">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_expires" time="4.389" classname="auth_jwt_with_token_that_expires">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_renews" time="5.083" classname="auth_jwt_with_token_that_renews">
    </testcase>
    <testcase name="realtime/auth init_client_with_simple_jwt_token" time="0.117" classname="init_client_with_simple_jwt_token">
    </testcase>
    <testcase name="realtime/auth reauth_consistently_expired_token" time="3.121" classname="reauth_consistently_expired_token">
    </testcase>
    <testcase name="realtime/auth expired_token_no_autoremove_when_dont_have_servertime" time="0.057" classname="expired_token_no_autoremove_when_dont_have_servertime">
    </testcase>
    <testcase name="realtime/auth expired_token_autoremove_when_have_servertime" time="0.068" classname="expired_token_autoremove_when_have_servertime">
    </testcase>
    <testcase name="realtime/auth multiple_concurrent_authorize" time="0.133" classname="multiple_concurrent_authorize">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_web_socket_binary_transport" time="0.071" classname="authorize_immediately_after_init_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_web_socket_text_transport" time="0.069" classname="authorize_immediately_after_init_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_comet_binary_transport" time="0.071" classname="authorize_immediately_after_init_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_comet_text_transport" time="0.064" classname="authorize_immediately_after_init_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_binary_transport" time="0.076" classname="authorize_immediately_after_init_with_binary_transport">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init_with_text_transport" time="0.064" classname="authorize_immediately_after_init_with_text_transport">
    </testcase>
  </testsuite>
  <testsuite name="realtime/channel" timestamp="2024-10-24T16:37:34" tests="119" file="/home/runner/work/ably-js/ably-js/test/realtime/channel.test.js" time="59.397" failures="0">
    <testcase name="realtime/channel channelinit0_with_web_socket_binary_transport" time="0.043" classname="channelinit0_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelinit0_with_web_socket_text_transport" time="0.043" classname="channelinit0_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelinit0_with_comet_binary_transport" time="0.046" classname="channelinit0_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelinit0_with_comet_text_transport" time="0.045" classname="channelinit0_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelinit0_with_binary_transport" time="0.052" classname="channelinit0_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelinit0_with_text_transport" time="0.045" classname="channelinit0_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_web_socket_binary_transport" time="0.127" classname="channelattach0_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_web_socket_text_transport" time="0.053" classname="channelattach0_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_comet_binary_transport" time="0.103" classname="channelattach0_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_comet_text_transport" time="0.093" classname="channelattach0_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_binary_transport" time="0.051" classname="channelattach0_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach0_with_text_transport" time="0.047" classname="channelattach0_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_web_socket_binary_transport" time="0.082" classname="channelattach2_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_web_socket_text_transport" time="0.051" classname="channelattach2_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_comet_binary_transport" time="0.086" classname="channelattach2_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_comet_text_transport" time="0.095" classname="channelattach2_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_binary_transport" time="0.051" classname="channelattach2_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach2_with_text_transport" time="0.048" classname="channelattach2_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_web_socket_binary_transport" time="1.055" classname="channelattachempty_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_web_socket_text_transport" time="1.051" classname="channelattachempty_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_comet_binary_transport" time="1.075" classname="channelattachempty_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_comet_text_transport" time="1.075" classname="channelattachempty_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_binary_transport" time="1.062" classname="channelattachempty_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachempty_with_text_transport" time="1.055" classname="channelattachempty_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_web_socket_binary_transport" time="1.058" classname="channelattachinvalid_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_web_socket_text_transport" time="1.055" classname="channelattachinvalid_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_comet_binary_transport" time="1.079" classname="channelattachinvalid_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_comet_text_transport" time="1.078" classname="channelattachinvalid_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_binary_transport" time="1.053" classname="channelattachinvalid_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid_with_text_transport" time="1.050" classname="channelattachinvalid_with_text_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_web_socket_binary_transport" time="0.060" classname="publish_no_attach_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_web_socket_text_transport" time="0.053" classname="publish_no_attach_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_comet_binary_transport" time="0.081" classname="publish_no_attach_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_comet_text_transport" time="0.082" classname="publish_no_attach_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_binary_transport" time="0.057" classname="publish_no_attach_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel publish_no_attach_with_text_transport" time="0.055" classname="publish_no_attach_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_web_socket_binary_transport" time="0.052" classname="channelattach_publish_invalid_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_web_socket_text_transport" time="0.053" classname="channelattach_publish_invalid_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_comet_binary_transport" time="0.078" classname="channelattach_publish_invalid_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_comet_text_transport" time="0.072" classname="channelattach_publish_invalid_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_binary_transport" time="0.051" classname="channelattach_publish_invalid_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid_with_text_transport" time="0.051" classname="channelattach_publish_invalid_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_web_socket_binary_transport" time="1.059" classname="channelattach_invalid_twice_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_web_socket_text_transport" time="1.063" classname="channelattach_invalid_twice_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_comet_binary_transport" time="1.085" classname="channelattach_invalid_twice_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_comet_text_transport" time="1.088" classname="channelattach_invalid_twice_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_binary_transport" time="1.060" classname="channelattach_invalid_twice_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice_with_text_transport" time="1.062" classname="channelattach_invalid_twice_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelattachWhenState" time="0.076" classname="channelattachWhenState">
    </testcase>
    <testcase name="realtime/channel channelattachOnceOrIfBefore" time="0.075" classname="channelattachOnceOrIfBefore">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_web_socket_binary_transport" time="1.111" classname="attachWithChannelParamsBasicChannelsGet_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_web_socket_text_transport" time="1.103" classname="attachWithChannelParamsBasicChannelsGet_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_comet_binary_transport" time="1.200" classname="attachWithChannelParamsBasicChannelsGet_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_comet_text_transport" time="1.130" classname="attachWithChannelParamsBasicChannelsGet_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_binary_transport" time="1.099" classname="attachWithChannelParamsBasicChannelsGet_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet_with_text_transport" time="1.106" classname="attachWithChannelParamsBasicChannelsGet_with_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_web_socket_binary_transport" time="1.107" classname="attachWithChannelParamsBasicSetOptions_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_web_socket_text_transport" time="1.097" classname="attachWithChannelParamsBasicSetOptions_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_comet_binary_transport" time="1.214" classname="attachWithChannelParamsBasicSetOptions_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_comet_text_transport" time="1.142" classname="attachWithChannelParamsBasicSetOptions_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_binary_transport" time="1.107" classname="attachWithChannelParamsBasicSetOptions_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions_with_text_transport" time="1.096" classname="attachWithChannelParamsBasicSetOptions_with_text_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_web_socket_binary_transport" time="0.062" classname="subscribeAfterSetOptions_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_web_socket_text_transport" time="0.056" classname="subscribeAfterSetOptions_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_comet_binary_transport" time="0.104" classname="subscribeAfterSetOptions_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_comet_text_transport" time="0.105" classname="subscribeAfterSetOptions_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_binary_transport" time="0.054" classname="subscribeAfterSetOptions_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions_with_text_transport" time="0.051" classname="subscribeAfterSetOptions_with_text_transport">
    </testcase>
    <testcase name="realtime/channel channelGetShouldThrowWhenWouldCauseReattach" time="0.056" classname="channelGetShouldThrowWhenWouldCauseReattach">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_web_socket_binary_transport" time="0.154" classname="setOptionsCallbackBehaviour_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_web_socket_text_transport" time="0.071" classname="setOptionsCallbackBehaviour_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_comet_binary_transport" time="0.145" classname="setOptionsCallbackBehaviour_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_comet_text_transport" time="0.132" classname="setOptionsCallbackBehaviour_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_binary_transport" time="0.066" classname="setOptionsCallbackBehaviour_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour_with_text_transport" time="0.066" classname="setOptionsCallbackBehaviour_with_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_web_socket_binary_transport" time="1.141" classname="attachWithChannelParamsModesAndChannelModes_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_web_socket_text_transport" time="1.129" classname="attachWithChannelParamsModesAndChannelModes_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_comet_binary_transport" time="1.140" classname="attachWithChannelParamsModesAndChannelModes_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_comet_text_transport" time="1.132" classname="attachWithChannelParamsModesAndChannelModes_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_binary_transport" time="1.137" classname="attachWithChannelParamsModesAndChannelModes_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes_with_text_transport" time="1.129" classname="attachWithChannelParamsModesAndChannelModes_with_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_web_socket_binary_transport" time="1.134" classname="attachWithChannelModes_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_web_socket_text_transport" time="1.126" classname="attachWithChannelModes_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_comet_binary_transport" time="1.176" classname="attachWithChannelModes_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_comet_text_transport" time="1.166" classname="attachWithChannelModes_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_binary_transport" time="1.144" classname="attachWithChannelModes_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes_with_text_transport" time="1.129" classname="attachWithChannelModes_with_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_web_socket_binary_transport" time="0.148" classname="attachWithChannelParamsDeltaAndModes_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_web_socket_text_transport" time="0.129" classname="attachWithChannelParamsDeltaAndModes_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_comet_binary_transport" time="0.203" classname="attachWithChannelParamsDeltaAndModes_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_comet_text_transport" time="0.219" classname="attachWithChannelParamsDeltaAndModes_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_binary_transport" time="0.140" classname="attachWithChannelParamsDeltaAndModes_with_binary_transport">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes_with_text_transport" time="0.141" classname="attachWithChannelParamsDeltaAndModes_with_text_transport">
    </testcase>
    <testcase name="realtime/channel attachWithInvalidChannelParams" time="0.062" classname="attachWithInvalidChannelParams">
    </testcase>
    <testcase name="realtime/channel channelsubscribe0" time="1.068" classname="channelsubscribe0">
    </testcase>
    <testcase name="realtime/channel channelsubscribe1" time="1.573" classname="channelsubscribe1">
    </testcase>
    <testcase name="realtime/channel server_sent_detached" time="0.156" classname="server_sent_detached">
    </testcase>
    <testcase name="realtime/channel server_sent_detached_while_attaching" time="0.042" classname="server_sent_detached_while_attaching">
    </testcase>
    <testcase name="realtime/channel server_sent_error" time="0.059" classname="server_sent_error">
    </testcase>
    <testcase name="realtime/channel server_sent_attached_err" time="0.054" classname="server_sent_attached_err">
    </testcase>
    <testcase name="realtime/channel publish_no_queueing" time="0.001" classname="publish_no_queueing">
    </testcase>
    <testcase name="realtime/channel channel_attach_timeout" time="2.123" classname="channel_attach_timeout">
    </testcase>
    <testcase name="realtime/channel suspended_connection" time="3.197" classname="suspended_connection">
    </testcase>
    <testcase name="realtime/channel attached_while_detaching" time="0.057" classname="attached_while_detaching">
    </testcase>
    <testcase name="realtime/channel detaching from suspended channel transitions channel to detached state" time="0.002" classname="detaching from suspended channel transitions channel to detached state">
    </testcase>
    <testcase name="realtime/channel detaching from failed channel results in error" time="0.002" classname="detaching from failed channel results in error">
    </testcase>
    <testcase name="realtime/channel rewind works on channel after reattaching" time="0.077" classname="rewind works on channel after reattaching">
    </testcase>
    <testcase name="realtime/channel attach_returns_state_change" time="0.056" classname="attach_returns_state_change">
    </testcase>
    <testcase name="realtime/channel subscribe_returns_state_change" time="0.056" classname="subscribe_returns_state_change">
    </testcase>
    <testcase name="realtime/channel rewind_has_backlog_0" time="0.135" classname="rewind_has_backlog_0">
    </testcase>
    <testcase name="realtime/channel rewind_has_backlog_1" time="0.053" classname="rewind_has_backlog_1">
    </testcase>
    <testcase name="realtime/channel should not throw exception then run RealtimeChannels.get() with same options" time="0.001" classname="should not throw exception then run RealtimeChannels.get() with same options">
    </testcase>
    <testcase name="realtime/channel whenState" time="0.051" classname="whenState">
    </testcase>
  </testsuite>
  <testsuite name="realtime/connection" timestamp="2024-10-24T16:38:33" tests="7" file="/home/runner/work/ably-js/ably-js/test/realtime/connection.test.js" time="0.399" failures="0">
    <testcase name="realtime/connection connectionPing" time="0.042" classname="connectionPing">
    </testcase>
    <testcase name="realtime/connection connectionPingWithCallback" time="0.047" classname="connectionPingWithCallback">
    </testcase>
    <testcase name="realtime/connection connectionAttributes" time="0.060" classname="connectionAttributes">
    </testcase>
    <testcase name="realtime/connection unrecoverableConnection" time="0.047" classname="unrecoverableConnection">
    </testcase>
    <testcase name="realtime/connection connectionQueuing" time="0.112" classname="connectionQueuing">
    </testcase>
    <testcase name="realtime/connection connectionDetails" time="0.043" classname="connectionDetails">
    </testcase>
    <testcase name="realtime/connection whenState" time="0.044" classname="whenState">
    </testcase>
  </testsuite>
  <testsuite name="realtime/connectivity" timestamp="2024-10-24T16:38:33" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/connectivity.test.js" time="0.000" failures="0">
    <testcase name="realtime/connectivity http_connectivity_check" time="0.036" classname="http_connectivity_check">
    </testcase>
    <testcase name="realtime/connectivity disable_connectivity_check" time="0.000" classname="disable_connectivity_check">
    </testcase>
  </testsuite>
  <testsuite name="configured_connectivity_check_url" timestamp="2024-10-24T16:38:33" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/connectivity.test.js" time="0.577" failures="0">
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with scheme" time="0.265" classname="succeeds with scheme">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with scheme" time="0.075" classname="fails with scheme">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with querystring" time="0.074" classname="succeeds with querystring">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with querystring" time="0.075" classname="fails with querystring">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with plain url" time="0.011" classname="succeeds with plain url">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with plain url" time="0.074" classname="fails with plain url">
    </testcase>
  </testsuite>
  <testsuite name="realtime/crypto" timestamp="2024-10-24T16:38:34" tests="39" file="/home/runner/work/ably-js/ably-js/test/realtime/crypto.test.js" time="6.488" failures="0">
    <testcase name="realtime/crypto generateRandomKey0" time="0.001" classname="generateRandomKey0">
    </testcase>
    <testcase name="realtime/crypto generateRandomKey1" time="0.000" classname="generateRandomKey1">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_withResultOfGenerateRandomKey" time="0.001" classname="getDefaultParams_withResultOfGenerateRandomKey">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_ArrayBuffer_key" time="0.000" classname="getDefaultParams_ArrayBuffer_key">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_base64_key" time="0.001" classname="getDefaultParams_base64_key">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_check_keylength" time="0.000" classname="getDefaultParams_check_keylength">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_preserves_custom_algorithms" time="0.001" classname="getDefaultParams_preserves_custom_algorithms">
    </testcase>
    <testcase name="realtime/crypto encrypt_message_128" time="0.005" classname="encrypt_message_128">
    </testcase>
    <testcase name="realtime/crypto encrypt_message_256" time="0.028" classname="encrypt_message_256">
    </testcase>
    <testcase name="realtime/crypto decrypt_message_128" time="0.004" classname="decrypt_message_128">
    </testcase>
    <testcase name="realtime/crypto decrypt_message_256" time="0.016" classname="decrypt_message_256">
    </testcase>
    <testcase name="realtime/crypto fromEncoded_cipher_options" time="0.007" classname="fromEncoded_cipher_options">
    </testcase>
    <testcase name="realtime/crypto msgpack_128" time="0.005" classname="msgpack_128">
    </testcase>
    <testcase name="realtime/crypto msgpack_256" time="0.030" classname="msgpack_256">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_web_socket_binary_transport" time="0.066" classname="single_send_128_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_web_socket_text_transport" time="0.060" classname="single_send_128_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_comet_binary_transport" time="0.123" classname="single_send_128_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_comet_text_transport" time="0.108" classname="single_send_128_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_binary_transport" time="0.059" classname="single_send_128_with_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_128_with_text_transport" time="0.070" classname="single_send_128_with_text_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_web_socket_binary_transport" time="0.059" classname="single_send_256_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_web_socket_text_transport" time="0.061" classname="single_send_256_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_comet_binary_transport" time="0.121" classname="single_send_256_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_comet_text_transport" time="0.118" classname="single_send_256_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_binary_transport" time="0.059" classname="single_send_256_with_binary_transport">
    </testcase>
    <testcase name="realtime/crypto single_send_256_with_text_transport" time="0.081" classname="single_send_256_with_text_transport">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_2_200" time="0.271" classname="multiple_send_binary_2_200">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_2_200" time="0.268" classname="multiple_send_text_2_200">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_20_100" time="1.977" classname="multiple_send_binary_20_100">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_20_100" time="1.971" classname="multiple_send_text_20_100">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_10_10" time="0.160" classname="multiple_send_binary_10_10">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_10_10" time="0.187" classname="multiple_send_text_10_10">
    </testcase>
    <testcase name="realtime/crypto single_send_binary_text" time="0.073" classname="single_send_binary_text">
    </testcase>
    <testcase name="realtime/crypto single_send_text_binary" time="0.061" classname="single_send_text_binary">
    </testcase>
    <testcase name="realtime/crypto publish_immediately" time="0.069" classname="publish_immediately">
    </testcase>
    <testcase name="realtime/crypto single_send_key_mismatch" time="0.130" classname="single_send_key_mismatch">
    </testcase>
    <testcase name="realtime/crypto single_send_unencrypted" time="0.072" classname="single_send_unencrypted">
    </testcase>
    <testcase name="realtime/crypto single_send_encrypted_unhandled" time="0.070" classname="single_send_encrypted_unhandled">
    </testcase>
    <testcase name="realtime/crypto set_cipher_params0" time="0.083" classname="set_cipher_params0">
    </testcase>
  </testsuite>
  <testsuite name="realtime/delta" timestamp="2024-10-24T16:38:40" tests="5" file="/home/runner/work/ably-js/ably-js/test/realtime/delta.test.js" time="6.411" failures="0">
    <testcase name="realtime/delta deltaPlugin" time="1.584" classname="deltaPlugin">
    </testcase>
    <testcase name="realtime/delta unusedPlugin" time="1.574" classname="unusedPlugin">
    </testcase>
    <testcase name="realtime/delta lastMessageNotFoundRecovery" time="1.577" classname="lastMessageNotFoundRecovery">
    </testcase>
    <testcase name="realtime/delta deltaDecodeFailureRecovery" time="1.599" classname="deltaDecodeFailureRecovery">
    </testcase>
    <testcase name="realtime/delta noPlugin" time="0.075" classname="noPlugin">
    </testcase>
  </testsuite>
  <testsuite name="realtime/encoding" timestamp="2024-10-24T16:38:47" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/encoding.test.js" time="0.699" failures="0">
    <testcase name="realtime/encoding message_decoding" time="0.091" classname="message_decoding">
    </testcase>
    <testcase name="realtime/encoding message_encoding" time="0.607" classname="message_encoding">
    </testcase>
  </testsuite>
  <testsuite name="realtime/event_emitter" timestamp="2024-10-24T16:38:48" tests="13" file="/home/runner/work/ably-js/ably-js/test/realtime/event_emitter.test.js" time="0.000" failures="0">
    <testcase name="realtime/event_emitter attachdetach0" time="0.092" classname="attachdetach0">
    </testcase>
    <testcase name="realtime/event_emitter emitCallsAllCallbacksIgnoringExceptions" time="0.000" classname="emitCallsAllCallbacksIgnoringExceptions">
    </testcase>
    <testcase name="realtime/event_emitter onceCalledOnlyOnce" time="0.000" classname="onceCalledOnlyOnce">
    </testcase>
    <testcase name="realtime/event_emitter onceCallbackDoesNotImpactOnCallback" time="0.001" classname="onceCallbackDoesNotImpactOnCallback">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingListeners" time="0.001" classname="offRemovesAllMatchingListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllListeners" time="0.000" classname="offRemovesAllListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingEventListeners" time="0.000" classname="offRemovesAllMatchingEventListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingEvents" time="0.000" classname="offRemovesAllMatchingEvents">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesEmptyEventNameListeners" time="0.000" classname="offRemovesEmptyEventNameListeners">
    </testcase>
    <testcase name="realtime/event_emitter arrayOfEvents" time="0.001" classname="arrayOfEvents">
    </testcase>
    <testcase name="realtime/event_emitter arrayOfEventsWithOnce" time="0.000" classname="arrayOfEventsWithOnce">
    </testcase>
    <testcase name="realtime/event_emitter listenerAddedInListenerCb" time="0.000" classname="listenerAddedInListenerCb">
    </testcase>
    <testcase name="realtime/event_emitter listenerRemovedInListenerCb" time="0.001" classname="listenerRemovedInListenerCb">
    </testcase>
  </testsuite>
  <testsuite name="event_emitter_promise" timestamp="2024-10-24T16:38:48" tests="4" file="/home/runner/work/ably-js/ably-js/test/realtime/event_emitter.test.js" time="0.083" failures="0">
    <testcase name="realtime/event_emitter event_emitter_promise whenState" time="0.039" classname="whenState">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise once" time="0.041" classname="once">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise anyEventsWithOnce" time="0.001" classname="anyEventsWithOnce">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise arrayOfEventsWithOnce" time="0.000" classname="arrayOfEventsWithOnce">
    </testcase>
  </testsuite>
  <testsuite name="realtime/failure" timestamp="2024-10-24T16:38:48" tests="20" file="/home/runner/work/ably-js/ably-js/test/realtime/failure.test.js" time="49.214" failures="0">
    <testcase name="realtime/failure invalid_cred_failure" time="0.603" classname="invalid_cred_failure">
    </testcase>
    <testcase name="realtime/failure break_transport" time="0.098" classname="break_transport">
    </testcase>
    <testcase name="realtime/failure no_connection_lifecycle" time="4.803" classname="no_connection_lifecycle">
    </testcase>
    <testcase name="realtime/failure disconnected_backoff_web_socket" time="1.150" classname="disconnected_backoff_web_socket">
    </testcase>
    <testcase name="realtime/failure disconnected_backoff_comet" time="1.124" classname="disconnected_backoff_comet">
    </testcase>
    <testcase name="realtime/failure failed_channel" time="0.049" classname="failed_channel">
    </testcase>
    <testcase name="realtime/failure attach_timeout" time="3.021" classname="attach_timeout">
    </testcase>
    <testcase name="realtime/failure channel_backoff_web_socket" time="25.407" classname="channel_backoff_web_socket">
    </testcase>
    <testcase name="realtime/failure channel_backoff_comet" time="1.562" classname="channel_backoff_comet">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_suspended" time="0.099" classname="nack_on_connection_suspended">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_failed" time="0.081" classname="nack_on_connection_failed">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_closed" time="0.042" classname="nack_on_connection_closed">
    </testcase>
    <testcase name="realtime/failure idle_transport_timeout" time="2.262" classname="idle_transport_timeout">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_web_socket_binary_transport" time="0.312" classname="try_fallback_hosts_on_placement_constraint_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_web_socket_text_transport" time="0.295" classname="try_fallback_hosts_on_placement_constraint_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_comet_binary_transport" time="0.370" classname="try_fallback_hosts_on_placement_constraint_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_comet_text_transport" time="0.297" classname="try_fallback_hosts_on_placement_constraint_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_binary_transport" time="0.279" classname="try_fallback_hosts_on_placement_constraint_with_binary_transport">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint_with_text_transport" time="0.292" classname="try_fallback_hosts_on_placement_constraint_with_text_transport">
    </testcase>
    <testcase name="realtime/failure no_messages_if_not_attached" time="7.060" classname="no_messages_if_not_attached">
    </testcase>
  </testsuite>
  <testsuite name="realtime/history" timestamp="2024-10-24T16:39:37" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/history.test.js" time="5.073" failures="1">
    <testcase name="realtime/history history_until_attach" time="5.071" classname="history_until_attach">
      <failure message="Error response received from server: 502 body was: &lt;Buffer 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44 54 44 20 48 54 4d 4c 20 34 2e 30 31 20 54 72 61 6e 73 ... 887 more bytes&gt;" type="Error"><![CDATA[Error: Error response received from server: 502 body was: <Buffer 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44 54 44 20 48 54 4d 4c 20 34 2e 30 31 20 54 72 61 6e 73 ... 887 more bytes>
    at _a._handler (src/platform/nodejs/lib/util/http.ts:168:11)
    at _a.doUri (src/platform/nodejs/lib/util/http.ts:101:21)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Http.doUri (src/common/types/http.ts:257:22)
    at doRequest (src/common/lib/client/resource.ts:341:26)
    at Function.do (src/common/lib/client/resource.ts:359:18)
    at RestChannel._publish (src/common/lib/client/restchannel.ts:134:5)
    at RestChannel.publish (src/common/lib/client/restchannel.ts:130:5)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="realtime/init" timestamp="2024-10-24T16:39:42" tests="15" file="/home/runner/work/ably-js/ably-js/test/realtime/init.test.js" time="8.869" failures="0">
    <testcase name="realtime/init initbase0" time="0.046" classname="initbase0">
    </testcase>
    <testcase name="realtime/init init_key_string" time="0.001" classname="init_key_string">
    </testcase>
    <testcase name="realtime/init init_token_string" time="0.226" classname="init_token_string">
    </testcase>
    <testcase name="realtime/init init_key_with_usetokenauth" time="0.064" classname="init_key_with_usetokenauth">
    </testcase>
    <testcase name="realtime/init init_usetokenauth_defaulttokenparams_wildcard" time="5.058" classname="init_usetokenauth_defaulttokenparams_wildcard">
    </testcase>
    <testcase name="realtime/init init_defaulttokenparams_nonwildcard" time="3.084" classname="init_defaulttokenparams_nonwildcard">
    </testcase>
    <testcase name="realtime/init init_conflicting_clientids" time="0.070" classname="init_conflicting_clientids">
    </testcase>
    <testcase name="realtime/init init_with_usetokenauth_false_and_a_clientid" time="0.000" classname="init_with_usetokenauth_false_and_a_clientid">
    </testcase>
    <testcase name="realtime/init init_defaulthost" time="0.000" classname="init_defaulthost">
    </testcase>
    <testcase name="realtime/init init_timeouts" time="0.001" classname="init_timeouts">
    </testcase>
    <testcase name="realtime/init init_fallbacks" time="0.051" classname="init_fallbacks">
    </testcase>
    <testcase name="realtime/init node_transports" time="0.001" classname="node_transports">
    </testcase>
    <testcase name="realtime/init init_and_connection_details" time="0.059" classname="init_and_connection_details">
    </testcase>
    <testcase name="realtime/init init_fallbacks_once_connected" time="0.089" classname="init_fallbacks_once_connected">
    </testcase>
    <testcase name="realtime/init init_fallbacks_once_connected_2" time="0.114" classname="init_fallbacks_once_connected_2">
    </testcase>
  </testsuite>
  <testsuite name="realtime/message" timestamp="2024-10-24T16:39:51" tests="35" file="/home/runner/work/ably-js/ably-js/test/realtime/message.test.js" time="30.197" failures="0">
    <testcase name="realtime/message publishonce" time="0.072" classname="publishonce">
    </testcase>
    <testcase name="realtime/message publishfast_with_web_socket_binary_transport" time="0.604" classname="publishfast_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/message publishfast_with_web_socket_text_transport" time="0.571" classname="publishfast_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/message publishfast_with_comet_binary_transport" time="0.204" classname="publishfast_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/message publishfast_with_comet_text_transport" time="0.207" classname="publishfast_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/message publishfast_with_binary_transport" time="0.565" classname="publishfast_with_binary_transport">
    </testcase>
    <testcase name="realtime/message publishfast_with_text_transport" time="6.487" classname="publishfast_with_text_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_web_socket_binary_transport" time="1.124" classname="publishQueued_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_web_socket_text_transport" time="1.102" classname="publishQueued_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_comet_binary_transport" time="1.060" classname="publishQueued_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_comet_text_transport" time="1.074" classname="publishQueued_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_binary_transport" time="1.109" classname="publishQueued_with_binary_transport">
    </testcase>
    <testcase name="realtime/message publishQueued_with_text_transport" time="1.184" classname="publishQueued_with_text_transport">
    </testcase>
    <testcase name="realtime/message publishEcho" time="0.080" classname="publishEcho">
    </testcase>
    <testcase name="realtime/message publishVariations" time="2.255" classname="publishVariations">
    </testcase>
    <testcase name="realtime/message publishDisallowed" time="0.057" classname="publishDisallowed">
    </testcase>
    <testcase name="realtime/message publishEncodings" time="0.113" classname="publishEncodings">
    </testcase>
    <testcase name="realtime/message restpublish" time="5.031" classname="restpublish">
    </testcase>
    <testcase name="realtime/message publish_with_web_socket_binary_transport" time="0.591" classname="publish_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/message publish_with_web_socket_text_transport" time="0.586" classname="publish_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/message publish_with_comet_binary_transport" time="0.328" classname="publish_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/message publish_with_comet_text_transport" time="0.318" classname="publish_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/message publish_with_binary_transport" time="0.585" classname="publish_with_binary_transport">
    </testcase>
    <testcase name="realtime/message publish_with_text_transport" time="0.587" classname="publish_with_text_transport">
    </testcase>
    <testcase name="realtime/message implicit_client_id_0" time="3.080" classname="implicit_client_id_0">
    </testcase>
    <testcase name="realtime/message explicit_client_id_0" time="0.088" classname="explicit_client_id_0">
    </testcase>
    <testcase name="realtime/message explicit_client_id_1" time="0.574" classname="explicit_client_id_1">
    </testcase>
    <testcase name="realtime/message subscribe_with_event_array" time="0.070" classname="subscribe_with_event_array">
    </testcase>
    <testcase name="realtime/message subscribe_with_filter_object" time="0.114" classname="subscribe_with_filter_object">
    </testcase>
    <testcase name="realtime/message unsubscribe_with_filter_object" time="0.075" classname="unsubscribe_with_filter_object">
    </testcase>
    <testcase name="realtime/message extras_field" time="0.067" classname="extras_field">
    </testcase>
    <testcase name="realtime/message maxMessageSize" time="0.043" classname="maxMessageSize">
    </testcase>
    <testcase name="realtime/message idempotentRealtimePublishing" time="0.069" classname="idempotentRealtimePublishing">
    </testcase>
    <testcase name="realtime/message subscribes to filtered channel" time="0.108" classname="subscribes to filtered channel">
    </testcase>
  </testsuite>
  <testsuite name="realtime/presence" timestamp="2024-10-24T16:40:21" tests="35" file="/home/runner/work/ably-js/ably-js/test/realtime/presence.test.js" time="22.585" failures="0">
    <testcase name="realtime/presence presenceEnterWithoutAttach" time="0.118" classname="presenceEnterWithoutAttach">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithoutConnect" time="0.104" classname="presenceEnterWithoutConnect">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithCallback" time="0.150" classname="presenceEnterWithCallback">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithNothing" time="0.106" classname="presenceEnterWithNothing">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithData" time="0.108" classname="presenceEnterWithData">
    </testcase>
    <testcase name="realtime/presence presenceMessageAction" time="0.088" classname="presenceMessageAction">
    </testcase>
    <testcase name="realtime/presence presenceMessageExtras" time="0.086" classname="presenceMessageExtras">
    </testcase>
    <testcase name="realtime/presence presenceEnterDetachEnter" time="0.626" classname="presenceEnterDetachEnter">
    </testcase>
    <testcase name="realtime/presence presenceEnterInvalid" time="0.049" classname="presenceEnterInvalid">
    </testcase>
    <testcase name="realtime/presence presenceEnterAndLeave" time="0.126" classname="presenceEnterAndLeave">
    </testcase>
    <testcase name="realtime/presence presenceEnterUpdate" time="0.667" classname="presenceEnterUpdate">
    </testcase>
    <testcase name="realtime/presence presenceEnterGet" time="0.130" classname="presenceEnterGet">
    </testcase>
    <testcase name="realtime/presence presenceSubscribeUnattached" time="0.098" classname="presenceSubscribeUnattached">
    </testcase>
    <testcase name="realtime/presence presenceGetUnattached" time="0.132" classname="presenceGetUnattached">
    </testcase>
    <testcase name="realtime/presence presenceEnterLeaveGet" time="0.608" classname="presenceEnterLeaveGet">
    </testcase>
    <testcase name="realtime/presence presenceHistory" time="0.618" classname="presenceHistory">
    </testcase>
    <testcase name="realtime/presence presenceSecondConnection" time="0.173" classname="presenceSecondConnection">
    </testcase>
    <testcase name="realtime/presence presenceTwoMembers" time="0.153" classname="presenceTwoMembers">
    </testcase>
    <testcase name="realtime/presence presenceEnterAfterClose" time="0.156" classname="presenceEnterAfterClose">
    </testcase>
    <testcase name="realtime/presence presenceEnterClosed" time="0.043" classname="presenceEnterClosed">
    </testcase>
    <testcase name="realtime/presence presenceClientIdIsImplicit" time="1.063" classname="presenceClientIdIsImplicit">
    </testcase>
    <testcase name="realtime/presence presenceEncoding" time="0.099" classname="presenceEncoding">
    </testcase>
    <testcase name="realtime/presence presence_enter_inherited_clientid" time="0.119" classname="presence_enter_inherited_clientid">
    </testcase>
    <testcase name="realtime/presence presence_enter_before_know_clientid" time="0.126" classname="presence_enter_before_know_clientid">
    </testcase>
    <testcase name="realtime/presence presence_refresh_on_detach" time="0.607" classname="presence_refresh_on_detach">
    </testcase>
    <testcase name="realtime/presence presence_detach_during_sync" time="0.084" classname="presence_detach_during_sync">
    </testcase>
    <testcase name="realtime/presence presence_auto_reenter" time="0.192" classname="presence_auto_reenter">
    </testcase>
    <testcase name="realtime/presence multiple_pending" time="0.139" classname="multiple_pending">
    </testcase>
    <testcase name="realtime/presence leave_published_for_member_missing_from_sync" time="0.140" classname="leave_published_for_member_missing_from_sync">
    </testcase>
    <testcase name="realtime/presence leave_published_for_members_on_presenceless_attached" time="0.134" classname="leave_published_for_members_on_presenceless_attached">
    </testcase>
    <testcase name="realtime/presence suspended_preserves_presence" time="1.182" classname="suspended_preserves_presence">
    </testcase>
    <testcase name="realtime/presence presence_many_updates" time="14.313" classname="presence_many_updates">
    </testcase>
  </testsuite>
  <testsuite name="realtime/reauth" timestamp="2024-10-24T16:40:44" tests="24" file="/home/runner/work/ably-js/ably-js/test/realtime/reauth.test.js" time="4.839" failures="0">
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_web_socket_binary_transport" time="0.094" classname="reauthCapabilityUpgradeNewChannel_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_web_socket_text_transport" time="0.095" classname="reauthCapabilityUpgradeNewChannel_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_comet_binary_transport" time="0.232" classname="reauthCapabilityUpgradeNewChannel_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_comet_text_transport" time="0.158" classname="reauthCapabilityUpgradeNewChannel_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_binary_transport" time="0.092" classname="reauthCapabilityUpgradeNewChannel_with_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel_with_text_transport" time="0.093" classname="reauthCapabilityUpgradeNewChannel_with_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_web_socket_binary_transport" time="0.092" classname="reauthCapabilityDowngradeFullChannel_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_web_socket_text_transport" time="0.106" classname="reauthCapabilityDowngradeFullChannel_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_comet_binary_transport" time="0.176" classname="reauthCapabilityDowngradeFullChannel_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_comet_text_transport" time="0.167" classname="reauthCapabilityDowngradeFullChannel_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_binary_transport" time="0.083" classname="reauthCapabilityDowngradeFullChannel_with_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel_with_text_transport" time="0.087" classname="reauthCapabilityDowngradeFullChannel_with_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_web_socket_binary_transport" time="0.560" classname="reauthCapabilityUpgradeAddPublish_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_web_socket_text_transport" time="0.566" classname="reauthCapabilityUpgradeAddPublish_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_comet_binary_transport" time="0.169" classname="reauthCapabilityUpgradeAddPublish_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_comet_text_transport" time="0.158" classname="reauthCapabilityUpgradeAddPublish_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_binary_transport" time="0.561" classname="reauthCapabilityUpgradeAddPublish_with_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish_with_text_transport" time="0.572" classname="reauthCapabilityUpgradeAddPublish_with_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_web_socket_binary_transport" time="0.102" classname="reauthCapabilityDowngradePublish_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_web_socket_text_transport" time="0.125" classname="reauthCapabilityDowngradePublish_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_comet_binary_transport" time="0.156" classname="reauthCapabilityDowngradePublish_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_comet_text_transport" time="0.190" classname="reauthCapabilityDowngradePublish_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_binary_transport" time="0.098" classname="reauthCapabilityDowngradePublish_with_binary_transport">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish_with_text_transport" time="0.093" classname="reauthCapabilityDowngradePublish_with_text_transport">
    </testcase>
  </testsuite>
  <testsuite name="realtime/resume" timestamp="2024-10-24T16:40:48" tests="35" file="/home/runner/work/ably-js/ably-js/test/realtime/resume.test.js" time="164.636" failures="0">
    <testcase name="realtime/resume resume_inactive_with_web_socket_binary_transport" time="11.628" classname="resume_inactive_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_inactive_with_web_socket_text_transport" time="16.731" classname="resume_inactive_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/resume resume_inactive_with_comet_binary_transport" time="11.904" classname="resume_inactive_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_inactive_with_comet_text_transport" time="11.828" classname="resume_inactive_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/resume resume_inactive_with_binary_transport" time="16.725" classname="resume_inactive_with_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_inactive_with_text_transport" time="20.736" classname="resume_inactive_with_text_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_web_socket_binary_transport" time="11.173" classname="resume_active_with_web_socket_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_web_socket_text_transport" time="11.203" classname="resume_active_with_web_socket_text_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_comet_binary_transport" time="11.352" classname="resume_active_with_comet_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_comet_text_transport" time="11.291" classname="resume_active_with_comet_text_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_binary_transport" time="11.232" classname="resume_active_with_binary_transport">
    </testcase>
    <testcase name="realtime/resume resume_active_with_text_transport" time="11.225" classname="resume_active_with_text_transport">
    </testcase>
    <testcase name="realtime/resume channel_resumed_flag" time="0.122" classname="channel_resumed_flag">
    </testcase>
    <testcase name="realtime/resume no_resume_once_suspended" time="0.031" classname="no_resume_once_suspended">
    </testcase>
    <testcase name="realtime/resume no_resume_last_activity" time="0.033" classname="no_resume_last_activity">
    </testcase>
    <testcase name="realtime/resume resume_rewind_1" time="7.117" classname="resume_rewind_1">
    </testcase>
    <testcase name="realtime/resume recover multiple channels" time="0.295" classname="recover multiple channels">
    </testcase>
  </testsuite>
  <testsuite name="realtime/sync" timestamp="2024-10-24T16:43:33" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/sync.test.js" time="0.586" failures="0">
    <testcase name="realtime/sync sync_existing_set" time="0.002" classname="sync_existing_set">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_in_middle" time="0.000" classname="sync_member_arrives_in_middle">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_normally_after_came_in_sync" time="0.000" classname="sync_member_arrives_normally_after_came_in_sync">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_normally_before_comes_in_sync" time="0.001" classname="sync_member_arrives_normally_before_comes_in_sync">
    </testcase>
    <testcase name="realtime/sync presence_ordering" time="0.001" classname="presence_ordering">
    </testcase>
    <testcase name="realtime/sync presence_sync_interruptus" time="0.581" classname="presence_sync_interruptus">
    </testcase>
  </testsuite>
  <testsuite name="realtime/transports" timestamp="2024-10-24T16:43:34" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/transports.test.js" time="21.285" failures="0">
    <testcase name="realtime/transports websocket_is_default" time="0.044" classname="websocket_is_default">
    </testcase>
    <testcase name="realtime/transports no_ws_connectivity" time="3.049" classname="no_ws_connectivity">
    </testcase>
    <testcase name="realtime/transports ws_primary_host_fails" time="0.069" classname="ws_primary_host_fails">
    </testcase>
    <testcase name="realtime/transports no_internet_connectivity" time="1.262" classname="no_internet_connectivity">
    </testcase>
    <testcase name="realtime/transports no_websocket_or_base_transport" time="3.005" classname="no_websocket_or_base_transport">
    </testcase>
    <testcase name="realtime/transports ws_can_reconnect_after_ws_connectivity_fail" time="13.854" classname="ws_can_reconnect_after_ws_connectivity_fail">
    </testcase>
  </testsuite>
  <testsuite name="incremental backoff and jitter" timestamp="2024-10-24T16:43:55" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/utils.test.js" time="0.002" failures="0">
    <testcase name="incremental backoff and jitter should calculate retry timeouts using incremental backoff and jitter" time="0.001" classname="should calculate retry timeouts using incremental backoff and jitter">
    </testcase>
  </testsuite>
  <testsuite name="rest/api" timestamp="2024-10-24T16:43:55" tests="5" file="/home/runner/work/ably-js/ably-js/test/rest/api.test.js" time="0.002" failures="0">
    <testcase name="rest/api Client constructors" time="0.000" classname="Client constructors">
    </testcase>
    <testcase name="rest/api constructor without any arguments" time="0.001" classname="constructor without any arguments">
    </testcase>
    <testcase name="rest/api Crypto" time="0.000" classname="Crypto">
    </testcase>
    <testcase name="rest/api Message" time="0.000" classname="Message">
    </testcase>
    <testcase name="rest/api PresenceMessage" time="0.000" classname="PresenceMessage">
    </testcase>
  </testsuite>
  <testsuite name="rest/auth" timestamp="2024-10-24T16:43:55" tests="32" file="/home/runner/work/ably-js/ably-js/test/rest/auth.test.js" time="2.777" failures="0">
    <testcase name="rest/auth Base token generation case" time="0.021" classname="Base token generation case">
    </testcase>
    <testcase name="rest/auth Base token generation with options" time="0.013" classname="Base token generation with options">
    </testcase>
    <testcase name="rest/auth Generate token and init library with it" time="0.013" classname="Generate token and init library with it">
    </testcase>
    <testcase name="rest/auth Token generation with explicit timestamp" time="0.030" classname="Token generation with explicit timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with invalid timestamp" time="0.016" classname="Token generation with invalid timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with system timestamp" time="0.017" classname="Token generation with system timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with duplicate nonce" time="0.033" classname="Token generation with duplicate nonce">
    </testcase>
    <testcase name="rest/auth Token generation with clientId" time="0.011" classname="Token generation with clientId">
    </testcase>
    <testcase name="rest/auth Token generation with empty string clientId should error" time="0.000" classname="Token generation with empty string clientId should error">
    </testcase>
    <testcase name="rest/auth Token generation with capability that subsets key capability" time="0.018" classname="Token generation with capability that subsets key capability">
    </testcase>
    <testcase name="rest/auth Token generation with specified key" time="0.216" classname="Token generation with specified key">
    </testcase>
    <testcase name="rest/auth Token generation with explicit auth" time="0.013" classname="Token generation with explicit auth">
    </testcase>
    <testcase name="rest/auth Token generation with explicit auth, different key" time="0.429" classname="Token generation with explicit auth, different key">
    </testcase>
    <testcase name="rest/auth Token generation with invalid mac" time="0.013" classname="Token generation with invalid mac">
    </testcase>
    <testcase name="rest/auth Token generation with defaultTokenParams set and no tokenParams passed in" time="0.011" classname="Token generation with defaultTokenParams set and no tokenParams passed in">
    </testcase>
    <testcase name="rest/auth Token generation: if tokenParams passed in, defaultTokenParams should be ignored altogether, not merged" time="0.012" classname="Token generation: if tokenParams passed in, defaultTokenParams should be ignored altogether, not merged">
    </testcase>
    <testcase name="rest/auth Authorize with different args" time="0.033" classname="Authorize with different args">
    </testcase>
    <testcase name="rest/auth Specify non-default ttl" time="0.013" classname="Specify non-default ttl">
    </testcase>
    <testcase name="rest/auth Should error with excessive ttl" time="0.013" classname="Should error with excessive ttl">
    </testcase>
    <testcase name="rest/auth Should error with negative ttl" time="0.026" classname="Should error with negative ttl">
    </testcase>
    <testcase name="rest/auth Should error with invalid ttl" time="0.018" classname="Should error with invalid ttl">
    </testcase>
    <testcase name="rest/auth createTokenRequest without authOptions" time="0.001" classname="createTokenRequest without authOptions">
    </testcase>
    <testcase name="rest/auth createTokenRequest uses the key it was initialized with if authOptions does not have a &quot;key&quot; key" time="0.000" classname="createTokenRequest uses the key it was initialized with if authOptions does not have a &quot;key&quot; key">
    </testcase>
    <testcase name="rest/auth createTokenRequest should serialise capability object as JSON" time="0.000" classname="createTokenRequest should serialise capability object as JSON">
    </testcase>
    <testcase name="rest/auth Basic rest JWT" time="0.112" classname="Basic rest JWT">
    </testcase>
    <testcase name="rest/auth Rest JWT with return type " time="0.109" classname="Rest JWT with return type ">
    </testcase>
    <testcase name="rest/auth Rest embedded JWT" time="0.186" classname="Rest embedded JWT">
    </testcase>
    <testcase name="rest/auth Rest embedded JWT with encryption" time="0.172" classname="Rest embedded JWT with encryption">
    </testcase>
    <testcase name="rest/auth JWT request with invalid key" time="0.424" classname="JWT request with invalid key">
    </testcase>
    <testcase name="rest/auth Rest JWT with authCallback" time="0.104" classname="Rest JWT with authCallback">
    </testcase>
    <testcase name="rest/auth Rest JWT with authCallback and invalid keys" time="0.566" classname="Rest JWT with authCallback and invalid keys">
    </testcase>
    <testcase name="rest/auth authCallback is only invoked once on concurrent auth" time="0.112" classname="authCallback is only invoked once on concurrent auth">
    </testcase>
  </testsuite>
  <testsuite name="rest/batchPublish" timestamp="2024-10-24T16:43:58" tests="0" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="when invoked with an array of specs" timestamp="2024-10-24T16:43:58" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.107" failures="0">
    <testcase name="rest/batchPublish when invoked with an array of specs performs a batch publish and returns an array of results" time="0.106" classname="performs a batch publish and returns an array of results">
    </testcase>
  </testsuite>
  <testsuite name="when invoked with a single spec" timestamp="2024-10-24T16:43:58" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.041" failures="0">
    <testcase name="rest/batchPublish when invoked with a single spec performs a batch publish and returns a single result" time="0.041" classname="performs a batch publish and returns a single result">
    </testcase>
  </testsuite>
  <testsuite name="rest/batchPresence" timestamp="2024-10-24T16:43:58" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.591" failures="0">
    <testcase name="rest/batchPresence performs a batch presence fetch and returns a result" time="0.590" classname="performs a batch presence fetch and returns a result">
    </testcase>
  </testsuite>
  <testsuite name="rest/revokeTokens" timestamp="2024-10-24T16:43:59" tests="3" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.229" failures="0">
    <testcase name="rest/revokeTokens revokes tokens matching the given specifiers" time="0.190" classname="revokes tokens matching the given specifiers">
    </testcase>
    <testcase name="rest/revokeTokens accepts optional issuedBefore and allowReauthMargin parameters" time="0.037" classname="accepts optional issuedBefore and allowReauthMargin parameters">
    </testcase>
    <testcase name="rest/revokeTokens throws an error when using token auth" time="0.000" classname="throws an error when using token auth">
    </testcase>
  </testsuite>
  <testsuite name="rest/bufferutils" timestamp="2024-10-24T16:43:59" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/bufferutils.test.js" time="0.000" failures="0">
    <testcase name="rest/bufferutils Basic encoding and decoding" time="0.000" classname="Basic encoding and decoding">
    </testcase>
    <testcase name="rest/bufferutils BufferUtils return correct types" time="0.000" classname="BufferUtils return correct types">
    </testcase>
  </testsuite>
  <testsuite name="rest/capability" timestamp="2024-10-24T16:43:59" tests="14" file="/home/runner/work/ably-js/ably-js/test/rest/capability.test.js" time="1.087" failures="0">
    <testcase name="rest/capability Blanket intersection with specified key" time="0.236" classname="Blanket intersection with specified key">
    </testcase>
    <testcase name="rest/capability Equal intersection with specified key" time="0.592" classname="Equal intersection with specified key">
    </testcase>
    <testcase name="rest/capability Empty ops intersection" time="0.019" classname="Empty ops intersection">
    </testcase>
    <testcase name="rest/capability Empty paths intersection" time="0.027" classname="Empty paths intersection">
    </testcase>
    <testcase name="rest/capability Ops intersection non-empty" time="0.015" classname="Ops intersection non-empty">
    </testcase>
    <testcase name="rest/capability Paths intersection non-empty" time="0.015" classname="Paths intersection non-empty">
    </testcase>
    <testcase name="rest/capability Wildcard token with publish and subscribe key" time="0.016" classname="Wildcard token with publish and subscribe key">
    </testcase>
    <testcase name="rest/capability Publish and subscribe token with wildcard key" time="0.023" classname="Publish and subscribe token with wildcard key">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 1" time="0.016" classname="Resources wildcard matching 1">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 2" time="0.013" classname="Resources wildcard matching 2">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 3" time="0.014" classname="Resources wildcard matching 3">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 1" time="0.014" classname="Invalid capabilities 1">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 2" time="0.042" classname="Invalid capabilities 2">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 3" time="0.031" classname="Invalid capabilities 3">
    </testcase>
  </testsuite>
  <testsuite name="rest/defaults" timestamp="2024-10-24T16:44:00" tests="8" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
    <testcase name="rest/defaults Init with no endpoint-related options" time="0.000" classname="Init with no endpoint-related options">
    </testcase>
    <testcase name="rest/defaults Init with production environment" time="0.001" classname="Init with production environment">
    </testcase>
    <testcase name="rest/defaults Init with given environment" time="0.000" classname="Init with given environment">
    </testcase>
    <testcase name="rest/defaults Init with local environment and non-default ports" time="0.001" classname="Init with local environment and non-default ports">
    </testcase>
    <testcase name="rest/defaults Init with given host" time="0.000" classname="Init with given host">
    </testcase>
    <testcase name="rest/defaults Init with given restHost and realtimeHost" time="0.000" classname="Init with given restHost and realtimeHost">
    </testcase>
    <testcase name="rest/defaults Init with no endpoint-related options and given default environment" time="0.000" classname="Init with no endpoint-related options and given default environment">
    </testcase>
    <testcase name="rest/defaults closeOnUnload" time="0.000" classname="closeOnUnload">
    </testcase>
  </testsuite>
  <testsuite name="normaliseOptions with useBinaryProtocol == true" timestamp="2024-10-24T16:44:00" tests="0" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="given MsgPack implementation" timestamp="2024-10-24T16:44:00" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.001" failures="0">
    <testcase name="rest/defaults normaliseOptions with useBinaryProtocol == true given MsgPack implementation maintains useBinaryProtocol as true" time="0.001" classname="maintains useBinaryProtocol as true">
    </testcase>
  </testsuite>
  <testsuite name="given no MsgPack implementation" timestamp="2024-10-24T16:44:00" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
    <testcase name="rest/defaults normaliseOptions with useBinaryProtocol == true given no MsgPack implementation changes useBinaryProtocol to false" time="0.000" classname="changes useBinaryProtocol to false">
    </testcase>
  </testsuite>
  <testsuite name="rest/fallbacks" timestamp="2024-10-24T16:44:00" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/fallbacks.test.js" time="0.000" failures="0">
    <testcase name="rest/fallbacks Store working fallback" time="6.033" classname="Store working fallback">
    </testcase>
  </testsuite>
  <testsuite name="Max elapsed time for host retries" timestamp="2024-10-24T16:44:06" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/fallbacks.test.js" time="3.010" failures="0">
    <testcase name="rest/fallbacks Max elapsed time for host retries can timeout after default host" time="1.004" classname="can timeout after default host">
    </testcase>
    <testcase name="rest/fallbacks Max elapsed time for host retries can timeout after fallback host retries" time="2.005" classname="can timeout after fallback host retries">
    </testcase>
  </testsuite>
  <testsuite name="rest/history" timestamp="2024-10-24T16:44:09" tests="13" file="/home/runner/work/ably-js/ably-js/test/rest/history.test.js" time="12.438" failures="0">
    <testcase name="rest/history history_simple with binary protocol" time="1.030" classname="history_simple with binary protocol">
    </testcase>
    <testcase name="rest/history history_simple with text protocol" time="1.053" classname="history_simple with text protocol">
    </testcase>
    <testcase name="rest/history history_multiple with binary protocol" time="1.035" classname="history_multiple with binary protocol">
    </testcase>
    <testcase name="rest/history history_multiple with text protocol" time="1.030" classname="history_multiple with text protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_b with binary protocol" time="1.221" classname="history_simple_paginated_b with binary protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_b with text protocol" time="1.214" classname="history_simple_paginated_b with text protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_f" time="1.239" classname="history_simple_paginated_f">
    </testcase>
    <testcase name="rest/history history_multiple_paginated_b" time="1.242" classname="history_multiple_paginated_b">
    </testcase>
    <testcase name="rest/history history_multiple_paginated_f" time="1.135" classname="history_multiple_paginated_f">
    </testcase>
    <testcase name="rest/history history_encoding_errors with binary protocol" time="1.022" classname="history_encoding_errors with binary protocol">
    </testcase>
    <testcase name="rest/history history_encoding_errors with text protocol" time="1.024" classname="history_encoding_errors with text protocol">
    </testcase>
    <testcase name="rest/history history_no_next_page with binary protocol" time="0.093" classname="history_no_next_page with binary protocol">
    </testcase>
    <testcase name="rest/history history_no_next_page with text protocol" time="0.097" classname="history_no_next_page with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="rest/http" timestamp="2024-10-24T16:44:21" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/http.test.js" time="0.151" failures="0">
    <testcase name="rest/http Should send X-Ably-Version and Ably-Agent headers in get/post requests" time="0.149" classname="Should send X-Ably-Version and Ably-Agent headers in get/post requests">
    </testcase>
    <testcase name="rest/http Should handle no content responses" time="0.001" classname="Should handle no content responses">
    </testcase>
  </testsuite>
  <testsuite name="rest/init" timestamp="2024-10-24T16:44:21" tests="6" file="/home/runner/work/ably-js/ably-js/test/rest/init.test.js" time="0.338" failures="0">
    <testcase name="rest/init Init with key string" time="0.000" classname="Init with key string">
    </testcase>
    <testcase name="rest/init Init with token string" time="0.337" classname="Init with token string">
    </testcase>
    <testcase name="rest/init Init with tls: false" time="0.000" classname="Init with tls: false">
    </testcase>
    <testcase name="rest/init Init with tls: true" time="0.000" classname="Init with tls: true">
    </testcase>
    <testcase name="rest/init Init without any tls key should enable tls" time="0.000" classname="Init without any tls key should enable tls">
    </testcase>
    <testcase name="rest/init Init with clientId set to &apos;*&apos; or anything other than a string or null should error" time="0.000" classname="Init with clientId set to &apos;*&apos; or anything other than a string or null should error">
    </testcase>
  </testsuite>
  <testsuite name="rest/message" timestamp="2024-10-24T16:44:22" tests="7" file="/home/runner/work/ably-js/ably-js/test/rest/message.test.js" time="0.620" failures="0">
    <testcase name="rest/message Should implicitly send clientId when authenticated with clientId" time="0.092" classname="Should implicitly send clientId when authenticated with clientId">
    </testcase>
    <testcase name="rest/message Should publish clientId when provided explicitly in message" time="0.117" classname="Should publish clientId when provided explicitly in message">
    </testcase>
    <testcase name="rest/message Should error when clientId sent in message is different than authenticated clientId" time="0.105" classname="Should error when clientId sent in message is different than authenticated clientId">
    </testcase>
    <testcase name="rest/message Should error when publishing message larger than maxMessageSize" time="0.001" classname="Should error when publishing message larger than maxMessageSize">
    </testcase>
    <testcase name="rest/message Should send correct IDs when idempotentRestPublishing set to false" time="0.096" classname="Should send correct IDs when idempotentRestPublishing set to false">
    </testcase>
    <testcase name="rest/message Should add IDs when automatic idempotent rest publishing option enabled" time="0.100" classname="Should add IDs when automatic idempotent rest publishing option enabled">
    </testcase>
    <testcase name="rest/message Rest publish params" time="0.108" classname="Rest publish params">
    </testcase>
  </testsuite>
  <testsuite name="rest/presence" timestamp="2024-10-24T16:44:22" tests="4" file="/home/runner/work/ably-js/ably-js/test/rest/presence.test.js" time="0.059" failures="0">
    <testcase name="rest/presence Presence get simple" time="0.016" classname="Presence get simple">
    </testcase>
    <testcase name="rest/presence Presence history simple" time="0.027" classname="Presence history simple">
    </testcase>
    <testcase name="rest/presence Presence message JSON serialisation" time="0.014" classname="Presence message JSON serialisation">
    </testcase>
    <testcase name="rest/presence Presence get limits and filtering" time="0.000" classname="Presence get limits and filtering">
    </testcase>
  </testsuite>
  <testsuite name="rest/push" timestamp="2024-10-24T16:44:22" tests="9" file="/home/runner/work/ably-js/ably-js/test/rest/push.test.js" time="0.000" failures="0">
    <testcase name="rest/push Get subscriptions" time="0.906" classname="Get subscriptions">
    </testcase>
    <testcase name="rest/push Publish" time="0.109" classname="Publish">
    </testcase>
    <testcase name="rest/push deviceRegistrations save" time="1.149" classname="deviceRegistrations save">
    </testcase>
    <testcase name="rest/push deviceRegistrations get and list" time="1.459" classname="deviceRegistrations get and list">
    </testcase>
    <testcase name="rest/push deviceRegistrations remove removeWhere" time="2.066" classname="deviceRegistrations remove removeWhere">
    </testcase>
    <testcase name="rest/push channelSubscriptions save" time="0.862" classname="channelSubscriptions save">
    </testcase>
    <testcase name="rest/push channelSubscriptions get" time="1.106" classname="channelSubscriptions get">
    </testcase>
    <testcase name="rest/push push_channelSubscriptions_remove" time="0.690" classname="push_channelSubscriptions_remove">
    </testcase>
    <testcase name="rest/push channelSubscriptions listChannels" time="0.900" classname="channelSubscriptions listChannels">
    </testcase>
  </testsuite>
  <testsuite name="push activation" timestamp="2024-10-24T16:44:32" tests="13" file="/home/runner/work/ably-js/ably-js/test/rest/push.test.js" time="8.726" failures="0">
    <testcase name="rest/push push activation push_activation_succeeds" time="0.334" classname="push_activation_succeeds">
    </testcase>
    <testcase name="rest/push push activation device_push" time="0.123" classname="device_push">
    </testcase>
    <testcase name="rest/push push activation subscribe_client" time="1.103" classname="subscribe_client">
    </testcase>
    <testcase name="rest/push push activation subscribe_client_without_clientId" time="0.429" classname="subscribe_client_without_clientId">
    </testcase>
    <testcase name="rest/push push activation unsubscribe_client" time="1.751" classname="unsubscribe_client">
    </testcase>
    <testcase name="rest/push push activation direct_publish_client_id" time="0.309" classname="direct_publish_client_id">
    </testcase>
    <testcase name="rest/push push activation subscribe_device" time="0.859" classname="subscribe_device">
    </testcase>
    <testcase name="rest/push push activation unsubscribe_device" time="1.265" classname="unsubscribe_device">
    </testcase>
    <testcase name="rest/push push activation direct_publish_device_id" time="0.465" classname="direct_publish_device_id">
    </testcase>
    <testcase name="rest/push push activation push_channel_subscription_device_id" time="0.740" classname="push_channel_subscription_device_id">
    </testcase>
    <testcase name="rest/push push activation push_channel_subscription_client_id" time="1.255" classname="push_channel_subscription_client_id">
    </testcase>
    <testcase name="rest/push push activation failed_getting_device_details" time="0.000" classname="failed_getting_device_details">
    </testcase>
    <testcase name="rest/push push activation failed_registration" time="0.084" classname="failed_registration">
    </testcase>
  </testsuite>
  <testsuite name="rest/request" timestamp="2024-10-24T16:44:40" tests="16" file="/home/runner/work/ably-js/ably-js/test/rest/request.test.js" time="1.429" failures="0">
    <testcase name="rest/request request_version with binary protocol" time="0.001" classname="request_version with binary protocol">
    </testcase>
    <testcase name="rest/request request_version with text protocol" time="0.000" classname="request_version with text protocol">
    </testcase>
    <testcase name="rest/request request_time with binary protocol" time="0.010" classname="request_time with binary protocol">
    </testcase>
    <testcase name="rest/request request_time with text protocol" time="0.010" classname="request_time with text protocol">
    </testcase>
    <testcase name="rest/request request_404 with binary protocol" time="0.398" classname="request_404 with binary protocol">
    </testcase>
    <testcase name="rest/request request_404 with text protocol" time="0.473" classname="request_404 with text protocol">
    </testcase>
    <testcase name="rest/request request_network_error" time="0.009" classname="request_network_error">
    </testcase>
    <testcase name="rest/request request_post_get_messages with binary protocol" time="0.129" classname="request_post_get_messages with binary protocol">
    </testcase>
    <testcase name="rest/request request_post_get_messages with text protocol" time="0.132" classname="request_post_get_messages with text protocol">
    </testcase>
    <testcase name="rest/request request_batch_api_success with binary protocol" time="0.020" classname="request_batch_api_success with binary protocol">
    </testcase>
    <testcase name="rest/request request_batch_api_success with text protocol" time="0.019" classname="request_batch_api_success with text protocol">
    </testcase>
    <testcase name="rest/request checkput" time="0.074" classname="checkput">
    </testcase>
    <testcase name="rest/request checkpatch" time="0.074" classname="checkpatch">
    </testcase>
    <testcase name="rest/request checkdelete" time="0.075" classname="checkdelete">
    </testcase>
  </testsuite>
  <testsuite name="rest/stats" timestamp="2024-10-24T16:44:42" tests="11" file="/home/runner/work/ably-js/ably-js/test/rest/stats.test.js" time="21.142" failures="0">
    <testcase name="rest/stats contains expected fields" time="10.080" classname="contains expected fields">
    </testcase>
    <testcase name="rest/stats appstats_minute0" time="0.020" classname="appstats_minute0">
    </testcase>
    <testcase name="rest/stats appstats_minute1" time="0.035" classname="appstats_minute1">
    </testcase>
    <testcase name="rest/stats appstats_hour0" time="0.029" classname="appstats_hour0">
    </testcase>
    <testcase name="rest/stats appstats_limit_backwards" time="0.022" classname="appstats_limit_backwards">
    </testcase>
    <testcase name="rest/stats appstats_limit_forwards" time="0.025" classname="appstats_limit_forwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_backwards" time="0.086" classname="appstats_pagination_backwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_forwards" time="0.082" classname="appstats_pagination_forwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_omitted" time="0.072" classname="appstats_pagination_omitted">
    </testcase>
  </testsuite>
  <testsuite name="rest/status" timestamp="2024-10-24T16:45:03" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/status.test.js" time="0.110" failures="0">
    <testcase name="rest/status status0 with binary protocol" time="0.095" classname="status0 with binary protocol">
    </testcase>
    <testcase name="rest/status status0 with text protocol" time="0.015" classname="status0 with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="rest/time" timestamp="2024-10-24T16:45:03" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/time.test.js" time="6.061" failures="0">
    <testcase name="rest/time time0" time="0.009" classname="time0">
    </testcase>
  </testsuite>
</testsuites>