View Javadoc

1   /*
2    * $Id: RegistryTransformerLifecycleTestCase.java 23207 2011-10-18 01:28:50Z pablo.kraan $
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.transformers.simple;
12  
13  import org.mule.api.lifecycle.Disposable;
14  import org.mule.api.lifecycle.InitialisationException;
15  import org.mule.api.processor.MessageProcessor;
16  import org.mule.api.transformer.TransformerException;
17  import org.mule.construct.Flow;
18  import org.mule.tck.junit4.FunctionalTestCase;
19  import org.mule.transformer.AbstractTransformer;
20  
21  import java.util.ArrayList;
22  import java.util.Collections;
23  import java.util.List;
24  
25  import org.junit.Test;
26  
27  import static org.junit.Assert.assertEquals;
28  import static org.junit.Assert.assertNotNull;
29  
30  /**
31   * Highlights the issue: MULE-4599 where dispose cannot be called on a transformer
32   * since it is a prototype in Spring, so spring does not manage the object.
33   */
34  public class RegistryTransformerLifecycleTestCase extends FunctionalTestCase
35  {
36      @Override
37      protected String getConfigResources()
38      {
39          return "simple-transformer-config.xml";
40      }
41  
42      @Test
43      public void testLifecycleInSpring() throws Exception
44      {
45          TransformerLifecycleTracker transformer = (TransformerLifecycleTracker) muleContext.getRegistry()
46              .lookupTransformer("lifecycle");
47          assertNotNull(transformer);
48          muleContext.dispose();
49          assertNoLifecycle(transformer);
50      }
51  
52      @Test
53      public void testLifecycleInFlowInSpring() throws Exception
54      {
55          Flow flow = (Flow) muleContext.getRegistry().lookupFlowConstruct("flow");
56          TransformerLifecycleTracker transformer = (TransformerLifecycleTracker) flow.getMessageProcessors()
57              .get(0);
58          assertNotNull(transformer);
59  
60          muleContext.dispose();
61          assertLifecycle(transformer);
62      }
63  
64      @Test
65      public void testLifecycleInTransientRegistry() throws Exception
66      {
67          TransformerLifecycleTracker transformer = new TransformerLifecycleTracker();
68          transformer.setProperty("foo");
69          muleContext.getRegistry().registerTransformer(transformer);
70          muleContext.dispose();
71          // MULE-5829 Artifacts excluded from lifecycle in MuleContextLifecyclePhases
72          // gets lifecycle when an object is registered.
73          // assertNoLifecycle(transformer);
74      }
75  
76      @Test
77      public void testLifecycleInFlowTransientRegistry() throws Exception
78      {
79          Flow flow = new Flow("flow", muleContext);
80          TransformerLifecycleTracker transformer = new TransformerLifecycleTracker();
81          transformer.setProperty("foo");
82          flow.setMessageProcessors(Collections.<MessageProcessor>singletonList(transformer));
83          muleContext.getRegistry().registerFlowConstruct(flow);
84          muleContext.dispose();
85          assertLifecycle(transformer);
86      }
87  
88      private void assertLifecycle(TransformerLifecycleTracker transformer)
89      {
90          assertEquals("[setProperty, initialise, dispose]", transformer.getTracker().toString());
91      }
92  
93      private void assertNoLifecycle(TransformerLifecycleTracker transformer)
94      {
95          assertEquals("[setProperty]", transformer.getTracker().toString());
96      }
97  
98      public static class TransformerLifecycleTracker extends AbstractTransformer implements Disposable
99      {
100         private final List<String> tracker = new ArrayList<String>();
101 
102         private String property;
103 
104         @Override
105         protected Object doTransform(Object src, String encoding) throws TransformerException
106         {
107             tracker.add("doTransform");
108             return null;
109         }
110 
111         public String getProperty()
112         {
113             return property;
114         }
115 
116         public void setProperty(String property)
117         {
118             tracker.add("setProperty");
119         }
120 
121         public List<String> getTracker()
122         {
123             return tracker;
124         }
125 
126         @Override
127         public void initialise() throws InitialisationException
128         {
129             tracker.add("initialise");
130         }
131 
132         @Override
133         public void dispose()
134         {
135             tracker.add("dispose");
136         }
137     }
138 }