static void replicateBlobV2(ConnectedChannel channel, BlobId blobId, DataNodeId sourceDataNode,
      RequestOrResponseType operationType, long operationTime, short lifeVersion, long expirationTime,
      ServerErrorCode expectedErrorCode) throws IOException {
    ReplicateBlobRequest replicateBlobRequest =
        new ReplicateBlobRequest(1, "replicateBlobClient", blobId, sourceDataNode.getHostname(),
            sourceDataNode.getPort(), operationType, operationTime, lifeVersion, expirationTime);
    DataInputStream replicateBlobResponseStream = channel.sendAndReceive(replicateBlobRequest).getInputStream();
    ReplicateBlobResponse replicateBlobResponse = ReplicateBlobResponse.readFrom(replicateBlobResponseStream);
    releaseNettyBufUnderneathStream(replicateBlobResponseStream);
    Assert.assertEquals(expectedErrorCode, replicateBlobResponse.getError());
  }
replicate the blob and verify the return status
@param channel the {@link ConnectedChannel} to send the request and receive the response
@param blobId the blob id
@param sourceDataNode the source {@link DataNodeId} to replicate the blob from
@param expectedErrorCode the expected server error code
@throws IOException any IO exception
ambry-test-utils/src/main/java/com/github/ambry/server/ServerTestUtil.java