@Implementation
  protected HttpResponse execute(
      HttpHost httpHost, HttpRequest httpRequest, HttpContext httpContext)
      throws HttpException, IOException {
    if (FakeHttp.getFakeHttpLayer().isInterceptingHttpRequests()) {
      return FakeHttp.getFakeHttpLayer()
          .emulateRequest(httpHost, httpRequest, httpContext, realObject);
    } else {
      FakeHttp.getFakeHttpLayer()
          .addRequestInfo(new HttpRequestInfo(httpRequest, httpHost, httpContext, redirector));
      HttpResponse response = redirector.execute(httpHost, httpRequest, httpContext);

      if (FakeHttp.getFakeHttpLayer().isInterceptingResponseContent()) {
        interceptResponseContent(response);
      }

      FakeHttp.getFakeHttpLayer().addHttpResponse(response);
      return response;
    }
  }
@Test
  public void shouldSupportSocketTimeoutWithExceptions() throws Exception {
    FakeHttp.setDefaultHttpResponse(
        new TestHttpResponse() {
          @Override
          public HttpParams getParams() {
            HttpParams httpParams = super.getParams();
            HttpConnectionParams.setSoTimeout(httpParams, -1);
            return httpParams;
          }
        });

    DefaultHttpClient client = new DefaultHttpClient();
    try {
      client.execute(new HttpGet("http://www.nowhere.org"));
    } catch (ConnectTimeoutException x) {
      return;
    }

    fail("Exception should have been thrown");
  }