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.service;
8   
9   import org.mule.api.endpoint.InboundEndpoint;
10  import org.mule.api.model.Model;
11  import org.mule.api.registry.MuleRegistry;
12  import org.mule.api.service.Service;
13  import org.mule.api.source.CompositeMessageSource;
14  import org.mule.api.transport.Connector;
15  import org.mule.config.QueueProfile;
16  import org.mule.model.seda.SedaModel;
17  import org.mule.model.seda.SedaService;
18  import org.mule.tck.junit4.AbstractMuleContextTestCase;
19  import org.mule.tck.testmodels.mule.TestConnector;
20  import org.mule.transport.AbstractConnector;
21  
22  import org.junit.Test;
23  
24  import static org.junit.Assert.assertEquals;
25  
26  public class ServiceTestCase extends AbstractMuleContextTestCase
27  {
28      private Connector testConnector;
29      private Service service;
30  
31      @Override
32      protected void doSetUp() throws Exception
33      {
34          super.doSetUp();
35  
36          testConnector = new TestConnector(muleContext);
37          testConnector.setName("customTestConnector");
38          muleContext.getRegistry().registerConnector(testConnector);
39  
40          InboundEndpoint inboundEndpoint1 = muleContext.getEndpointFactory().getInboundEndpoint(
41              "test://test1?connector=customTestConnector");
42          InboundEndpoint inboundEndpoint2 = muleContext.getEndpointFactory().getInboundEndpoint(
43              "test://test2?connector=customTestConnector");
44  
45          service = new SedaService(muleContext);
46          service.setName("testService");
47          ((CompositeMessageSource) service.getMessageSource()).addSource(inboundEndpoint1);
48          ((CompositeMessageSource) service.getMessageSource()).addSource(inboundEndpoint2);
49          Model model = new SedaModel();
50          model.setMuleContext(muleContext);
51          model.initialise();
52          service.setModel(model);
53          ((SedaService) service).setQueueProfile(new QueueProfile());
54          muleContext.getRegistry().registerService(service);
55      }
56  
57      @Override
58      protected void doTearDown() throws Exception
59      {
60          muleContext.getRegistry().unregisterObject(service.getName(), MuleRegistry.LIFECYCLE_BYPASS_FLAG);
61      }
62  
63      @Test
64      public void testUnregisterListenersOnServiceDisposal() throws Exception
65      {
66          // Start muleContext, this starts connectors and services
67          muleContext.start();
68  
69          // Assert that connector has two receivers registered, one for each endpoint
70          assertEquals(2, ((AbstractConnector) testConnector).getReceivers().size());
71  
72          service.stop();
73          service.dispose();
74  
75          // Assert that connector has no receivers registered after service disposal
76          assertEquals(0, ((AbstractConnector) testConnector).getReceivers().size());
77      }
78  
79      @Test
80      public void testUnregisterListenersOnServiceStop() throws Exception
81      {
82  
83          // Start muleContext, this starts connectors and services
84          muleContext.start();
85  
86          // Assert that connector has two receivers registered, one for each endpoint
87          assertEquals(2, ((AbstractConnector) testConnector).getReceivers().size());
88  
89          service.stop();
90  
91          // Assert that connector has no receivers registered after service disposal
92          assertEquals(0, ((AbstractConnector) testConnector).getReceivers().size());
93      }
94  }