@Override
  public ListenableFuture<HttpResponse> sendAsync(HttpRequest httpRequest) {
    return sendAsync(httpRequest, null);
  }
@Test
  public void sendAsync_whenPostRequest_returnsExpectedHttpResponse()
      throws IOException, ExecutionException, InterruptedException {
    String responseBody = "{ \"test\": \"json\" }";
    mockWebServer.enqueue(
        new MockResponse()
            .setResponseCode(HttpStatus.OK.code())
            .setHeader(CONTENT_TYPE, MediaType.JSON_UTF_8.toString())
            .setBody(responseBody));
    mockWebServer.start();

    String requestUrl = mockWebServer.url("/test/post").toString();

    HttpResponse response =
        httpClient
            .sendAsync(
                post(requestUrl)
                    .setHeaders(
                        HttpHeaders.builder()
                            .addHeader(ACCEPT, MediaType.JSON_UTF_8.toString())
                            .build())
                    .build())
            .get();

    assertThat(response)
        .isEqualTo(
            HttpResponse.builder()
                .setStatus(HttpStatus.OK)
                .setHeaders(
                    HttpHeaders.builder()
                        .addHeader(CONTENT_TYPE, MediaType.JSON_UTF_8.toString())
                        // MockWebServer always adds this response header.
                        .addHeader(CONTENT_LENGTH, String.valueOf(responseBody.length()))
                        .build())
                .setBodyBytes(ByteString.copyFrom(responseBody, UTF_8))
                .setResponseUrl(HttpUrl.parse(requestUrl))
                .build());
  }