From 6d91e9cf18c1ef41de802ad5f841f527ba1bc7ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B0?= =?UTF-8?q?=D0=B1=D0=B8=D0=BB=D0=B8=D0=BD?= Date: Thu, 16 Jul 2026 13:13:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(test):=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BE=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D0=BD=D0=B8=D0=B5=20WS-=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B8=20node=5Fmetri?= =?UTF-8?q?c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На shared IFT в /admin/ws/metrics приходил report_created от других тестов/активности. Co-authored-by: Cursor --- test/api/admins/admin_websocket_tests.erl | 29 ++++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/test/api/admins/admin_websocket_tests.erl b/test/api/admins/admin_websocket_tests.erl index 8878058..b5e9ce4 100644 --- a/test/api/admins/admin_websocket_tests.erl +++ b/test/api/admins/admin_websocket_tests.erl @@ -153,8 +153,8 @@ test_admin_ws_node_metrics(Url, Token) -> ok = test_ws_send(WS, #{action => <<"ping">>}), {ok, #{<<"status">> := <<"pong">>}} = test_ws_recv(WS, 3000), ct:pal(" Ping/Pong OK – waiting for node metric..."), - case test_ws_recv(WS, 15000) of - {ok, #{<<"type">> := <<"node_metric">>, <<"data">> := MetricData}} -> + case test_ws_recv_type(WS, <<"node_metric">>, 15000) of + {ok, #{<<"data">> := MetricData}} -> ct:pal(" OK - Received node metric"), ?assert(is_map(MetricData)), ?assert(maps:is_key(<<"timestamp">>, MetricData)), @@ -164,10 +164,7 @@ test_admin_ws_node_metrics(Url, Token) -> [maps:get(<<"node">>, MetricData), maps:get(<<"memory_total">>, MetricData) div 1048576]); {error, timeout} -> - ct:pal(" WARNING: No node metric received (timeout) – check monitor logs"); - Other -> - ct:pal(" ERROR: Unexpected response: ~p", [Other]), - ?assert(false, {unexpected_ws_message, Other}) + ct:pal(" WARNING: No node metric received (timeout) – check monitor logs") end, test_ws_close(WS). @@ -287,6 +284,26 @@ test_ws_recv(ConnPid, Timeout) -> {error, timeout} end. +%% @doc Ждём WS-сообщение заданного type, пропуская посторонние (шум на shared stand). +test_ws_recv_type(ConnPid, ExpectedType, Timeout) -> + Deadline = erlang:monotonic_time(millisecond) + Timeout, + test_ws_recv_type_loop(ConnPid, ExpectedType, Deadline). + +test_ws_recv_type_loop(ConnPid, ExpectedType, Deadline) -> + Remaining = max(0, Deadline - erlang:monotonic_time(millisecond)), + case test_ws_recv(ConnPid, Remaining) of + {ok, #{<<"type">> := ExpectedType} = Msg} -> + {ok, Msg}; + {ok, #{<<"type">> := ActualType} = Other} -> + ct:pal(" Skipping WS type=~s (waiting for ~s)", [ActualType, ExpectedType]), + test_ws_recv_type_loop(ConnPid, ExpectedType, Deadline); + {ok, Other} -> + ct:pal(" Skipping WS message ~p (waiting for type ~s)", [Other, ExpectedType]), + test_ws_recv_type_loop(ConnPid, ExpectedType, Deadline); + {error, timeout} = Err -> + Err + end. + test_ws_close(ConnPid) -> gun:close(ConnPid).