@@ -690,7 +690,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
690
690
}
691
691
};
692
692
693
- void CheckHcResultHasIssuesWithStatus (Ydb::Monitoring::SelfCheckResult& result, const TString& type,
693
+ void CheckHcResultHasIssuesWithStatus (const Ydb::Monitoring::SelfCheckResult& result, const TString& type,
694
694
const Ydb::Monitoring::StatusFlag::Status expectingStatus, ui32 total,
695
695
TLocationFilter locationFilter = {}) {
696
696
int issuesCount = 0 ;
@@ -2192,6 +2192,80 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
2192
2192
UNIT_ASSERT_VALUES_EQUAL (database_status.storage ().pools ()[0 ].id (), " static" );
2193
2193
}
2194
2194
2195
+ Y_UNIT_TEST (BridgeNoBscResponse) {
2196
+ TPortManager tp;
2197
+ ui16 port = tp.GetPort (2134 );
2198
+ ui16 grpcPort = tp.GetPort (2135 );
2199
+ auto settings = TServerSettings (port)
2200
+ .SetNodeCount (1 )
2201
+ .SetDynamicNodeCount (1 )
2202
+ .SetUseRealThreads (false )
2203
+ .SetDomainName (" Root" );
2204
+ TServer server (settings);
2205
+ server.EnableGRpc (grpcPort);
2206
+ TClient client (settings);
2207
+ TTestActorRuntime& runtime = *server.GetRuntime ();
2208
+
2209
+ auto &dynamicNameserviceConfig = runtime.GetAppData ().DynamicNameserviceConfig ;
2210
+ dynamicNameserviceConfig->MaxStaticNodeId = runtime.GetNodeId (server.StaticNodes () - 1 );
2211
+ dynamicNameserviceConfig->MinDynamicNodeId = runtime.GetNodeId (server.StaticNodes ());
2212
+ dynamicNameserviceConfig->MaxDynamicNodeId = runtime.GetNodeId (server.StaticNodes () + server.DynamicNodes () - 1 );
2213
+
2214
+ auto bridgeInfo = std::make_shared<TBridgeInfo>();
2215
+ bridgeInfo->Piles .push_back (TBridgeInfo::TPile{.BridgePileId = TBridgePileId::FromPileIndex (0 ), .Name = " 1" , .State = NKikimrBridge::TClusterState::SYNCHRONIZED});
2216
+ bridgeInfo->Piles .push_back (TBridgeInfo::TPile{.BridgePileId = TBridgePileId::FromPileIndex (1 ), .Name = " 2" , .State = NKikimrBridge::TClusterState::SYNCHRONIZED});
2217
+ bridgeInfo->SelfNodePile = bridgeInfo->Piles .data ();
2218
+
2219
+ auto observerFunc = [&](TAutoPtr<IEventHandle>& ev) {
2220
+ auto type = ev->GetTypeRewrite ();
2221
+ if (EventSpaceBegin (TKikimrEvents::ES_SYSTEM_VIEW) <= type && type <= EventSpaceEnd (TKikimrEvents::ES_SYSTEM_VIEW)) {
2222
+ return TTestActorRuntime::EEventAction::DROP;
2223
+ }
2224
+ if (type == TEvBlobStorage::EvNodeWardenStorageConfig) {
2225
+ auto * x = reinterpret_cast <TEvNodeWardenStorageConfig::TPtr*>(&ev);
2226
+ (*x)->Get ()->BridgeInfo = bridgeInfo;
2227
+ }
2228
+ if (type == NNodeWhiteboard::TEvWhiteboard::EvBSGroupStateResponse) {
2229
+ auto * x = reinterpret_cast <NNodeWhiteboard::TEvWhiteboard::TEvBSGroupStateResponse::TPtr*>(&ev);
2230
+ for (auto & group : *(*x)->Get ()->Record .mutable_bsgroupstateinfo ()) {
2231
+ group.set_bridgepileid (1 );
2232
+ }
2233
+ }
2234
+ if (type == NNodeWhiteboard::TEvWhiteboard::EvVDiskStateResponse) {
2235
+ auto *x = reinterpret_cast <NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateResponse::TPtr*>(&ev);
2236
+ (*x)->Get ()->Record .mutable_vdiskstateinfo (0 )->set_vdiskstate (NKikimrWhiteboard::EVDiskState::SyncGuidRecovery);
2237
+ }
2238
+ return TTestActorRuntime::EEventAction::PROCESS;
2239
+ };
2240
+ runtime.SetObserverFunc (observerFunc);
2241
+
2242
+ TActorId sender = runtime.AllocateEdgeActor ();
2243
+ TAutoPtr<IEventHandle> handle;
2244
+
2245
+ auto *request = new NHealthCheck::TEvSelfCheckRequest;
2246
+ request->Request .set_return_verbose_status (true );
2247
+ request->Database = " /Root" ;
2248
+ runtime.Send (new IEventHandle (NHealthCheck::MakeHealthCheckID (), sender, request, 0 ));
2249
+ const auto result = runtime.GrabEdgeEvent <NHealthCheck::TEvSelfCheckResult>(handle)->Result ;
2250
+
2251
+ Ctest << result.ShortDebugString () << Endl;
2252
+
2253
+ UNIT_ASSERT_VALUES_EQUAL (result.self_check_result (), Ydb::Monitoring::SelfCheck::EMERGENCY);
2254
+
2255
+ bool bscTabletIssueFoundInResult = false ;
2256
+ for (const auto &issue_log : result.issue_log ()) {
2257
+ if (issue_log.level () == 3 && issue_log.type () == " SYSTEM_TABLET" ) {
2258
+ UNIT_ASSERT_VALUES_EQUAL (issue_log.location ().compute ().tablet ().id ().size (), 1 );
2259
+ UNIT_ASSERT_VALUES_EQUAL (issue_log.location ().compute ().tablet ().id ()[0 ], ToString (MakeBSControllerID ()));
2260
+ UNIT_ASSERT_VALUES_EQUAL (issue_log.location ().compute ().tablet ().type (), " BSController" );
2261
+ bscTabletIssueFoundInResult = true ;
2262
+ }
2263
+ }
2264
+ UNIT_ASSERT (bscTabletIssueFoundInResult);
2265
+
2266
+ CheckHcResultHasIssuesWithStatus (result, " STORAGE_GROUP" , Ydb::Monitoring::StatusFlag::RED, 1 , TLocationFilter ().Pool (" static" ).Pile (" 1" ));
2267
+ }
2268
+
2195
2269
Y_UNIT_TEST (ShardsLimit999) {
2196
2270
ShardsQuotaTest (999 , 1000 , 1 , Ydb::Monitoring::StatusFlag::RED);
2197
2271
}
0 commit comments