1
2
3
4
5
6
7 package org.mule.registry;
8
9 import org.mule.api.MuleException;
10 import org.mule.api.lifecycle.InitialisationException;
11 import org.mule.api.lifecycle.Lifecycle;
12 import org.mule.tck.junit4.AbstractMuleContextTestCase;
13 import org.mule.util.concurrent.Latch;
14
15 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
16 import org.junit.Test;
17
18 import static org.junit.Assert.assertFalse;
19 import static org.junit.Assert.assertTrue;
20
21 public class RegisteredObjectLifecycleTestCase extends AbstractMuleContextTestCase
22 {
23 private static final long TIMEOUT = 1000;
24
25 protected Latch initLatch;
26 protected Latch startLatch;
27 protected Latch stopLatch;
28 protected Latch disposeLatch;
29
30 private DummyBean bean = new DummyBean();
31
32 @Override
33 protected void doSetUp() throws Exception
34 {
35 bean = new DummyBean();
36 initLatch = new Latch();
37 startLatch = new Latch();
38 stopLatch = new Latch();
39 disposeLatch = new Latch();
40 }
41
42 @Test
43 public void testLifecycleForMuleContext() throws Exception
44 {
45 muleContext.getRegistry().registerObject("dummy", bean);
46 assertTrue(initLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
47 assertFalse(startLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
48 assertFalse(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
49 assertFalse(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
50
51 muleContext.start();
52 assertTrue(startLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
53 assertFalse(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
54 assertFalse(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
55
56 muleContext.stop();
57 assertTrue(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
58 assertFalse(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
59
60 muleContext.dispose();
61 assertTrue(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
62 }
63
64 @Test
65 public void testLifecycleForUnregisteredObject() throws Exception
66 {
67 muleContext.getRegistry().registerObject("dummy", bean);
68 assertTrue(initLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
69 assertFalse(startLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
70 assertFalse(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
71 assertFalse(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
72
73 muleContext.start();
74 assertTrue(startLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
75 assertFalse(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
76 assertFalse(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
77
78 muleContext.getRegistry().unregisterObject("dummy");
79 assertTrue(stopLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
80 assertTrue(disposeLatch.await(TIMEOUT, TimeUnit.MILLISECONDS));
81 }
82
83 public class DummyBean implements Lifecycle
84 {
85 public String echo(String echo)
86 {
87 return echo;
88 }
89
90 public void initialise() throws InitialisationException
91 {
92 initLatch.countDown();
93 }
94
95 public void start() throws MuleException
96 {
97 startLatch.countDown();
98 }
99
100 public void stop() throws MuleException
101 {
102 stopLatch.countDown();
103 }
104
105 public void dispose()
106 {
107 disposeLatch.countDown();
108 }
109
110 public boolean isInitialised()
111 {
112 return false;
113 }
114
115 public boolean isStarted()
116 {
117 return false;
118 }
119
120 public boolean isStopped()
121 {
122 return false;
123 }
124
125 public boolean isDisposed()
126 {
127 return false;
128 }
129 }
130 }