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