1
2
3
4
5
6
7
8
9
10
11 package org.mule.interceptor;
12
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleException;
15 import org.mule.api.service.Service;
16 import org.mule.component.AbstractComponent;
17 import org.mule.management.stats.ProcessingTime;
18 import org.mule.model.seda.SedaService;
19 import org.mule.tck.junit4.AbstractMuleContextTestCase;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.junit.Test;
25
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.fail;
28
29 public class InterceptorTestCase extends AbstractMuleContextTestCase
30 {
31
32 private final String BEFORE = "Before";
33 private final String AFTER = "After";
34 private final String COMPONENT = "component";
35 private final String INTERCEPTOR_ONE = "inteceptor1";
36 private final String INTERCEPTOR_TWO = "inteceptor2";
37 private final String INTERCEPTOR_THREE = "inteceptor3";
38
39 private final String SINGLE_INTERCEPTOR_RESULT = INTERCEPTOR_ONE + BEFORE + COMPONENT + INTERCEPTOR_ONE
40 + AFTER;
41 private final String MULTIPLE_INTERCEPTOR_RESULT = INTERCEPTOR_ONE + BEFORE + INTERCEPTOR_TWO + BEFORE
42 + INTERCEPTOR_THREE + BEFORE + COMPONENT
43 + INTERCEPTOR_THREE + AFTER + INTERCEPTOR_TWO + AFTER
44 + INTERCEPTOR_ONE + AFTER;
45
46 @Test
47 public void testSingleInterceptor() throws Exception
48 {
49 Service service = createUninitializedService();
50 TestComponent component = (TestComponent) service.getComponent();
51
52 List interceptors = new ArrayList();
53 interceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
54 component.setInterceptors(interceptors);
55 service.initialise();
56 service.start();
57
58 MuleEvent result = component.process(getTestEvent(""));
59
60 assertEquals(SINGLE_INTERCEPTOR_RESULT, result.getMessageAsString());
61 }
62
63 @Test
64 public void testMultipleInterceptor() throws Exception
65 {
66 Service service = createUninitializedService();
67 TestComponent component = (TestComponent) service.getComponent();
68
69 List interceptors = new ArrayList();
70 interceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
71 interceptors.add(new TestInterceptor(INTERCEPTOR_TWO));
72 interceptors.add(new TestInterceptor(INTERCEPTOR_THREE));
73 component.setInterceptors(interceptors);
74 service.initialise();
75 service.start();
76
77 MuleEvent result = component.process(getTestEvent(""));
78
79 assertEquals(MULTIPLE_INTERCEPTOR_RESULT, result.getMessageAsString());
80 }
81
82 @Test
83 public void testSingleInterceptorStack() throws Exception
84 {
85 Service service = createUninitializedService();
86 TestComponent component = (TestComponent) service.getComponent();
87
88 List interceptors = new ArrayList();
89 List stackInterceptors = new ArrayList();
90 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
91 interceptors.add(new InterceptorStack(stackInterceptors));
92 component.setInterceptors(interceptors);
93 service.initialise();
94 service.start();
95
96 MuleEvent result = component.process(getTestEvent(""));
97
98 assertEquals(SINGLE_INTERCEPTOR_RESULT, result.getMessageAsString());
99 }
100
101 @Test
102 public void testMultipleInterceptorStack() throws Exception
103 {
104 Service service = createUninitializedService();
105 TestComponent component = (TestComponent) service.getComponent();
106
107 List interceptors = new ArrayList();
108 interceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
109 List stackInterceptors = new ArrayList();
110 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_TWO));
111 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_THREE));
112 interceptors.add(new InterceptorStack(stackInterceptors));
113 component.setInterceptors(interceptors);
114 service.initialise();
115 service.start();
116
117 MuleEvent result = component.process(getTestEvent(""));
118
119 assertEquals(MULTIPLE_INTERCEPTOR_RESULT, result.getMessageAsString());
120 }
121
122 @Test
123 public void testMultipleInterceptorStack2() throws Exception
124 {
125 Service service = createUninitializedService();
126 TestComponent component = (TestComponent) service.getComponent();
127
128 List interceptors = new ArrayList();
129 interceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
130 interceptors.add(new TestInterceptor(INTERCEPTOR_TWO));
131 interceptors.add(new TestInterceptor(INTERCEPTOR_THREE));
132 List stackInterceptors = new ArrayList();
133 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_ONE));
134 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_TWO));
135 stackInterceptors.add(new TestInterceptor(INTERCEPTOR_THREE));
136 interceptors.add(new InterceptorStack(stackInterceptors));
137 component.setInterceptors(interceptors);
138 service.initialise();
139 service.start();
140
141 MuleEvent result = component.process(getTestEvent(""));
142
143 assertEquals(INTERCEPTOR_ONE + BEFORE + INTERCEPTOR_TWO + BEFORE + INTERCEPTOR_THREE + BEFORE
144 + INTERCEPTOR_ONE + BEFORE + INTERCEPTOR_TWO + BEFORE + INTERCEPTOR_THREE + BEFORE
145 + COMPONENT + INTERCEPTOR_THREE + AFTER + INTERCEPTOR_TWO + AFTER + INTERCEPTOR_ONE
146 + AFTER + INTERCEPTOR_THREE + AFTER + INTERCEPTOR_TWO + AFTER + INTERCEPTOR_ONE + AFTER,
147 result.getMessageAsString());
148 }
149
150 class TestInterceptor extends AbstractEnvelopeInterceptor
151 {
152
153 private String name;
154
155 public TestInterceptor(String name)
156 {
157 this.name = name;
158 }
159
160 @Override
161 public MuleEvent after(MuleEvent event)
162 {
163 try
164 {
165 event.getMessage().setPayload(event.getMessage().getPayloadAsString() + name + AFTER);
166 }
167 catch (Exception e)
168 {
169 e.printStackTrace();
170 fail(e.getMessage());
171 }
172 return event;
173 }
174
175 @Override
176 public MuleEvent before(MuleEvent event)
177 {
178 try
179 {
180 event.getMessage().setPayload(event.getMessage().getPayloadAsString() + name + BEFORE);
181 }
182 catch (Exception e)
183 {
184 e.printStackTrace();
185 fail(e.getMessage());
186 }
187 return event;
188 }
189
190 @Override
191 public MuleEvent last(MuleEvent event, ProcessingTime time, long startTime, boolean exceptionWasThrown) throws MuleException
192 {
193 return event;
194 }
195 }
196
197 protected Service createUninitializedService() throws Exception
198 {
199 TestComponent component = new TestComponent();
200 Service service = new SedaService(muleContext);
201 service.setName("name");
202 service.setComponent(component);
203 service.setModel(muleContext.getRegistry().lookupSystemModel());
204 return service;
205 }
206
207 class TestComponent extends AbstractComponent
208 {
209 @Override
210 protected Object doInvoke(MuleEvent event) throws Exception
211 {
212 return event.getMessageAsString() + COMPONENT;
213 }
214 }
215
216 }