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