@Test
  public void testGetBlobFromNewAddedNode() throws Exception {
    // create 3 new nodes in mock clustermap and place new partitions on these nodes.
    List<MockDataNodeId> newNodes = mockClusterMap.createNewDataNodes(3, LOCAL_DC);
    // make all existing partitions READ_ONLY to force router to route PUT against new partitions
    mockClusterMap.getAllPartitionIds(null)
        .forEach(p -> ((MockPartitionId) p).setPartitionState(PartitionState.READ_ONLY));
    // create 3 new partitions on new nodes
    for (int i = 0; i < 3; ++i) {
      mockClusterMap.createNewPartition(newNodes);
    }
    // add new nodes to mock server layout
    mockServerLayout.addMockServers(newNodes, mockClusterMap);
    // put a composite blob which should go to new partitions on new nodes only
    doPut();
    // make sure get blob from new partitions on new nodes succeeds
    getAndAssertSuccess();
  }
Test the case new nodes/partitions are dynamically added and router should be able to route quests to new replicas
and add new nodes into router metrics (if they are not present previously)
ambry-router/src/test/java/com/github/ambry/router/GetBlobOperationTest.java