View Javadoc

1   /*
2    * $Id: EndpointURIEndpointBuilderTestCase.java 19370 2010-09-06 02:51:40Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.endpoint;
12  
13  import org.mule.MessageExchangePattern;
14  import org.mule.api.MuleException;
15  import org.mule.api.endpoint.EndpointBuilder;
16  import org.mule.api.endpoint.ImmutableEndpoint;
17  import org.mule.api.endpoint.InboundEndpoint;
18  import org.mule.api.endpoint.OutboundEndpoint;
19  import org.mule.api.transformer.Transformer;
20  import org.mule.retry.policies.NoRetryPolicyTemplate;
21  import org.mule.tck.AbstractMuleTestCase;
22  import org.mule.tck.testmodels.mule.TestConnector;
23  import org.mule.transaction.MuleTransactionConfig;
24  import org.mule.transformer.simple.StringAppendTransformer;
25  import org.mule.util.ObjectNameHelper;
26  
27  public class EndpointURIEndpointBuilderTestCase extends AbstractMuleTestCase
28  {
29      public void testBuildInboundEndpoint() throws Exception
30      {
31          String uri = "test://address";
32          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
33          ImmutableEndpoint ep = endpointBuilder.buildInboundEndpoint();
34          assertTrue(ep instanceof InboundEndpoint);
35          assertFalse(ep instanceof OutboundEndpoint);
36          assertNotNull(ep.getTransformers());
37          // We no longer apply default transport transformers as part of endpoint processing
38          assertEquals(0, ep.getTransformers().size());
39          assertNotNull(ep.getResponseTransformers());
40          // We no longer apply default transport transformers as part of endpoint processing
41          assertEquals(0, ep.getResponseTransformers().size());
42          testDefaultCommonEndpointAttributes(ep);
43      }
44  
45      public void testBuildOutboundEndpoint() throws MuleException
46      {
47          String uri = "test://address";
48          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
49          ImmutableEndpoint ep = endpointBuilder.buildOutboundEndpoint();
50          assertFalse(ep instanceof InboundEndpoint);
51          assertTrue(ep instanceof OutboundEndpoint);
52          // We no longer apply default transport transformers as part of endpoint processing
53          assertEquals(0, ep.getTransformers().size());
54          assertNotNull(ep.getResponseTransformers());
55          // We no longer apply default transport transformers as part of endpoint processing
56          assertEquals(0, ep.getResponseTransformers().size());
57          testDefaultCommonEndpointAttributes(ep);
58      }
59  
60      // TODO DF: Test more than defaults with tests using builder to set non-default
61      // values
62  
63      protected void testDefaultCommonEndpointAttributes(ImmutableEndpoint ep)
64      {
65          assertEquals(ep.getEndpointURI().getUri().toString(), "test://address");
66          assertEquals(muleContext.getConfiguration().getDefaultResponseTimeout(), ep.getResponseTimeout());
67          assertTrue("ep.getRetryPolicyTemplate() = " + ep.getRetryPolicyTemplate().getClass(), ep.getRetryPolicyTemplate() instanceof NoRetryPolicyTemplate);
68          assertTrue(ep.getTransactionConfig() instanceof MuleTransactionConfig);
69          assertTrue(ep.getTransactionConfig() instanceof MuleTransactionConfig);
70          assertEquals(null, ep.getSecurityFilter());
71          assertTrue(ep.getConnector() instanceof TestConnector);
72          assertEquals(new ObjectNameHelper(muleContext).getEndpointName(ep.getEndpointURI()), ep.getName());
73          assertFalse(ep.isDeleteUnacceptedMessages());
74          assertEquals(muleContext.getConfiguration().getDefaultEncoding(), ep.getEncoding());
75          assertEquals(null, ep.getFilter());
76          assertEquals(ImmutableEndpoint.INITIAL_STATE_STARTED, ep.getInitialState());
77      }
78      
79      public void testHasSetEncodingMethod() throws Exception
80      {
81          String uri = "test://address";
82          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
83          assertNotNull(endpointBuilder.getClass().getMethod("setEncoding", new Class[]{String.class}));
84      }
85      
86      public void testEndpointBuilderFromEndpoint() throws Exception
87      {
88          String uri = "test://address";
89          ImmutableEndpoint endpoint = getTestInboundEndpoint("endpoint.test.address", uri);
90          SensingEndpointURIEndpointBuilder builder = new SensingEndpointURIEndpointBuilder(endpoint);
91          assertEquals(uri, builder.getEndpointBuilder().getEndpoint().getUri().toString());
92          assertEquals(endpoint.getConnector(), builder.getConnector());
93          assertEquals(endpoint.getProperties(), builder.getProperties());
94          assertEquals(endpoint.getTransactionConfig(), builder.getTransactionConfig());
95          assertEquals(endpoint.isDeleteUnacceptedMessages(), builder.getDeleteUnacceptedMessages(builder.getConnector()));
96          assertEquals(endpoint.getInitialState(), builder.getInitialState(builder.getConnector()));
97          assertEquals(endpoint.getResponseTimeout(), builder.getResponseTimeout(builder.getConnector()));
98          assertEquals(endpoint.getSecurityFilter(), builder.getSecurityFilter());
99          assertEquals(endpoint.getRetryPolicyTemplate(), builder.getRetryPolicyTemplate(builder.getConnector()));
100         assertEquals(MessageExchangePattern.ONE_WAY, builder.getExchangePattern());
101     }
102     
103     /**
104      * Assert that the builder state (message prococessors/transformers) doesn't change when endpont is built
105      * multiple times
106      * 
107      * @throws Exception
108      */
109     public void testEndpointBuilderTransformersState() throws Exception
110     {
111         muleContext.getRegistry().registerObject("tran1", new StringAppendTransformer("1"));
112         muleContext.getRegistry().registerObject("tran2", new StringAppendTransformer("2"));
113 
114         String uri = "test://address?transformers=tran1&responseTransformers=tran2";
115         EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
116         endpointBuilder.setTransformers(java.util.Collections.<Transformer> singletonList(new StringAppendTransformer(
117             "3")));
118         endpointBuilder.setResponseTransformers(java.util.Collections.<Transformer> singletonList(new StringAppendTransformer(
119             "4")));
120 
121         InboundEndpoint endpoint = endpointBuilder.buildInboundEndpoint();
122 
123         assertEquals(2, endpoint.getMessageProcessors().size());
124         assertEquals(2, endpoint.getResponseMessageProcessors().size());
125 
126         endpoint = endpointBuilder.buildInboundEndpoint();
127 
128         assertEquals(2, endpoint.getMessageProcessors().size());
129         assertEquals(2, endpoint.getResponseMessageProcessors().size());
130     }
131     
132     private static class SensingEndpointURIEndpointBuilder extends EndpointURIEndpointBuilder
133     {
134         public SensingEndpointURIEndpointBuilder(ImmutableEndpoint endpoint)
135         {
136             super(endpoint);
137         }
138         
139         public MessageExchangePattern getExchangePattern()
140         {
141             return messageExchangePattern;
142         }
143     }
144 }