public CompletionService<MultiHttpRequestResponse> executePost(List<Pair<String, String>> urlsAndRequestBodies,
      @Nullable Map<String, String> requestHeaders, int timeoutMs) {
    return execute(urlsAndRequestBodies, requestHeaders, timeoutMs, "POST", HttpPost::new);
  }
@Test
  public void testMultiPost() {
    List<Pair<String, String>> urlsAndRequestBodies =
        List.of(Pair.of("http://localhost:" + String.valueOf(_portStart) + URI_PATH, "b0"),
            Pair.of("http://localhost:" + String.valueOf(_portStart + 1) + URI_PATH, "b1"),
            Pair.of("http://localhost:" + String.valueOf(_portStart + 2) + URI_PATH, "b2"),
            // 2nd request to the same server
            Pair.of("http://localhost:" + String.valueOf(_portStart) + URI_PATH, "b3"),
            Pair.of("http://localhost:" + String.valueOf(_portStart + 3) + URI_PATH, "b4"));

    MultiHttpRequest mpost =
        new MultiHttpRequest(Executors.newCachedThreadPool(), new PoolingHttpClientConnectionManager());

    // timeout value needs to be less than 5000ms set above for
    // third server
    final int requestTimeoutMs = 1000;
    CompletionService<MultiHttpRequestResponse> completionService =
        mpost.executePost(urlsAndRequestBodies, null, requestTimeoutMs);

    TestResult result = collectResult(completionService, urlsAndRequestBodies.size());
    Assert.assertEquals(result.getSuccess(), 3);
    Assert.assertEquals(result.getErrors(), 1);
    Assert.assertEquals(result.getTimeouts(), 1);
  }