@Test
  public void testCreateQueueEndpoint() throws Exception {
    JmsEndpointComponent component = new JmsEndpointComponent();

    reset(applicationContext);
    expect(applicationContext.containsBean("connectionFactory")).andReturn(true).once();
    expect(applicationContext.getBean("connectionFactory", ConnectionFactory.class))
        .andReturn(connectionFactory)
        .once();
    replay(applicationContext);

    Endpoint endpoint = component.createEndpoint("jms:queuename", context);

    Assert.assertEquals(endpoint.getClass(), JmsEndpoint.class);

    Assert.assertEquals(
        ((JmsEndpoint) endpoint).getEndpointConfiguration().getDestinationName(), "queuename");
    Assert.assertEquals(
        ((JmsEndpoint) endpoint).getEndpointConfiguration().isPubSubDomain(), false);
    Assert.assertEquals(
        ((JmsEndpoint) endpoint).getEndpointConfiguration().getConnectionFactory(),
        connectionFactory);
    Assert.assertNull(((JmsEndpoint) endpoint).getEndpointConfiguration().getDestination());
    Assert.assertEquals(((JmsEndpoint) endpoint).getEndpointConfiguration().getTimeout(), 5000L);

    verify(applicationContext);
  }
  @Test
  public void testInvalidEndpointUri() throws Exception {
    JmsEndpointComponent component = new JmsEndpointComponent();

    reset(applicationContext);
    replay(applicationContext);

    try {
      component.createEndpoint("jms:queuename?param1=&param2=value2", context);
      Assert.fail("Missing exception due to invalid endpoint uri");
    } catch (CitrusRuntimeException e) {
      Assert.assertTrue(e.getMessage().startsWith("Invalid parameter"));
      verify(applicationContext);
    }
  }
  @Test
  public void testCreateSyncEndpointWithParameters() throws Exception {
    JmsEndpointComponent component = new JmsEndpointComponent();

    reset(applicationContext);
    expect(applicationContext.containsBean("connectionFactory")).andReturn(false).once();
    expect(applicationContext.containsBean("specialConnectionFactory")).andReturn(true).once();
    expect(applicationContext.getBean("specialConnectionFactory"))
        .andReturn(connectionFactory)
        .once();
    expect(applicationContext.containsBean("myReplyDestination")).andReturn(true).once();
    expect(applicationContext.getBean("myReplyDestination")).andReturn(replyDestination).once();
    replay(applicationContext);

    Endpoint endpoint =
        component.createEndpoint(
            "jms:sync:queuename?connectionFactory=specialConnectionFactory&pollingInterval=100&replyDestination=myReplyDestination",
            context);

    Assert.assertEquals(endpoint.getClass(), JmsSyncEndpoint.class);

    Assert.assertEquals(
        ((JmsSyncEndpoint) endpoint).getEndpointConfiguration().getDestinationName(), "queuename");
    Assert.assertEquals(
        ((JmsSyncEndpoint) endpoint).getEndpointConfiguration().isPubSubDomain(), false);
    Assert.assertEquals(
        ((JmsSyncEndpoint) endpoint).getEndpointConfiguration().getConnectionFactory(),
        connectionFactory);
    Assert.assertNull(((JmsSyncEndpoint) endpoint).getEndpointConfiguration().getDestination());
    Assert.assertEquals(
        ((JmsSyncEndpoint) endpoint).getEndpointConfiguration().getReplyDestination(),
        replyDestination);
    Assert.assertEquals(
        ((JmsSyncEndpoint) endpoint).getEndpointConfiguration().getPollingInterval(), 100L);

    verify(applicationContext);
  }