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