View Javadoc

1   /*
2    * $Id: InterceptorTestCase.java 20288 2010-11-22 01:19:54Z mike.schilling $
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.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 }