@Override
  public Future<RestResponse> restRequest(RestRequest request)
  {
    return restRequest(request, new RequestContext());
  }
@Test
  public void testHeaderIsNotOverriddenForHEADRequests() throws Exception {
    ConcreteClient concreteClient = new ConcreteClient();

    // Assert that proper content-length is set with non HEADER requests
    RestRequest restRequest = new RestRequestBuilder(new URI(URI)).setMethod(GET_HTTP_METHOD).build();
    FutureCallback<RestResponse> restResponseCallback = new FutureCallback<>();
    concreteClient.restRequest(restRequest, new RequestContext(), restResponseCallback);
    RestResponse response = restResponseCallback.get(10, TimeUnit.SECONDS);
    Assert.assertNotNull(response);
    Assert.assertTrue(response.getHeaders().containsKey(CONTENT_LENGTH));
    Assert.assertEquals(Integer.parseInt(response.getHeader(CONTENT_LENGTH)), RESPONSE_DATA.length());

    // Assert that existing content-length is not overridden for HEADER requests
    restRequest = new RestRequestBuilder(new URI(URI)).setMethod(HEAD_HTTP_METHOD).build();
    restResponseCallback = new FutureCallback<>();
    concreteClient.restRequest(restRequest, new RequestContext(), restResponseCallback);
    response = restResponseCallback.get(10, TimeUnit.SECONDS);
    Assert.assertNotNull(response);
    Assert.assertFalse(response.getHeaders().containsKey(CONTENT_LENGTH));
  }