/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.service; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.core.Is.is; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mule.runtime.api.service.Service; import org.mule.runtime.api.lifecycle.Startable; import org.mule.runtime.api.lifecycle.Stoppable; import org.mule.tck.junit4.AbstractMuleTestCase; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.mockito.InOrder; public class MuleServiceManagerTestCase extends AbstractMuleTestCase { @Test public void registerServices() throws Exception { final ServiceDiscoverer serviceDiscoverer = mock(ServiceDiscoverer.class); final List<Service> services = new ArrayList<>(); Service service1 = mock(Service.class); Service service2 = mock(Service.class); services.add(service1); services.add(service2); when(serviceDiscoverer.discoverServices()).thenReturn(services); final MuleServiceManager muleServiceManager = new MuleServiceManager(serviceDiscoverer); muleServiceManager.start(); assertThat(muleServiceManager.getServices().size(), equalTo(2)); assertThat(muleServiceManager.getServices().get(0), equalTo(service1)); assertThat(muleServiceManager.getServices().get(1), equalTo(service2)); } @Test public void startServices() throws Exception { final ServiceDiscoverer serviceDiscoverer = mock(ServiceDiscoverer.class); final List<Service> services = new ArrayList<>(); StartableService service1 = mock(StartableService.class); StartableService service2 = mock(StartableService.class); services.add(service1); services.add(service2); when(serviceDiscoverer.discoverServices()).thenReturn(services); final MuleServiceManager muleServiceManager = new MuleServiceManager(serviceDiscoverer); muleServiceManager.start(); InOrder inOrder = inOrder(service1, service2); inOrder.verify(service1).start(); inOrder.verify(service2).start(); } @Test public void stopsServices() throws Exception { final ServiceDiscoverer serviceDiscoverer = mock(ServiceDiscoverer.class); final List<Service> services = new ArrayList<>(); StoppableService service1 = mock(StoppableService.class); StoppableService service2 = mock(StoppableService.class); services.add(service1); services.add(service2); when(serviceDiscoverer.discoverServices()).thenReturn(services); final MuleServiceManager muleServiceManager = new MuleServiceManager(serviceDiscoverer); muleServiceManager.start(); muleServiceManager.stop(); InOrder inOrder = inOrder(service1, service2); inOrder.verify(service2).stop(); inOrder.verify(service1).stop(); } @Test public void ignoresServiceStopError() throws Exception { final ServiceDiscoverer serviceDiscoverer = mock(ServiceDiscoverer.class); final List<Service> services = new ArrayList<>(); StoppableService service1 = mock(StoppableService.class); doThrow(new RuntimeException()).when(service1).stop(); StoppableService service2 = mock(StoppableService.class); doThrow(new RuntimeException()).when(service2).stop(); services.add(service1); services.add(service2); when(serviceDiscoverer.discoverServices()).thenReturn(services); final MuleServiceManager muleServiceManager = new MuleServiceManager(serviceDiscoverer); muleServiceManager.start(); muleServiceManager.stop(); InOrder inOrder = inOrder(service1, service2); inOrder.verify(service2).stop(); inOrder.verify(service1).stop(); } @Test public void wrapsServices() throws Exception { final ServiceDiscoverer serviceDiscoverer = mock(ServiceDiscoverer.class); final List<Service> services = new ArrayList<>(); StoppableService service1 = mock(StoppableService.class); services.add(service1); when(serviceDiscoverer.discoverServices()).thenReturn(services); final MuleServiceManager muleServiceManager = new MuleServiceManager(serviceDiscoverer); muleServiceManager.start(); assertThat(Proxy.isProxyClass(muleServiceManager.getServices().get(0).getClass()), is(true)); } public interface StartableService extends Service, Startable { } public interface StoppableService extends Service, Stoppable { } }