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.module.guice;
8   
9   import org.mule.api.transformer.Transformer;
10  import org.mule.api.transport.Connector;
11  import org.mule.tck.junit4.AbstractMuleContextTestCase;
12  import org.mule.tck.testmodels.fruit.RedApple;
13  import org.mule.tck.testmodels.mule.TestConnector;
14  import org.mule.transformer.types.DataTypeFactory;
15  
16  import com.google.inject.AbstractModule;
17  import com.google.inject.Provides;
18  import com.google.inject.Singleton;
19  import com.google.inject.name.Named;
20  import com.google.inject.name.Names;
21  
22  import org.junit.Test;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertFalse;
26  import static org.junit.Assert.assertNotNull;
27  import static org.junit.Assert.assertTrue;
28  
29  public class MuleObjectCreationTestCase extends AbstractMuleContextTestCase
30  {
31      @Override
32      protected void doSetUp() throws Exception
33      {
34          GuiceConfigurationBuilder cb = new GuiceConfigurationBuilder(new MuleObjectsModule());
35          cb.configure(muleContext);
36      }
37  
38      @Test
39      public void testObjectCreation() throws Exception
40      {
41          TestConnector c = (TestConnector) muleContext.getRegistry().lookupConnector("testConnector");
42          assertNotNull(c);
43          assertEquals("testConnector", c.getName());
44          assertEquals("foo", c.getSomeProperty());
45  
46          c = (TestConnector) muleContext.getRegistry().lookupConnector("testConnector2");
47          assertNotNull(c);
48          assertEquals("testConnector2", c.getName());
49          assertEquals("boundProperty", c.getSomeProperty());
50  
51          OrangetoAppleTransformer t = (OrangetoAppleTransformer)muleContext.getRegistry().lookupTransformer("testTransformer");
52          assertNotNull(t);
53          assertEquals(DataTypeFactory.create(RedApple.class), t.getReturnDataType());
54  
55          assertEquals(2, muleContext.getRegistry().lookupObjects(Connector.class).size());
56      }
57  
58      @Test
59      public void testObjectLifecycle() throws Exception
60      {
61          TestConnector c = (TestConnector) muleContext.getRegistry().lookupConnector("testConnector");
62          assertNotNull(c);
63          assertTrue(c.isInitialised());
64  
65          TestConnector c2 = (TestConnector) muleContext.getRegistry().lookupConnector("testConnector2");
66          assertNotNull(c2);
67          //AbstractMuleTestCase does not start the muleContext, just initialises it
68          assertTrue(c2.isInitialised());
69  
70          assertFalse(c.isStarted());
71          assertFalse(c2.isStarted());
72  
73          muleContext.start();
74  
75          assertTrue(c.isStarted());
76          assertTrue(c2.isStarted());
77  
78          muleContext.stop();
79  
80          assertTrue(c.isStopped());
81          assertTrue(c2.isStopped());
82  
83          muleContext.dispose();
84  
85          assertTrue(c.isDisposed());
86          assertTrue(c2.isDisposed());
87      }
88  
89      public class MuleObjectsModule extends AbstractModule
90      {
91          @Override
92          protected void configure()
93          {
94              //lets test injection of properties into providers
95              bindConstant().annotatedWith(Names.named("connectorProperty")).to("boundProperty");
96          }
97  
98  
99          //TODO Annotated Service
100 //        @Provides @AnnotatedService
101 //        TestAnnotatedService createSerivce()
102 //        {
103 //            OrangetoAppleTransformer transformer = new OrangetoAppleTransformer();
104 //            transformer.setReturnDataType(new DataTypeFactory().create(RedApple.class));
105 //            return transformer;
106 //        }
107 
108         @Provides
109         @Named("testTransformer")
110         Transformer createNamedTransformer()
111         {
112             OrangetoAppleTransformer transformer = new OrangetoAppleTransformer();
113             transformer.setReturnDataType(DataTypeFactory.create(RedApple.class));
114             transformer.setMuleContext(muleContext);
115             return transformer;
116         }
117 
118         @Provides
119         @Named("testConnector")
120         @Singleton
121         Connector createNamedConnector()
122         {
123             TestConnector connector = new TestConnector(muleContext);
124             connector.setSomeProperty("foo");
125             return connector;
126         }
127 
128         @Provides
129         @Named("testConnector2")
130         @Singleton
131         Connector createNamedConnector2(@Named("connectorProperty") String property)
132         {
133             TestConnector connector = new TestConnector(muleContext);
134             connector.setSomeProperty(property);
135             return connector;
136         }
137     }
138 }