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