@@ -1961,5 +1961,51 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
19611961
19621962 UNIT_ASSERT (HasDeadTabletIssue (result));
19631963 }
1964+
1965+ Y_UNIT_TEST (TestSystemStateRetriesAfterReceivingResponse) {
1966+ TPortManager tp;
1967+ ui16 port = tp.GetPort (2134 );
1968+ ui16 grpcPort = tp.GetPort (2135 );
1969+ auto settings = TServerSettings (port)
1970+ .SetNodeCount (1 )
1971+ .SetDynamicNodeCount (1 )
1972+ .SetUseRealThreads (false )
1973+ .SetDomainName (" Root" );
1974+ TServer server (settings);
1975+ server.EnableGRpc (grpcPort);
1976+ TClient client (settings);
1977+ TTestActorRuntime& runtime = *server.GetRuntime ();
1978+
1979+ TActorId sender = runtime.AllocateEdgeActor ();
1980+ TAutoPtr<IEventHandle> handle;
1981+
1982+ std::optional<TActorId> targetActor;
1983+ auto observerFunc = [&](TAutoPtr<IEventHandle>& ev) {
1984+ switch (ev->GetTypeRewrite ()) {
1985+ case TEvWhiteboard::EvSystemStateResponse: {
1986+ if (ev->Cookie == 1 ) {
1987+ if (!targetActor) {
1988+ targetActor = ev->Recipient ;
1989+ runtime.Send (ev.Release ());
1990+ runtime.Send (new IEventHandle (
1991+ *targetActor,
1992+ sender,
1993+ new NHealthCheck::TEvPrivate::TEvRetryNodeWhiteboard (1 , TEvWhiteboard::TEvSystemStateRequest::EventType)
1994+ ));
1995+
1996+ }
1997+ return TTestActorRuntime::EEventAction::DROP;
1998+ }
1999+ break ;
2000+ }
2001+ }
2002+ return TTestActorRuntime::EEventAction::PROCESS;
2003+ };
2004+ runtime.SetObserverFunc (observerFunc);
2005+ runtime.Send (new IEventHandle (NHealthCheck::MakeHealthCheckID (), sender, new NHealthCheck::TEvSelfCheckRequest (), 0 ));
2006+
2007+ auto result = runtime.GrabEdgeEvent <NHealthCheck::TEvSelfCheckResult>(handle)->Result ;
2008+ UNIT_ASSERT_VALUES_EQUAL (result.self_check_result (), Ydb::Monitoring::SelfCheck::GOOD);
2009+ }
19642010}
19652011}
0 commit comments