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