From 8305bd1a8682de2a0fc359b6b701bbc241f33204 Mon Sep 17 00:00:00 2001 From: Aleksey Sabilin Date: Mon, 27 Jul 2026 23:19:27 +0300 Subject: [PATCH] fix(ct): skip node_metric noise when waiting for admin WS pong [skip ci] --- test/api/admins/admin_websocket_tests.erl | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/test/api/admins/admin_websocket_tests.erl b/test/api/admins/admin_websocket_tests.erl index da2d636..d829faf 100644 --- a/test/api/admins/admin_websocket_tests.erl +++ b/test/api/admins/admin_websocket_tests.erl @@ -134,7 +134,7 @@ test_admin_ws_report_notification(WS, UserToken, EventId) -> test_admin_ws_ping(WS) -> ct:pal(" TEST: Admin Ping/Pong"), ok = test_ws_send(WS, #{action => <<"ping">>}), - {ok, #{<<"status">> := <<"pong">>}} = test_ws_recv(WS). + {ok, #{<<"status">> := <<"pong">>}} = test_ws_recv_status(WS, <<"pong">>, 5000). %% @doc Отписка от канала reports. -spec test_admin_ws_unsubscribe(pid()) -> ok. @@ -282,6 +282,26 @@ test_ws_recv(ConnPid, Timeout) -> {error, timeout} end. +%% @doc Ждём WS-сообщение с заданным status, пропуская посторонние (node_metric на shared stand). +test_ws_recv_status(ConnPid, ExpectedStatus, Timeout) -> + Deadline = erlang:monotonic_time(millisecond) + Timeout, + test_ws_recv_status_loop(ConnPid, ExpectedStatus, Deadline). + +test_ws_recv_status_loop(ConnPid, ExpectedStatus, Deadline) -> + Remaining = max(0, Deadline - erlang:monotonic_time(millisecond)), + case test_ws_recv(ConnPid, Remaining) of + {ok, #{<<"status">> := ExpectedStatus} = Msg} -> + {ok, Msg}; + {ok, #{<<"type">> := Type}} -> + ct:pal(" Skipping WS type=~s (waiting for status ~s)", [Type, ExpectedStatus]), + test_ws_recv_status_loop(ConnPid, ExpectedStatus, Deadline); + {ok, Other} -> + ct:pal(" Skipping WS message ~p (waiting for status ~s)", [Other, ExpectedStatus]), + test_ws_recv_status_loop(ConnPid, ExpectedStatus, Deadline); + {error, timeout} = Err -> + Err + end. + %% @doc Ждём WS-сообщение заданного type, пропуская посторонние (шум на shared stand). test_ws_recv_type(ConnPid, ExpectedType, Timeout) -> Deadline = erlang:monotonic_time(millisecond) + Timeout,