View Javadoc

1   /*
2    * $Id: InterceptorTestCase.java 22377 2011-07-11 12:41:42Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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 }