diff --git a/scripts/node_sync_e2e.exs b/scripts/node_sync_e2e.exs index 6c5e6f7..e753eec 100644 --- a/scripts/node_sync_e2e.exs +++ b/scripts/node_sync_e2e.exs @@ -2,12 +2,14 @@ defmodule NodeSyncE2E.RelayClient do use WebSockex def start_link(url, owner, opts \\ []) do - WebSockex.start_link( - url, - __MODULE__, - owner, - Keyword.put(opts, :handle_initial_conn_failure, true) - ) + ws_opts = + opts + |> Keyword.put_new(:handle_initial_conn_failure, true) + |> Keyword.put_new(:async, true) + |> Keyword.put_new(:socket_connect_timeout, 2_000) + |> Keyword.put_new(:socket_recv_timeout, 2_000) + + WebSockex.start_link(url, __MODULE__, owner, ws_opts) end def send_json(pid, payload) do @@ -460,9 +462,14 @@ defmodule NodeSyncE2E.Runner do end defp ensure_event_absent(config, node, event_id) do - broad_filter = %{"ids" => [event_id], "limit" => 1} + filter = %{ + "kinds" => [5001], + "#r" => [config.resource], + "ids" => [event_id], + "limit" => 1 + } - case query_events(node, config.client_private_key, broad_filter) do + case query_events(node, config.client_private_key, filter) do {:ok, []} -> :ok @@ -473,8 +480,8 @@ defmodule NodeSyncE2E.Runner do :ok end - {:error, _reason} -> - :ok + {:error, reason} -> + {:error, {:event_absence_query_failed, reason}} end end @@ -572,7 +579,8 @@ defmodule NodeSyncE2E.Runner do [filter], [], false, - nil + nil, + 0 ) after RelayClient.close(client) @@ -588,26 +596,32 @@ defmodule NodeSyncE2E.Runner do filters, events, authenticated?, - auth_event_id + auth_event_id, + auth_attempts ) do receive do {:node_sync_e2e_relay_client, ^client, :frame, ["AUTH", challenge]} -> - auth_event = - auth_event(relay_auth_url, challenge) - |> sign_event!(private_key) + if auth_attempts >= 5 do + {:error, :too_many_auth_challenges} + else + auth_event = + auth_event(relay_auth_url, challenge) + |> sign_event!(private_key) - :ok = RelayClient.send_json(client, ["AUTH", auth_event]) + :ok = RelayClient.send_json(client, ["AUTH", auth_event]) - authenticated_query( - client, - relay_auth_url, - private_key, - subscription_id, - filters, - events, - authenticated?, - auth_event["id"] - ) + authenticated_query( + client, + relay_auth_url, + private_key, + subscription_id, + filters, + events, + authenticated?, + auth_event["id"], + auth_attempts + 1 + ) + end {:node_sync_e2e_relay_client, ^client, :frame, ["OK", event_id, true, _message]} when event_id == auth_event_id -> @@ -621,7 +635,8 @@ defmodule NodeSyncE2E.Runner do filters, events, true, - nil + nil, + auth_attempts ) {:node_sync_e2e_relay_client, ^client, :frame, ["OK", event_id, false, message]} @@ -637,7 +652,8 @@ defmodule NodeSyncE2E.Runner do filters, [event | events], authenticated?, - auth_event_id + auth_event_id, + auth_attempts ) {:node_sync_e2e_relay_client, ^client, :frame, ["EOSE", ^subscription_id]} -> @@ -658,7 +674,8 @@ defmodule NodeSyncE2E.Runner do filters, events, authenticated?, - auth_event_id + auth_event_id, + auth_attempts ) true ->