@Test
 public void testCreateConnectionWithoutUriThrowsJMSISE() throws Exception {
   JmsConnectionFactory cf = new JmsConnectionFactory();
   try {
     cf.createConnection();
     fail("Should have thrown exception");
   } catch (IllegalStateException jmsise) {
     // expected
   }
 }
  @Test(timeout = 5000)
  public void testCreateConnectionWithPortOutOfRange() throws Exception {
    JmsConnectionFactory factory = new JmsConnectionFactory("amqp://127.0.0.1:567564562");

    try {
      factory.createConnection();
      fail("Should have thrown exception");
    } catch (JMSException jmse) {
      LOG.debug("Caught Ex -> ", jmse);
    }

    factory = new JmsConnectionFactory("amqp://127.0.0.1:5675645622");

    try {
      factory.createConnection();
      fail("Should have thrown exception");
    } catch (JMSException jmse) {
      LOG.debug("Caught Ex -> ", jmse);
    }
  }
  @Test
  public void testCreateConnectionBadProviderString() throws Exception {
    JmsConnectionFactory factory = new JmsConnectionFactory("bad://127.0.0.1:5763");

    try {
      factory.createConnection();
      fail("Should have thrown exception");
    } catch (JMSException jmse) {
      // expected
    }
  }
  @Test
  public void testConnectionGetConfiguredURIApplied() throws Exception {
    URI mock = new URI("mock://localhost");

    JmsConnectionFactory factory = new JmsConnectionFactory(mock);

    JmsConnection connection = (JmsConnection) factory.createConnection();
    assertEquals(mock, connection.getConfiguredURI());
    connection.start();
    assertEquals(mock, connection.getConnectedURI());
  }
  @Test
  public void testGlobalExceptionListenerIsAppliedToCreatedConnection() throws Exception {
    JmsConnectionFactory factory = new JmsConnectionFactory(new URI("mock://127.0.0.1:5763"));

    ExceptionListener listener =
        new ExceptionListener() {

          @Override
          public void onException(JMSException exception) {}
        };

    factory.setExceptionListener(listener);
    Connection connection = factory.createConnection();
    assertNotNull(connection);
    assertNotNull(connection.getExceptionListener());
    assertSame(listener, connection.getExceptionListener());
  }
  @Test
  public void testConnectionFactoryOptionsAreAppliedToConnection() throws JMSException {
    JmsConnectionFactory factory = new JmsConnectionFactory(USER, PASSWORD, "mock://localhost");

    factory.setTopicPrefix(TOPIC_PREFIX_PROP);
    factory.setQueuePrefix(QUEUE_PREFIX_PROP);
    factory.setClientID(CLIENT_ID_PROP);

    factory.setForceSyncSend(!factory.isForceSyncSend());
    factory.setForceAsyncSend(!factory.isForceAsyncSend());
    factory.setLocalMessagePriority(!factory.isLocalMessagePriority());
    factory.setForceAsyncAcks(!factory.isForceAsyncAcks());
    factory.setConnectTimeout(TimeUnit.SECONDS.toMillis(30));
    factory.setCloseTimeout(TimeUnit.SECONDS.toMillis(45));

    factory.getPrefetchPolicy().setAll(1);

    JmsConnection connection = (JmsConnection) factory.createConnection();
    assertNotNull(connection);

    assertEquals(USER, connection.getUsername());
    assertEquals(PASSWORD, connection.getPassword());
    assertEquals(CLIENT_ID_PROP, connection.getClientID());
    assertEquals(TOPIC_PREFIX_PROP, connection.getTopicPrefix());
    assertEquals(QUEUE_PREFIX_PROP, connection.getQueuePrefix());

    assertEquals(factory.isForceSyncSend(), connection.isForceSyncSend());
    assertEquals(factory.isForceAsyncSend(), connection.isForceAsyncSend());
    assertEquals(factory.isLocalMessagePriority(), connection.isLocalMessagePriority());
    assertEquals(factory.isForceAsyncAcks(), connection.isForceAsyncAcks());

    assertEquals(TimeUnit.SECONDS.toMillis(30), connection.getConnectTimeout());
    assertEquals(TimeUnit.SECONDS.toMillis(45), connection.getCloseTimeout());

    assertEquals(1, connection.getPrefetchPolicy().getTopicPrefetch());
    assertEquals(1, connection.getPrefetchPolicy().getQueuePrefetch());
    assertEquals(1, connection.getPrefetchPolicy().getQueueBrowserPrefetch());
    assertEquals(1, connection.getPrefetchPolicy().getDurableTopicPrefetch());
  }