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 testMoveOnlyStreaming() throws Exception
56 {
57 File inFile = initForRequest();
58
59 File moveToDir = configureConnector(inFile, true, true, false, null);
60
61 assertRecevied(configureService(inFile, true, false));
62 assertFiles(inFile, moveToDir, true, false);
63 }
64
65 public void testDeleteOnlyStreaming() throws Exception
66 {
67 File inFile = initForRequest();
68
69 File moveToDir = configureConnector(inFile, true, false, true, null);
70
71 assertRecevied(configureService(inFile, true, false));
72 assertFiles(inFile, moveToDir, false, true);
73 }
74
75 public void testNoMoveNoDeleteStreaming() throws Exception
76 {
77 File inFile = initForRequest();
78
79 File moveToDir = configureConnector(inFile, true, false, false, null);
80
81 assertRecevied(configureService(inFile, true, false));
82 assertFiles(inFile, moveToDir, false, false);
83 }
84
85 public void testMoveAndDelete() throws Exception
86 {
87 File inFile = initForRequest();
88
89 File moveToDir = configureConnector(inFile, false, true, true, null);
90
91 assertRecevied(configureService(inFile, false, false));
92 assertFiles(inFile, moveToDir, true, true);
93 }
94
95 public void testMoveOnly() throws Exception
96 {
97 File inFile = initForRequest();
98
99 File moveToDir = configureConnector(inFile, false, true, false, null);
100
101 assertRecevied(configureService(inFile, false, false));
102 assertFiles(inFile, moveToDir, true, false);
103 }
104
105 public void testDeleteOnly() throws Exception
106 {
107 File inFile = initForRequest();
108
109 File moveToDir = configureConnector(inFile, false, false, true, null);
110
111 assertRecevied(configureService(inFile, false, false));
112 assertFiles(inFile, moveToDir, false, true);
113 }
114
115 public void testNoMoveNoDelete() throws Exception
116 {
117 File inFile = initForRequest();
118
119 File moveToDir = configureConnector(inFile, false, false, false, null);
120
121 assertRecevied(configureService(inFile, false, false));
122 assertFiles(inFile, moveToDir, false, false);
123 }
124
125 public void testMoveAndDeleteFilePayload() throws Exception
126 {
127 File inFile = initForRequest();
128
129 File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
130
131 assertRecevied(configureService(inFile, false, true));
132 assertFiles(inFile, moveToDir, true, true);
133 }
134
135 public void testMoveOnlyFilePayload() throws Exception
136 {
137 File inFile = initForRequest();
138
139 File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
140
141 assertRecevied(configureService(inFile, false, true));
142 assertFiles(inFile, moveToDir, true, false);
143 }
144
145 public void testDeleteOnlyFilePayload() throws Exception
146 {
147 File inFile = initForRequest();
148
149 File moveToDir = configureConnector(inFile, false, false, true, FileMuleMessageFactory.class);
150
151 assertRecevied(configureService(inFile, false, true));
152
153
154 }
155
156 public void testNoMoveNoDeleteFilePayload() throws Exception
157 {
158 File inFile = initForRequest();
159
160 File moveToDir = configureConnector(inFile, false, false, false, FileMuleMessageFactory.class);
161
162
163
164 assertFiles(inFile, moveToDir, false, false);
165 }
166
167 protected Latch configureService(File inFile, boolean streaming, boolean filePayload) throws Exception
168 {
169 Service service = new SedaService(muleContext);
170 service.setName("moveDeleteBridgeService");
171 String url = fileToUrl(inFile.getParentFile()) + "?connector=moveDeleteConnector";
172 Transformer transformer = null;
173 if (streaming)
174 {
175 if (filePayload)
176 {
177 fail("Inconsistant test case: streaming and file payload are not compatible");
178 }
179 else
180 {
181 transformer = new FileMessageFactoryAssertingTransformer(ReceiverFileInputStream.class);
182 }
183 }
184 else
185 {
186 if (filePayload)
187 {
188 transformer = new FileMessageFactoryAssertingTransformer(File.class);
189 }
190 else
191 {
192 transformer = new FileMessageFactoryAssertingTransformer(byte[].class);
193 }
194 }
195
196 EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(url, muleContext);
197 endpointBuilder.addMessageProcessor(transformer);
198 if (filePayload)
199 {
200 endpointBuilder.addMessageProcessor(new NoActionTransformer());
201 }
202 InboundEndpoint endpoint =
203 muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint(endpointBuilder);
204 ((CompositeMessageSource) service.getMessageSource()).addSource(endpoint);
205
206 final Latch latch = new Latch();
207 FunctionalTestComponent testComponent = new FunctionalTestComponent();
208 testComponent.setMuleContext(muleContext);
209 testComponent.setEventCallback(new EventCallback()
210 {
211 public void eventReceived(final MuleEventContext context, final Object message) throws Exception
212 {
213 assertEquals(1, latch.getCount());
214 latch.countDown();
215 assertEquals(TEST_MESSAGE, context.transformMessageToString());
216 }
217 });
218 testComponent.initialise();
219
220 final DefaultJavaComponent component = new DefaultJavaComponent(new SingletonObjectFactory(testComponent));
221 component.setMuleContext(muleContext);
222 service.setComponent(component);
223 service.setModel(muleContext.getRegistry().lookupSystemModel());
224 muleContext.getRegistry().registerService(service);
225 return latch;
226 }
227
228 protected void assertRecevied(Latch latch) throws Exception
229 {
230 assertNotNull(latch);
231 assertTrue(latch.await(2000, TimeUnit.MILLISECONDS));
232 }
233
234 private class FileMessageFactoryAssertingTransformer extends AbstractMessageTransformer
235 {
236 private Class<?> expectedPayload;
237
238 public FileMessageFactoryAssertingTransformer(Class<?> expectedPayload)
239 {
240 this.expectedPayload = expectedPayload;
241 }
242
243 @Override
244 public Object transformMessage(MuleMessage message, String outputEncoding)
245 {
246 assertEquals(expectedPayload, message.getPayload().getClass());
247
248
249 if (expectedPayload.equals(ReceiverFileInputStream.class))
250 {
251 File file = ((ReceiverFileInputStream) message.getPayload()).getCurrentFile();
252 assertFilesUntouched(file);
253 }
254 return message;
255 }
256 }
257
258 }