public void testExecuteCancelStalledConnect() throws Exception {
    final StubProgressMonitor monitor = new StubProgressMonitor();
    HttpClient client = new HttpClient();
    WebLocation location = new WebLocation(TestUrl.DEFAULT.getConnectionTimeout().toString());
    HostConfiguration hostConfiguration =
        WebUtil.createHostConfiguration(client, location, monitor);

    GetMethod method = new GetMethod(location.getUrl());
    try {
      Runnable runner =
          new Runnable() {
            public void run() {
              try {
                Thread.sleep(500);
              } catch (InterruptedException e) {
              }
              monitor.canceled = true;
            }
          };
      new Thread(runner).start();
      WebUtil.execute(client, hostConfiguration, method, monitor);
      client.executeMethod(method);
      fail("Expected OperationCanceledException");
    } catch (OperationCanceledException expected) {
      assertTrue(monitor.isCanceled());
    } catch (ConnectException ignored) {
      System.err.println("Skipping testExecuteCancelStalledConnect() due to blocking firewall");
    } finally {
      WebUtil.releaseConnection(method, monitor);
    }
  }
  public void testExecute() throws Exception {
    StubProgressMonitor monitor = new StubProgressMonitor();
    HttpClient client = new HttpClient();
    WebLocation location = new WebLocation(TestUrl.DEFAULT.getHttpOk().toString());
    HostConfiguration hostConfiguration =
        WebUtil.createHostConfiguration(client, location, monitor);

    GetMethod method = new GetMethod(location.getUrl());
    try {
      int result = WebUtil.execute(client, hostConfiguration, method, monitor);
      assertEquals(HttpStatus.SC_OK, result);
    } finally {
      WebUtil.releaseConnection(method, monitor);
    }
  }
  public void testExecuteAlreadyCancelled() throws Exception {
    StubProgressMonitor monitor = new StubProgressMonitor();
    HttpClient client = new HttpClient();
    WebLocation location = new WebLocation(TestUrl.DEFAULT.getHttpOk().toString());
    HostConfiguration hostConfiguration =
        WebUtil.createHostConfiguration(client, location, monitor);

    GetMethod method = new GetMethod(location.getUrl());
    try {
      monitor.canceled = true;
      WebUtil.execute(client, hostConfiguration, method, monitor);
      fail("Expected InterruptedIOException");
    } catch (OperationCanceledException expected) {
    } finally {
      WebUtil.releaseConnection(method, monitor);
    }
  }