@@ -274,6 +274,7 @@ Y_UNIT_TEST_SUITE(Viewer) {
274274 nodes.clear ();
275275
276276 for (int nodeId = 0 ; nodeId < nodesTotal; nodeId++) {
277+ sample.NodeId = nodeId;
277278 nodes.emplace_back (sample);
278279 }
279280 }
@@ -1317,4 +1318,124 @@ Y_UNIT_TEST_SUITE(Viewer) {
13171318 " description" ,
13181319 });
13191320 }
1321+
1322+ void ChangeBSGroupStateResponse (TEvWhiteboard::TEvBSGroupStateResponse::TPtr* ev) {
1323+ auto & pbRecord = (*ev)->Get ()->Record ;
1324+ // pbRecord.clear_bsgroupstateinfo();
1325+ // auto state = pbRecord.add_bsgroupstateinfo();
1326+ Cerr << pbRecord.ShortDebugString () << Endl;
1327+ }
1328+
1329+ void ChangePDiskStateResponse (TEvWhiteboard::TEvPDiskStateResponse::TPtr* ev) {
1330+ auto & pbRecord = (*ev)->Get ()->Record ;
1331+ // pbRecord.clear_pdiskstateinfo();
1332+ // auto state = pbRecord.add_pdiskstateinfo();
1333+ Cerr << pbRecord.ShortDebugString () << Endl;
1334+ }
1335+
1336+
1337+ void ChangeVDiskStateOn9NodeResponse (NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateResponse::TPtr* ev) {
1338+ ui64 nodeId = (*ev)->Cookie ;
1339+ auto & pbRecord = (*ev)->Get ()->Record ;
1340+
1341+ auto sample = pbRecord.vdiskstateinfo (0 );
1342+ pbRecord.clear_vdiskstateinfo ();
1343+
1344+ for (int k = 1 ; k <= 8 ; k++) {
1345+ auto groupId = (nodeId + k) % 9 ;
1346+ ui32 pdisk = k <= 4 ? 0 : 1 ;
1347+ ui32 slotid = k % 4 ;
1348+ auto vdisk = 0 ;
1349+ auto state = pbRecord.add_vdiskstateinfo ();
1350+ state->CopyFrom (sample);
1351+ state->set_pdiskid (pdisk);
1352+ state->set_vdiskslotid (slotid);
1353+ state->mutable_vdiskid ()->set_vdisk (vdisk++);
1354+ state->mutable_vdiskid ()->set_groupid (groupId);
1355+ state->set_vdiskstate (NKikimrWhiteboard::EVDiskState::OK);
1356+ state->set_nodeid (nodeId);
1357+ }
1358+ }
1359+
1360+ void JsonStorage9NodesListingTest () {
1361+ TPortManager tp;
1362+ ui16 port = tp.GetPort (2134 );
1363+ ui16 grpcPort = tp.GetPort (2135 );
1364+ auto settings = TServerSettings (port);
1365+ settings.InitKikimrRunConfig ()
1366+ .SetNodeCount (1 )
1367+ .SetUseRealThreads (false )
1368+ .SetDomainName (" Root" );
1369+ TServer server (settings);
1370+ server.EnableGRpc (grpcPort);
1371+ TClient client (settings);
1372+ TTestActorRuntime& runtime = *server.GetRuntime ();
1373+
1374+ TActorId sender = runtime.AllocateEdgeActor ();
1375+ TAutoPtr<IEventHandle> handle;
1376+
1377+ THttpRequest httpReq (HTTP_METHOD_GET);
1378+ httpReq.CgiParameters .emplace (" with" , " all" );
1379+ httpReq.CgiParameters .emplace (" version" , " v2" );
1380+ // httpReq.CgiParameters.emplace("node_id", "1");
1381+ auto page = MakeHolder<TMonPage>(" viewer" , " title" );
1382+ TMonService2HttpRequest monReq (nullptr , &httpReq, nullptr , page.Get (), " /json/storage" , nullptr );
1383+ auto request = MakeHolder<NMon::TEvHttpInfo>(monReq);
1384+
1385+ auto observerFunc = [&](TAutoPtr<IEventHandle>& ev) {
1386+ Y_UNUSED (ev);
1387+ switch (ev->GetTypeRewrite ()) {
1388+ case TEvInterconnect::EvNodesInfo: {
1389+ auto *x = reinterpret_cast <TEvInterconnect::TEvNodesInfo::TPtr*>(&ev);
1390+ Cerr << " aaaa EvNodesInfo 1" << Endl;
1391+ ChangeListNodes (x, 9 );
1392+ Cerr << " aaaa EvNodesInfo 2" << Endl;
1393+ break ;
1394+ }
1395+ case TEvWhiteboard::EvBSGroupStateResponse: {
1396+ auto *x = reinterpret_cast <TEvWhiteboard::TEvBSGroupStateResponse::TPtr*>(&ev);
1397+ Cerr << " aaaa EvBSGroupStateResponse 1" << Endl;
1398+ ChangeBSGroupStateResponse (x);
1399+ Cerr << " aaaa EvBSGroupStateResponse 2" << Endl;
1400+ break ;
1401+ }
1402+ case TEvWhiteboard::EvVDiskStateResponse: {
1403+ auto *x = reinterpret_cast <TEvWhiteboard::TEvVDiskStateResponse::TPtr*>(&ev);
1404+ Cerr << " aaaa EvVDiskStateResponse 1" << Endl;
1405+ ChangeVDiskStateOn9NodeResponse (x);
1406+ Cerr << " aaaa EvVDiskStateResponse 2" << Endl;
1407+ break ;
1408+ }
1409+ case TEvWhiteboard::EvPDiskStateResponse: {
1410+ auto *x = reinterpret_cast <TEvWhiteboard::TEvPDiskStateResponse::TPtr*>(&ev);
1411+ Cerr << " aaaa EvPDiskStateResponse 1" << Endl;
1412+ ChangePDiskStateResponse (x);
1413+ Cerr << " aaaa EvPDiskStateResponse 2" << Endl;
1414+ break ;
1415+ }
1416+ }
1417+
1418+ return TTestActorRuntime::EEventAction::PROCESS;
1419+ };
1420+ runtime.SetObserverFunc (observerFunc);
1421+
1422+ runtime.Send (new IEventHandle (NKikimr::NViewer::MakeViewerID (0 ), sender, request.Release (), 0 ));
1423+ NMon::TEvHttpInfoRes* result = runtime.GrabEdgeEvent <NMon::TEvHttpInfoRes>(handle);
1424+
1425+ size_t pos = result->Answer .find (' {' );
1426+ TString jsonResult = result->Answer .substr (pos);
1427+ Cerr << " json result: " << jsonResult << Endl;
1428+ NJson::TJsonValue json;
1429+ try {
1430+ NJson::ReadJsonTree (jsonResult, &json, true );
1431+ }
1432+ catch (yexception ex) {
1433+ Ctest << ex.what () << Endl;
1434+ }
1435+ // UNIT_ASSERT_VALUES_EQUAL(json.GetMap().contains("StorageGroups"), isExpectingGroup);
1436+ }
1437+
1438+ Y_UNIT_TEST (JsonStorage9NodesListingV1NodeIdFilter) {
1439+ JsonStorage9NodesListingTest ();
1440+ }
13201441}
0 commit comments