/* * 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.core.registry; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import org.mule.runtime.api.exception.MuleException; import org.mule.runtime.api.lifecycle.InitialisationException; import org.mule.runtime.api.lifecycle.Lifecycle; import org.mule.runtime.core.util.concurrent.Latch; import org.mule.tck.junit4.AbstractMuleContextTestCase; import org.junit.Test; public class RegisteredObjectLifecycleTestCase extends AbstractMuleContextTestCase { private static final long TIMEOUT = 200; protected Latch initLatch; protected Latch startLatch; protected Latch stopLatch; protected Latch disposeLatch; private DummyBean bean = new DummyBean(); @Override protected void doSetUp() throws Exception { bean = new DummyBean(); initLatch = new Latch(); startLatch = new Latch(); stopLatch = new Latch(); disposeLatch = new Latch(); } @Test public void testLifecycleForMuleContext() throws Exception { muleContext.getRegistry().registerObject("dummy", bean); assertTrue(initLatch.await(TIMEOUT, MILLISECONDS)); Thread.sleep(TIMEOUT); assertThat(startLatch.getCount(), is(1L)); assertThat(stopLatch.getCount(), is(1L)); assertThat(disposeLatch.getCount(), is(1L)); muleContext.start(); assertTrue(startLatch.await(TIMEOUT, MILLISECONDS)); Thread.sleep(TIMEOUT); assertThat(stopLatch.getCount(), is(1L)); assertThat(disposeLatch.getCount(), is(1L)); muleContext.stop(); assertTrue(stopLatch.await(TIMEOUT, MILLISECONDS)); Thread.sleep(TIMEOUT); assertThat(disposeLatch.getCount(), is(1L)); muleContext.dispose(); assertTrue(disposeLatch.await(TIMEOUT, MILLISECONDS)); } @Test public void testLifecycleForUnregisteredObject() throws Exception { muleContext.getRegistry().registerObject("dummy", bean); assertTrue(initLatch.await(TIMEOUT, MILLISECONDS)); Thread.sleep(TIMEOUT); assertThat(startLatch.getCount(), is(1L)); assertThat(stopLatch.getCount(), is(1L)); assertThat(disposeLatch.getCount(), is(1L)); muleContext.start(); assertTrue(startLatch.await(TIMEOUT, MILLISECONDS)); Thread.sleep(TIMEOUT); assertThat(stopLatch.getCount(), is(1L)); assertThat(disposeLatch.getCount(), is(1L)); muleContext.getRegistry().unregisterObject("dummy"); assertTrue(stopLatch.await(TIMEOUT, MILLISECONDS)); assertTrue(disposeLatch.await(TIMEOUT, MILLISECONDS)); } public class DummyBean implements Lifecycle { public String echo(String echo) { return echo; } @Override public void initialise() throws InitialisationException { initLatch.countDown(); } @Override public void start() throws MuleException { startLatch.countDown(); } @Override public void stop() throws MuleException { stopLatch.countDown(); } @Override public void dispose() { disposeLatch.countDown(); } public boolean isInitialised() { return false; } public boolean isStarted() { return false; } public boolean isStopped() { return false; } public boolean isDisposed() { return false; } } }