@@ -2066,5 +2066,51 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
20662066
20672067 UNIT_ASSERT (HasTabletIssue (result));
20682068 }
2069+
2070+ Y_UNIT_TEST (TestSystemStateRetriesAfterReceivingResponse) {
2071+ TPortManager tp;
2072+ ui16 port = tp.GetPort (2134 );
2073+ ui16 grpcPort = tp.GetPort (2135 );
2074+ auto settings = TServerSettings (port)
2075+ .SetNodeCount (1 )
2076+ .SetDynamicNodeCount (1 )
2077+ .SetUseRealThreads (false )
2078+ .SetDomainName (" Root" );
2079+ TServer server (settings);
2080+ server.EnableGRpc (grpcPort);
2081+ TClient client (settings);
2082+ TTestActorRuntime& runtime = *server.GetRuntime ();
2083+
2084+ TActorId sender = runtime.AllocateEdgeActor ();
2085+ TAutoPtr<IEventHandle> handle;
2086+
2087+ std::optional<TActorId> targetActor;
2088+ auto observerFunc = [&](TAutoPtr<IEventHandle>& ev) {
2089+ switch (ev->GetTypeRewrite ()) {
2090+ case TEvWhiteboard::EvSystemStateResponse: {
2091+ if (ev->Cookie == 1 ) {
2092+ if (!targetActor) {
2093+ targetActor = ev->Recipient ;
2094+ runtime.Send (ev.Release ());
2095+ runtime.Send (new IEventHandle (
2096+ *targetActor,
2097+ sender,
2098+ new NHealthCheck::TEvPrivate::TEvRetryNodeWhiteboard (1 , TEvWhiteboard::TEvSystemStateRequest::EventType)
2099+ ));
2100+
2101+ }
2102+ return TTestActorRuntime::EEventAction::DROP;
2103+ }
2104+ break ;
2105+ }
2106+ }
2107+ return TTestActorRuntime::EEventAction::PROCESS;
2108+ };
2109+ runtime.SetObserverFunc (observerFunc);
2110+ runtime.Send (new IEventHandle (NHealthCheck::MakeHealthCheckID (), sender, new NHealthCheck::TEvSelfCheckRequest (), 0 ));
2111+
2112+ auto result = runtime.GrabEdgeEvent <NHealthCheck::TEvSelfCheckResult>(handle)->Result ;
2113+ UNIT_ASSERT_VALUES_EQUAL (result.self_check_result (), Ydb::Monitoring::SelfCheck::GOOD);
2114+ }
20692115}
20702116}
0 commit comments