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