1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.file;
12
13 import org.mule.api.MuleEventContext;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.endpoint.EndpointBuilder;
16 import org.mule.api.endpoint.InboundEndpoint;
17 import org.mule.api.service.Service;
18 import org.mule.api.source.CompositeMessageSource;
19 import org.mule.api.transformer.Transformer;
20 import org.mule.component.DefaultJavaComponent;
21 import org.mule.endpoint.EndpointURIEndpointBuilder;
22 import org.mule.model.seda.SedaService;
23 import org.mule.object.SingletonObjectFactory;
24 import org.mule.tck.functional.EventCallback;
25 import org.mule.tck.functional.FunctionalTestComponent;
26 import org.mule.tck.transformer.NoActionTransformer;
27 import org.mule.transformer.AbstractMessageTransformer;
28 import org.mule.util.concurrent.Latch;
29
30 import java.io.File;
31
32 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
33
34 public class FileReceiverMoveDeleteTestCase extends AbstractFileMoveDeleteTestCase
35 {
36 @Override
37 protected void doSetUp() throws Exception
38 {
39 super.doSetUp();
40
41
42 muleContext.getRegistry().unregisterTransformer("_ObjectToByteArray");
43 }
44
45 public void testMoveAndDeleteStreaming() throws Exception
46 {
47 File inFile = initForRequest();
48
49 File moveToDir = configureConnector(inFile, true, true, true, null);
50
51 assertRecevied(configureService(inFile, true, false));
52 assertFiles(inFile, moveToDir, true, true);
53 }
54
55 public void testMoveAndDeleteWorkDirStreaming() throws Exception
56 {
57 File inFile = initForRequest();
58
59 File moveToDir = configureConnector(inFile, true, true, true, true, null);
60
61 assertRecevied(configureService(inFile, true, false));
62 assertFiles(inFile, moveToDir, true, true);
63 }
64
65 public void testMoveOnlyStreaming() throws Exception
66 {
67 File inFile = initForRequest();
68
69 File moveToDir = configureConnector(inFile, true, true, false, null);
70
71 assertRecevied(configureService(inFile, true, false));
72 assertFiles(inFile, moveToDir, true, false);
73 }
74
75 public void testMoveOnlyWorkDirStreaming() throws Exception
76 {
77 File inFile = initForRequest();
78
79 File moveToDir = configureConnector(inFile, true, true, false, true, null);
80
81 assertRecevied(configureService(inFile, true, false));
82 assertFiles(inFile, moveToDir, true, false);
83 }
84
85 public void testDeleteOnlyStreaming() throws Exception
86 {
87 File inFile = initForRequest();
88
89 File moveToDir = configureConnector(inFile, true, false, true, null);
90
91 assertRecevied(configureService(inFile, true, false));
92 assertFiles(inFile, moveToDir, false, true);
93 }
94
95 public void testNoMoveNoDeleteStreaming() throws Exception
96 {
97 File inFile = initForRequest();
98
99 File moveToDir = configureConnector(inFile, true, false, false, null);
100
101 assertRecevied(configureService(inFile, true, false));
102 assertFiles(inFile, moveToDir, false, false);
103 }
104
105 public void testMoveAndDelete() throws Exception
106 {
107 File inFile = initForRequest();
108
109 File moveToDir = configureConnector(inFile, false, true, true, null);
110
111 assertRecevied(configureService(inFile, false, false));
112 assertFiles(inFile, moveToDir, true, true);
113 }
114
115 public void testMoveOnly() throws Exception
116 {
117 File inFile = initForRequest();
118
119 File moveToDir = configureConnector(inFile, false, true, false, null);
120
121 assertRecevied(configureService(inFile, false, false));
122 assertFiles(inFile, moveToDir, true, false);
123 }
124
125 public void testDeleteOnly() throws Exception
126 {
127 File inFile = initForRequest();
128
129 File moveToDir = configureConnector(inFile, false, false, true, null);
130
131 assertRecevied(configureService(inFile, false, false));
132 assertFiles(inFile, moveToDir, false, true);
133 }
134
135 public void testNoMoveNoDelete() throws Exception
136 {
137 File inFile = initForRequest();
138
139 File moveToDir = configureConnector(inFile, false, false, false, null);
140
141 assertRecevied(configureService(inFile, false, false));
142 assertFiles(inFile, moveToDir, false, false);
143 }
144
145 public void testMoveAndDeleteFilePayload() throws Exception
146 {
147 File inFile = initForRequest();
148
149 File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
150
151 assertRecevied(configureService(inFile, false, true));
152 assertFiles(inFile, moveToDir, true, true);
153 }
154
155 public void testMoveOnlyFilePayload() throws Exception
156 {
157 File inFile = initForRequest();
158
159 File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
160
161 assertRecevied(configureService(inFile, false, true));
162 assertFiles(inFile, moveToDir, true, false);
163 }
164
165 public void testDeleteOnlyFilePayload() throws Exception
166 {
167 File inFile = initForRequest();
168
169 File moveToDir = configureConnector(inFile, false, false, true, FileMuleMessageFactory.class);
170
171 assertRecevied(configureService(inFile, false, true));
172
173
174 Thread.sleep(2000);
175
176
177 }
178
179 public void testNoMoveNoDeleteFilePayload() throws Exception
180 {
181 File inFile = initForRequest();
182
183 File moveToDir = configureConnector(inFile, false, false, false, FileMuleMessageFactory.class);
184
185
186
187 assertFiles(inFile, moveToDir, false, false);
188 }
189
190 protected Latch configureService(File inFile, boolean streaming, boolean filePayload) throws Exception
191 {
192 Service service = new SedaService(muleContext);
193 service.setName("moveDeleteBridgeService");
194 String url = fileToUrl(inFile.getParentFile()) + "?connector=moveDeleteConnector";
195 Transformer transformer = null;
196 if (streaming)
197 {
198 if (filePayload)
199 {
200 fail("Inconsistant test case: streaming and file payload are not compatible");
201 }
202 else
203 {
204 transformer = new FileMessageFactoryAssertingTransformer(ReceiverFileInputStream.class);
205 }
206 }
207 else
208 {
209 if (filePayload)
210 {
211 transformer = new FileMessageFactoryAssertingTransformer(File.class);
212 }
213 else
214 {
215 transformer = new FileMessageFactoryAssertingTransformer(byte[].class);
216 }
217 }
218
219 EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(url, muleContext);
220 endpointBuilder.addMessageProcessor(transformer);
221 if (filePayload)
222 {
223 endpointBuilder.addMessageProcessor(new NoActionTransformer());
224 }
225 InboundEndpoint endpoint =
226 muleContext.getEndpointFactory().getInboundEndpoint(endpointBuilder);
227 ((CompositeMessageSource) service.getMessageSource()).addSource(endpoint);
228
229 final Latch latch = new Latch();
230 FunctionalTestComponent testComponent = new FunctionalTestComponent();
231 testComponent.setMuleContext(muleContext);
232 testComponent.setEventCallback(new EventCallback()
233 {
234 public void eventReceived(final MuleEventContext context, final Object message) throws Exception
235 {
236 assertEquals(1, latch.getCount());
237 assertEquals(TEST_MESSAGE, context.transformMessageToString());
238 latch.countDown();
239 }
240 });
241 testComponent.initialise();
242
243 final DefaultJavaComponent component = new DefaultJavaComponent(new SingletonObjectFactory(testComponent));
244 component.setMuleContext(muleContext);
245 service.setComponent(component);
246 service.setModel(muleContext.getRegistry().lookupSystemModel());
247 muleContext.getRegistry().registerService(service);
248 return latch;
249 }
250
251 protected void assertRecevied(Latch latch) throws Exception
252 {
253 assertNotNull(latch);
254 assertTrue(latch.await(2000L, TimeUnit.MILLISECONDS));
255 }
256
257 private class FileMessageFactoryAssertingTransformer extends AbstractMessageTransformer
258 {
259 private Class<?> expectedPayload;
260
261 public FileMessageFactoryAssertingTransformer(Class<?> expectedPayload)
262 {
263 this.expectedPayload = expectedPayload;
264 }
265
266 @Override
267 public Object transformMessage(MuleMessage message, String outputEncoding)
268 {
269 assertEquals(expectedPayload, message.getPayload().getClass());
270
271
272 if (expectedPayload.equals(ReceiverFileInputStream.class))
273 {
274 File file = ((ReceiverFileInputStream) message.getPayload()).getCurrentFile();
275 assertFilesUntouched(file);
276 }
277 return message;
278 }
279 }
280
281 }