void getHeadAndVerify(String blobId, ByteRange range, GetOption getOption, HttpHeaders expectedHeaders,
      boolean isPrivate, String accountName, String containerName)
      throws ExecutionException, InterruptedException, RestServiceException {
    HttpHeaders headers = new DefaultHttpHeaders();
    if (range != null) {
      headers.add(RestUtils.Headers.RANGE, RestTestUtils.getRangeHeaderString(range));
    }
    if (getOption != null) {
      headers.add(RestUtils.Headers.GET_OPTION, getOption.toString());
    }
    FullHttpRequest httpRequest = buildRequest(HttpMethod.HEAD, blobId, headers, null);
    NettyClient.ResponseParts responseParts = nettyClient.sendRequest(httpRequest, null, null).get();
    HttpResponse response = getHttpResponse(responseParts);
    verifyGetHeadResponse(response, expectedHeaders, range, isPrivate, accountName, containerName, responseParts);
  }
Gets the headers of the blob with blob ID {@code blobId} and verifies them against what is expected.
@param blobId the blob ID of the blob to HEAD.
@param range the {@link ByteRange} for the request.
@param getOption the options to use while getting the blob.
@param expectedHeaders the expected headers in the response.
@param isPrivate {@code true} if the blob is expected to be private
@param accountName the expected account name in the response.
@param containerName the expected container name in the response.
@throws ExecutionException
@throws InterruptedException
ambry-frontend/src/integration-test/java/com/github/ambry/frontend/FrontendIntegrationTestBase.java