void verifyCRCInMetadata(PartitionId id, String replicaPath, DataNodeId datanode, Long crc)
      throws IOException, InterruptedException {
    String clientId = "replication-metadata-" + datanode.getHostname() + "[" + datanode.getDatacenterName() + "]";
    ReplicaMetadataRequestInfo rinfo = new ReplicaMetadataRequestInfo(id,
        new StoreFindToken(), datanode.getHostname(), replicaPath, ReplicaType.DISK_BACKED,
        replicationConfig.replicaMetadataRequestVersion);
    RequestOrResponse md_request = new ReplicaMetadataRequest(TestUtils.RANDOM.nextInt(), clientId,
        Collections.singletonList(rinfo), Long.MAX_VALUE, replicationConfig.replicaMetadataRequestVersion);
    ReplicaMetadataResponse response =
        (ReplicaMetadataResponse) sendRequestGetResponse(md_request, ServerErrorCode.NoError);
    assertTrue("response from replica must not be empty",
        ((ReplicaMetadataResponse) response).getReplicaMetadataResponseInfoList().size() > 0);
    // Compare CRC from in-mem store and metadata request
    for (ReplicaMetadataResponseInfo respinfo : response.getReplicaMetadataResponseInfoList()) {
      assertTrue("messages from replica must not be empty",respinfo.getMessageInfoList().size() > 0);
      for (MessageInfo minfo : respinfo.getMessageInfoList()) {
        assertEquals(String.format("Expected CRC = %s, Received CRC = %s", crc, minfo.getCrc()), crc, minfo.getCrc());
      }
    }
  }
Test that cross-colo metrics are updated correctly when {@link AmbryRequests} handles {@link GetRequest} and
{@link ReplicaMetadataRequest}
@throws Exception
ambry-server/src/test/java/com/github/ambry/server/AmbryServerRequestsTest.java