1
2
3
4
5
6
7 package org.mule.registry;
8
9 import org.mule.api.MuleContext;
10 import org.mule.api.context.MuleContextAware;
11 import org.mule.api.lifecycle.Disposable;
12 import org.mule.api.lifecycle.Initialisable;
13 import org.mule.api.lifecycle.Startable;
14 import org.mule.api.lifecycle.Stoppable;
15 import org.mule.api.registry.MuleRegistry;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import javax.annotation.PostConstruct;
21 import javax.annotation.PreDestroy;
22
23 import org.junit.Test;
24
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.fail;
27
28 public class TransientRegistryLifecycleTestCase extends TransientRegistryTestCase
29 {
30 @Test
31 public void testObjectLifecycleWithTransientRegistryDirectly() throws Exception
32 {
33 TransientRegistry reg = new TransientRegistry(muleContext);
34 reg.initialise();
35 reg.fireLifecycle(Startable.PHASE_NAME);
36
37 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
38 reg.registerObject("test", tracker);
39
40 reg.dispose();
41 assertEquals("[setMuleContext, initialise, start, stop, dispose]", tracker.getTracker().toString());
42 }
43
44 @Test
45 public void testObjectBypassLifecycleWithTransientRegistryDirectly() throws Exception
46 {
47 TransientRegistry reg = new TransientRegistry(muleContext);
48 reg.initialise();
49 reg.fireLifecycle(Startable.PHASE_NAME);
50
51 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
52 reg.registerObject("test", tracker, MuleRegistry.LIFECYCLE_BYPASS_FLAG);
53 reg.dispose();
54 assertEquals("[setMuleContext, stop, dispose]", tracker.getTracker().toString());
55 }
56
57 @Test
58 public void testObjectBypassInjectorsWithTransientRegistryDirectly() throws Exception
59 {
60 TransientRegistry reg = new TransientRegistry(muleContext);
61 reg.initialise();
62 reg.fireLifecycle(Startable.PHASE_NAME);
63
64 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
65 reg.registerObject("test", tracker, MuleRegistry.INJECT_PROCESSORS_BYPASS_FLAG);
66 reg.dispose();
67 assertEquals("[initialise, start, stop, dispose]", tracker.getTracker().toString());
68 }
69
70 @Test
71 public void testObjectBypassLifecycleAndInjectorsWithTransientRegistryDirectly() throws Exception
72 {
73 TransientRegistry reg = new TransientRegistry(muleContext);
74 reg.initialise();
75 reg.fireLifecycle(Startable.PHASE_NAME);
76
77 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
78 reg.registerObject("test", tracker, MuleRegistry.LIFECYCLE_BYPASS_FLAG + MuleRegistry.INJECT_PROCESSORS_BYPASS_FLAG);
79 reg.dispose();
80 assertEquals("[stop, dispose]", tracker.getTracker().toString());
81 }
82
83 @Test
84 public void testObjectLifecycleStatesWithTransientRegistryDirectly() throws Exception
85 {
86 TransientRegistry reg = new TransientRegistry(muleContext);
87 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
88 reg.registerObject("test", tracker);
89 assertEquals("[setMuleContext]", tracker.getTracker().toString());
90 reg.initialise();
91 assertEquals("[setMuleContext, initialise]", tracker.getTracker().toString());
92
93
94 reg.fireLifecycle(Startable.PHASE_NAME);
95 assertEquals("[setMuleContext, initialise, start]", tracker.getTracker().toString());
96
97 try
98 {
99 reg.fireLifecycle(Startable.PHASE_NAME);
100 fail("Registry is already started");
101 }
102 catch (Exception e)
103 {
104
105 }
106
107 reg.fireLifecycle(Stoppable.PHASE_NAME);
108 assertEquals("[setMuleContext, initialise, start, stop]", tracker.getTracker().toString());
109
110 try
111 {
112 reg.fireLifecycle(Stoppable.PHASE_NAME);
113 fail("Registry is already stopped");
114 }
115 catch (Exception e)
116 {
117
118 }
119
120 reg.dispose();
121 assertEquals("[setMuleContext, initialise, start, stop, dispose]", tracker.getTracker().toString());
122
123 try
124 {
125 reg.dispose();
126 fail("Registry is already disposed");
127 }
128 catch (Exception e)
129 {
130
131 }
132 }
133
134 @Test
135 public void testLifecycleState() throws Exception
136 {
137 TransientRegistry reg = new TransientRegistry(muleContext);
138 reg.fireLifecycle(Initialisable.PHASE_NAME);
139 reg.fireLifecycle(Startable.PHASE_NAME);
140
141 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
142 reg.registerObject("test", tracker);
143 assertEquals("[setMuleContext, initialise, start]", tracker.getTracker().toString());
144
145 reg.fireLifecycle(Disposable.PHASE_NAME);
146 assertEquals("[setMuleContext, initialise, start, stop, dispose]", tracker.getTracker().toString());
147 }
148
149 @Test
150 public void testLifecycleStateOutOfSequenceStartFirstWithTransientRegistryDirectly() throws Exception
151 {
152 TransientRegistry reg = new TransientRegistry(muleContext);
153 try
154 {
155
156 reg.fireLifecycle(Startable.PHASE_NAME);
157 fail("Cannot start without initialising first");
158 }
159 catch (IllegalStateException e)
160 {
161
162 }
163
164 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
165 reg.registerObject("test", tracker);
166
167 reg.fireLifecycle(Initialisable.PHASE_NAME);
168 reg.fireLifecycle(Startable.PHASE_NAME);
169
170
171 assertEquals("[setMuleContext, initialise, start]", tracker.getTracker().toString());
172
173 reg.fireLifecycle(Disposable.PHASE_NAME);
174
175 assertEquals("[setMuleContext, initialise, start, stop, dispose]", tracker.getTracker().toString());
176 }
177
178 @Test
179 public void testLifecycleStateOutOfSequenceStopFirstWithTransientRegistryDirectly() throws Exception
180 {
181 TransientRegistry reg = new TransientRegistry(muleContext);
182 try
183 {
184
185 reg.fireLifecycle(Stoppable.PHASE_NAME);
186 fail("Cannot stop without starting first");
187 }
188 catch (IllegalStateException e)
189 {
190
191 }
192
193 InterfaceBasedTracker tracker = new InterfaceBasedTracker();
194 reg.registerObject("test", tracker);
195
196 reg.fireLifecycle(Initialisable.PHASE_NAME);
197 reg.fireLifecycle(Startable.PHASE_NAME);
198 reg.fireLifecycle(Stoppable.PHASE_NAME);
199
200
201
202
203 assertEquals("[setMuleContext, initialise, start, stop]", tracker.getTracker().toString());
204
205 reg.fireLifecycle(Disposable.PHASE_NAME);
206 assertEquals("[setMuleContext, initialise, start, stop, dispose]", tracker.getTracker().toString());
207 }
208
209 public class InterfaceBasedTracker extends AbstractLifecycleTracker
210 {
211
212 }
213
214 public class JSR250ObjectLifecycleTracker implements MuleContextAware
215 {
216 private final List<String> tracker = new ArrayList<String>();
217
218 public List<String> getTracker() {
219 return tracker;
220 }
221
222 public void setMuleContext(MuleContext context)
223 {
224 tracker.add("setMuleContext");
225 }
226
227 @PostConstruct
228 public void init()
229 {
230 tracker.add("initialise");
231 }
232
233 @PreDestroy
234 public void dispose()
235 {
236 tracker.add("dispose");
237 }
238 }
239 }