public String toString() {
   String postData = mConn.getPostData() == null ? "null" : new String(mConn.getPostData());
   return "url: "
       + mConn.getRequestUrl()
       + "\nheaders: "
       + mConn.getRequestHeaders()
       + "\npostData: "
       + postData;
 }
  @Test
  public void connection_should_be_refreshed_on_failure()
      throws JMSException, InterruptedException {
    // Initialization
    underTest.start();
    connection = Whitebox.getInternalState(underTest, "connection");
    Assertions.assertThat(connection).isNotNull();
    // Mock the created session
    ManagedSession session = Mockito.mock(ManagedSession.class);
    Whitebox.setInternalState(underTest, "sessions", Lists.newArrayList(session));

    // Failure
    Object jmsFactoryImpl = Whitebox.getInternalState(underTest, "jmsFactoryImpl");
    Whitebox.setInternalState(underTest, "jmsFactoryImpl", new FakeConnectionFactoryImpl());
    underTest.setExceptionListener(
        new javax.jms.ExceptionListener() {

          @Override
          public void onException(JMSException exception) {}
        });
    underTest.onException(new JMSException("Connection closed"));

    // Reset
    connection = Whitebox.getInternalState(underTest, "connection");
    Assertions.assertThat(connection).isNull();
    Mockito.verify(session, Mockito.times(1)).reset(); // session is reset on cascade

    // The connection is back
    Whitebox.setInternalState(underTest, "jmsFactoryImpl", jmsFactoryImpl);

    // wait for the timer to refresh the connection
    Thread.sleep(200);

    connection = Whitebox.getInternalState(underTest, "connection"); // connection is back
    Assertions.assertThat(connection).isNotNull();
    Mockito.verify(session, Mockito.times(1)).refresh(connection); // session is refreshed
  }
 @Test
 public void
     test_that_wraped_exceptionlistener_from_managedConnection_differs_from_jmsbroker_connection()
         throws InterruptedException, JMSException {
   Whitebox.setInternalState(underTest, "jmsFactoryImpl", new FakeConnectionFactoryImpl());
   javax.jms.ExceptionListener exceptionListener =
       new javax.jms.ExceptionListener() {
         @Override
         public void onException(JMSException e) {}
       };
   underTest.setExceptionListener(exceptionListener);
   Connection jmsConnection = Whitebox.getInternalState(underTest, "connection");
   javax.jms.ExceptionListener exceptionListenerAQ = jmsConnection.getExceptionListener();
   javax.jms.ExceptionListener exceptionListenerMC =
       Whitebox.getInternalState(underTest, "exceptionListener");
   Assertions.assertThat(exceptionListenerAQ).isNotEqualTo(exceptionListenerMC);
   Assertions.assertThat(exceptionListenerMC).isEqualTo(exceptionListener);
 }
 /**
  * Gets the URL that this HTTP response (or error) corresponds to.
  *
  * @return The URL that this HTTP response (or error) corresponds to.
  */
 /*package*/ String getUrl() {
   return mManagedConnection.getRequestUrl();
 }
    public void run() {
      try {
        HttpUriRequest request = mConn.getHttpRequest();
        InetAddress ia = InetAddress.getByName(request.getURI().getHost());
        LogUtils.logd("Requesting: " + mConn.getRequestUrl() + " (" + ia.getHostAddress() + ")");

        request.addHeader("User-Agent", USER_AGENT);
        for (NameValuePair header : mConn.getRequestHeaders()) {
          request.addHeader(header.getName(), header.getValue());
        }

        LogUtils.logd(
            "Headers: " + Arrays.asList(mConn.getHttpRequest().getAllHeaders()).toString());
        if (mConn.getHttpRequest() instanceof HttpPost) {
          String postBody = EntityUtils.toString(((HttpPost) mConn.getHttpRequest()).getEntity());
          LogUtils.logd("POST to " + mConn.getRequestUrl() + ": " + postBody);
        }

        HttpResponse response;
        try {
          response = mHttpClient.execute(request);
        } catch (IOException e) {
          // XXX Mediocre way to match exceptions from aborted requests:
          if (request.isAborted() && e.getMessage().contains("abort")) {
            throw new AbortedRequestException();
          } else {
            throw e;
          }
        }

        if (request.isAborted()) throw new AbortedRequestException();

        // Fetching the status code allows the response interceptor to have a chance to un-gzip the
        // entity before we fetch it.
        response.getStatusLine().getStatusCode();

        HttpResponseHeaders headers = HttpResponseHeaders.fromResponse(response, request);

        HttpEntity entity = response.getEntity();
        byte[] responseBody;
        if (entity == null) {
          responseBody = new byte[0];
        } else {
          responseBody = EntityUtils.toByteArray(entity);
          entity.consumeContent();

          final Header encoding = entity.getContentEncoding();
          if (encoding != null) {
            for (HeaderElement element : encoding.getElements()) {
              if (element.getName().equalsIgnoreCase(ENCODING_GZIP)) {
                GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(responseBody));
                responseBody = IoUtils.readAndClose(gis, true);
                break;
              }
            }
          }
        }

        AsyncHttpResponse ahr;
        String statusLine = response.getStatusLine().toString();
        String bodyStr = new String(responseBody);
        int bodySubStrLen = bodyStr.length() > 300 ? 300 : bodyStr.length();

        switch (response.getStatusLine().getStatusCode()) {
          case HttpStatus.SC_OK:
            // Normal success
          case HttpStatus.SC_NOT_MODIFIED:
            // From mobile_config_and_baseurl called with an Etag
          case HttpStatus.SC_MOVED_PERMANENTLY:
          case HttpStatus.SC_SEE_OTHER:
          case HttpStatus.SC_TEMPORARY_REDIRECT:
          case HttpStatus.SC_MOVED_TEMPORARILY:
            // for UPS-1390 - don't error on 302s from token URL
          case HttpStatus.SC_CREATED:
            // Response from the Engage trail creation and maybe URL shortening calls
            LogUtils.logd(statusLine + ": " + bodyStr.substring(0, bodySubStrLen));
            ahr = new AsyncHttpResponse(mConn, null, headers, responseBody);
            break;
          default:
            LogUtils.loge(statusLine + "\n" + bodyStr.substring(0, bodySubStrLen));
            ahr = new AsyncHttpResponse(mConn, new Exception(statusLine), headers, responseBody);
        }

        mConn.setResponse(ahr);
        invokeCallback(callBack);
      } catch (IOException e) {
        LogUtils.loge(this.toString());
        LogUtils.loge("IOException while executing HTTP request.", e);
        mConn.setResponse(new AsyncHttpResponse(mConn, e, null, null));
        invokeCallback(callBack);
      } catch (AbortedRequestException e) {
        LogUtils.loge("Aborted request: " + mConn.getRequestUrl());
        mConn.setResponse(new AsyncHttpResponse(mConn, null, null, null));
        invokeCallback(callBack);
      }
    }