1   /*
2    * $Id: MuleComponentTestCase.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.impl;
12  
13  import org.mule.config.builders.QuickConfigurationBuilder;
14  import org.mule.providers.AbstractConnector;
15  import org.mule.tck.AbstractMuleTestCase;
16  import org.mule.tck.testmodels.fruit.Orange;
17  import org.mule.umo.ComponentException;
18  import org.mule.umo.UMOComponent;
19  import org.mule.umo.UMODescriptor;
20  import org.mule.umo.UMOException;
21  import org.mule.umo.UMOSession;
22  import org.mule.umo.manager.UMOManager;
23  import org.mule.umo.model.UMOModel;
24  import org.mule.umo.provider.UMOMessageReceiver;
25  
26  import java.util.Iterator;
27  
28  public class MuleComponentTestCase extends AbstractMuleTestCase
29  {
30      public void testSendToPausedComponent() throws Exception
31      {
32          QuickConfigurationBuilder builder = new QuickConfigurationBuilder(true);
33          builder.registerComponent(Orange.class.getName(), "orangeComponent", "test://in", "test://out", null);
34          builder.createStartedManager(true, "");
35          UMOModel model = getDefaultModel();
36  
37          final UMOComponent comp = model.getComponent("orangeComponent");
38          assertTrue(comp.isStarted());
39          comp.pause();
40          new Thread(new Runnable()
41          {
42              public void run()
43              {
44                  try
45                  {
46                      Thread.sleep(2000);
47                  }
48                  catch (InterruptedException e)
49                  {
50                      Thread.currentThread().interrupt();
51                      throw new RuntimeException(e);
52                  }
53  
54                  try
55                  {
56                      comp.resume();
57                  }
58                  catch (UMOException e)
59                  {
60                      fail(e.getMessage());
61                  }
62              }
63          }).start();
64          long t0 = System.currentTimeMillis();
65          comp.sendEvent(getTestEvent("hello"));
66          long t1 = System.currentTimeMillis();
67          assertTrue(t1 - t0 > 1000);
68      }
69  
70      public void testSendToStoppedComponent() throws Exception
71      {
72          MuleDescriptor descriptor = getTestDescriptor("myComponent",
73              "org.mule.components.simple.EchoComponent");
74          UMOComponent comp = getTestComponent(descriptor);
75          // Component is stopped because it has not been registered.
76          assertTrue(!comp.isStarted());
77  
78          try
79          {
80              comp.dispatchEvent(getTestEvent("hello"));
81              fail();
82          }
83          catch (ComponentException e)
84          {
85              // expected
86          }
87  
88          try
89          {
90              comp.sendEvent(getTestEvent("hello"));
91              fail();
92          }
93          catch (ComponentException e)
94          {
95              // expected
96          }
97      }
98  
99      // MULE-494
100     public void testInitialStateStopped() throws Exception
101     {
102         QuickConfigurationBuilder builder = new QuickConfigurationBuilder(true);
103         // Test connector
104         builder.getManager().registerConnector(getTestConnector());
105         // Test component
106         UMODescriptor d = builder.createDescriptor(Orange.class.getName(), "orangeComponent",
107             builder.createEndpoint("test://in", null, true), null, null);
108         d.setInitialState(ImmutableMuleDescriptor.INITIAL_STATE_STOPPED);
109         builder.registerComponent(d);
110 
111         // Start model
112         UMOManager manager = builder.createStartedManager(true, "");
113 
114         UMOModel model = getDefaultModel();
115         UMOSession session = new MuleSession(model.getComponent("orangeComponent"));
116         final UMOComponent c = session.getComponent();
117         // Component initially stopped
118         assertFalse(c.isStarted());
119 
120         // The connector should be started, but with no listeners registered.
121         AbstractConnector connector = (AbstractConnector)manager.lookupConnector("testConnector");
122         assertTrue(connector.isStarted());
123         assertTrue(connector.getReceivers().isEmpty());
124 
125         // Start the component.
126         c.start();
127 
128         // The listeners should now be registered and started.
129         assertTrue(connector.isStarted());
130         assertFalse(connector.getReceivers().isEmpty());
131 
132         assertTrue(c.isStarted());
133         Iterator it = connector.getReceivers().values().iterator();
134         while (it.hasNext())
135         {
136             assertTrue(((UMOMessageReceiver)it.next()).isConnected());
137         }
138     }
139 
140     // MULE-503
141     public void testStoppingComponentStopsEndpoints() throws Exception
142     {
143         QuickConfigurationBuilder builder = new QuickConfigurationBuilder(true);
144         // Test connector
145         builder.getManager().registerConnector(getTestConnector());
146         // Test component
147         builder.registerComponent(Orange.class.getName(), "orangeComponent", "test://in", "test://out", null);
148 
149         // Start model
150         UMOManager manager = builder.createStartedManager(true, "");
151         UMOModel model = getDefaultModel();
152         UMOSession session = new MuleSession(model.getComponent("orangeComponent"));
153         final UMOComponent c = session.getComponent();
154         assertTrue(c.isStarted());
155 
156         // The listeners should be registered and started.
157         AbstractConnector connector = (AbstractConnector)manager.lookupConnector("testConnector");
158         assertTrue(connector.isStarted());
159         assertFalse(connector.getReceivers().isEmpty());
160 
161         Iterator it = connector.getReceivers().values().iterator();
162         while (it.hasNext())
163         {
164             assertTrue(((UMOMessageReceiver)it.next()).isConnected());
165         }
166 
167         // Stop component
168         c.stop();
169 
170         assertFalse(c.isStarted());
171         // Connector is still started, but no more receivers.
172         assertTrue(connector.isStarted());
173         assertTrue(connector.getReceivers().isEmpty());
174     }
175 }