View Javadoc

1   /*
2    * $Id: EndpointURIEndpointBuilderTestCase.java 22551 2011-07-25 06:32:00Z mike.schilling $
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.junit4.AbstractMuleContextTestCase;
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  import org.junit.Test;
28  
29  import static org.junit.Assert.assertEquals;
30  import static org.junit.Assert.assertFalse;
31  import static org.junit.Assert.assertNotNull;
32  import static org.junit.Assert.assertTrue;
33  
34  public class EndpointURIEndpointBuilderTestCase extends AbstractMuleContextTestCase
35  {
36      @Test
37      public void testBuildInboundEndpoint() throws Exception
38      {
39          String uri = "test://address";
40          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
41          ImmutableEndpoint ep = endpointBuilder.buildInboundEndpoint();
42          assertTrue(ep instanceof InboundEndpoint);
43          assertFalse(ep instanceof OutboundEndpoint);
44          assertNotNull(ep.getTransformers());
45          // We no longer apply default transport transformers as part of endpoint processing
46          assertEquals(0, ep.getTransformers().size());
47          assertNotNull(ep.getResponseTransformers());
48          // We no longer apply default transport transformers as part of endpoint processing
49          assertEquals(0, ep.getResponseTransformers().size());
50          testDefaultCommonEndpointAttributes(ep);
51      }
52  
53      @Test
54      public void testBuildOutboundEndpoint() throws MuleException
55      {
56          String uri = "test://address";
57          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
58          ImmutableEndpoint ep = endpointBuilder.buildOutboundEndpoint();
59          assertFalse(ep instanceof InboundEndpoint);
60          assertTrue(ep instanceof OutboundEndpoint);
61          // We no longer apply default transport transformers as part of endpoint processing
62          assertEquals(0, ep.getTransformers().size());
63          assertNotNull(ep.getResponseTransformers());
64          // We no longer apply default transport transformers as part of endpoint processing
65          assertEquals(0, ep.getResponseTransformers().size());
66          testDefaultCommonEndpointAttributes(ep);
67      }
68  
69      // TODO DF: Test more than defaults with tests using builder to set non-default
70      // values
71  
72      protected void testDefaultCommonEndpointAttributes(ImmutableEndpoint ep)
73      {
74          assertEquals(ep.getEndpointURI().getUri().toString(), "test://address");
75          assertEquals(muleContext.getConfiguration().getDefaultResponseTimeout(), ep.getResponseTimeout());
76          assertTrue("ep.getRetryPolicyTemplate() = " + ep.getRetryPolicyTemplate().getClass(), ep.getRetryPolicyTemplate() instanceof NoRetryPolicyTemplate);
77          assertTrue(ep.getTransactionConfig() instanceof MuleTransactionConfig);
78          assertTrue(ep.getTransactionConfig() instanceof MuleTransactionConfig);
79          assertEquals(null, ep.getSecurityFilter());
80          assertTrue(ep.getConnector() instanceof TestConnector);
81          assertEquals(new ObjectNameHelper(muleContext).getEndpointName(ep.getEndpointURI()), ep.getName());
82          assertFalse(ep.isDeleteUnacceptedMessages());
83          assertEquals(muleContext.getConfiguration().getDefaultEncoding(), ep.getEncoding());
84          assertEquals(null, ep.getFilter());
85          assertEquals(ImmutableEndpoint.INITIAL_STATE_STARTED, ep.getInitialState());
86      }
87      
88      @Test
89      public void testHasSetEncodingMethod() throws Exception
90      {
91          String uri = "test://address";
92          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
93          assertNotNull(endpointBuilder.getClass().getMethod("setEncoding", new Class[]{String.class}));
94      }
95      
96      @Test
97      public void testEndpointBuilderFromEndpoint() throws Exception
98      {
99          String uri = "test://address";
100         ImmutableEndpoint endpoint = getTestInboundEndpoint("endpoint.test.address", uri);
101         SensingEndpointURIEndpointBuilder builder = new SensingEndpointURIEndpointBuilder(endpoint);
102         assertEquals(uri, builder.getEndpointBuilder().getEndpoint().getUri().toString());
103         assertEquals(endpoint.getConnector(), builder.getConnector());
104         assertEquals(endpoint.getProperties(), builder.getProperties());
105         assertEquals(endpoint.getTransactionConfig(), builder.getTransactionConfig());
106         assertEquals(endpoint.isDeleteUnacceptedMessages(), builder.getDeleteUnacceptedMessages(builder.getConnector()));
107         assertEquals(endpoint.getInitialState(), builder.getInitialState(builder.getConnector()));
108         assertEquals(endpoint.getResponseTimeout(), builder.getResponseTimeout(builder.getConnector()));
109         assertEquals(endpoint.getSecurityFilter(), builder.getSecurityFilter());
110         assertEquals(endpoint.getRetryPolicyTemplate(), builder.getRetryPolicyTemplate(builder.getConnector()));
111         assertEquals(MessageExchangePattern.ONE_WAY, builder.getExchangePattern());
112     }
113     
114     /**
115      * Assert that the builder state (message prococessors/transformers) doesn't change when endpont is built
116      * multiple times
117      * 
118      * @throws Exception
119      */
120     @Test
121     public void testEndpointBuilderTransformersState() throws Exception
122     {
123         muleContext.getRegistry().registerObject("tran1", new StringAppendTransformer("1"));
124         muleContext.getRegistry().registerObject("tran2", new StringAppendTransformer("2"));
125 
126         String uri = "test://address?transformers=tran1&responseTransformers=tran2";
127         EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(uri, muleContext);
128         endpointBuilder.setTransformers(java.util.Collections.<Transformer> singletonList(new StringAppendTransformer(
129             "3")));
130         endpointBuilder.setResponseTransformers(java.util.Collections.<Transformer> singletonList(new StringAppendTransformer(
131             "4")));
132 
133         InboundEndpoint endpoint = endpointBuilder.buildInboundEndpoint();
134 
135         assertEquals(3, endpoint.getMessageProcessors().size());
136         assertEquals(2, endpoint.getResponseMessageProcessors().size());
137 
138         endpoint = endpointBuilder.buildInboundEndpoint();
139 
140         assertEquals(3, endpoint.getMessageProcessors().size());
141         assertEquals(2, endpoint.getResponseMessageProcessors().size());
142     }
143     
144     private static class SensingEndpointURIEndpointBuilder extends EndpointURIEndpointBuilder
145     {
146         public SensingEndpointURIEndpointBuilder(ImmutableEndpoint endpoint)
147         {
148             super(endpoint);
149         }
150         
151         public MessageExchangePattern getExchangePattern()
152         {
153             return messageExchangePattern;
154         }
155     }
156 }