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