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