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.service.Service;
17 import org.mule.api.transformer.TransformerException;
18 import org.mule.component.DefaultJavaComponent;
19 import org.mule.endpoint.EndpointURIEndpointBuilder;
20 import org.mule.endpoint.URIBuilder;
21 import org.mule.model.seda.SedaService;
22 import org.mule.object.SingletonObjectFactory;
23 import org.mule.tck.functional.EventCallback;
24 import org.mule.tck.functional.FunctionalTestComponent;
25 import org.mule.transformer.AbstractMessageAwareTransformer;
26 import org.mule.transformer.NoActionTransformer;
27 import org.mule.util.concurrent.Latch;
28
29 import java.io.File;
30
31 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
32
33 public class FileReceiverMoveDeleteTestCase extends AbstractFileMoveDeleteTestCase
34 {
35
36 public void testMoveAndDeleteStreaming() throws Exception
37 {
38 File inFile = initForRequest();
39
40 File moveToDir = configureConnector(inFile, true, true, true, null);
41
42 assertRecevied(configureService(inFile, true, false));
43
44 assertFiles(inFile, moveToDir, true, true);
45 }
46
47 public void testMoveOnlyStreaming() throws Exception
48 {
49 File inFile = initForRequest();
50
51 File moveToDir = configureConnector(inFile, true, true, false, null);
52
53 assertRecevied(configureService(inFile, true, false));
54
55 assertFiles(inFile, moveToDir, true, false);
56 }
57
58 public void testDeleteOnlyStreaming() throws Exception
59 {
60 File inFile = initForRequest();
61
62 File moveToDir = configureConnector(inFile, true, false, true, null);
63
64 assertRecevied(configureService(inFile, true, false));
65
66 assertFiles(inFile, moveToDir, false, true);
67 }
68
69 public void testNoMoveNoDeleteStreaming() throws Exception
70 {
71 File inFile = initForRequest();
72
73 File moveToDir = configureConnector(inFile, true, false, false, null);
74
75 assertRecevied(configureService(inFile, true, false));
76
77 assertFiles(inFile, moveToDir, false, false);
78 }
79
80 public void testMoveAndDelete() throws Exception
81 {
82 File inFile = initForRequest();
83
84 File moveToDir = configureConnector(inFile, false, true, true, null);
85 assertRecevied(configureService(inFile, false, false));
86
87 assertFiles(inFile, moveToDir, true, true);
88 }
89
90 public void testMoveOnly() throws Exception
91 {
92 File inFile = initForRequest();
93
94 File moveToDir = configureConnector(inFile, false, true, false, null);
95
96 assertRecevied(configureService(inFile, false, false));
97
98 assertFiles(inFile, moveToDir, true, false);
99 }
100
101 public void testDeleteOnly() throws Exception
102 {
103 File inFile = initForRequest();
104
105 File moveToDir = configureConnector(inFile, false, false, true, null);
106
107 assertRecevied(configureService(inFile, false, false));
108
109 assertFiles(inFile, moveToDir, false, true);
110 }
111
112 public void testNoMoveNoDelete() throws Exception
113 {
114 File inFile = initForRequest();
115
116 File moveToDir = configureConnector(inFile, false, false, false, null);
117
118 assertRecevied(configureService(inFile, false, false));
119
120 assertFiles(inFile, moveToDir, false, false);
121 }
122
123 public void testMoveAndDeleteFilePayload() throws Exception
124 {
125 File inFile = initForRequest();
126
127 File moveToDir = configureConnector(inFile, false, true, false, FileMessageAdapter.class);
128
129
130
131
132 }
133
134 public void testMoveOnlyFilePayload() throws Exception
135 {
136 File inFile = initForRequest();
137
138 File moveToDir = configureConnector(inFile, false, true, false, FileMessageAdapter.class);
139
140
141
142
143 }
144
145 public void testDeleteOnlyFilePayload() throws Exception
146 {
147 File inFile = initForRequest();
148
149 File moveToDir = configureConnector(inFile, false, false, true, FileMessageAdapter.class);
150
151
152
153
154 }
155
156 public void testNoMoveNoDeleteFilePayload() throws Exception
157 {
158 File inFile = initForRequest();
159
160 File moveToDir = configureConnector(inFile, false, false, false, FileMessageAdapter.class);
161
162
163
164
165 assertFiles(inFile, moveToDir, false, false);
166 }
167
168 protected Latch configureService(File inFile, boolean streaming, boolean filePayload) throws Exception
169 {
170
171 Service s = new SedaService();
172 s.setName("moveDeleteBridgeService");
173 String url = fileToUrl(inFile.getParentFile()) + "?connector=moveDeleteConnector";
174 org.mule.api.transformer.Transformer transformer = null;
175 if (streaming)
176 {
177 if (filePayload)
178 {
179 fail("Inconsistant test case: streaming and file payload are not compatible");
180 }
181 else
182 {
183 transformer = new FileMessageAdaptorAssertingTransformer(FileMessageAdapter.class,
184 ReceiverFileInputStream.class);
185 }
186 }
187 else
188 {
189 if (filePayload)
190 {
191 transformer = new FileMessageAdaptorAssertingTransformer(FileMessageAdapter.class, File.class);
192 }
193 else
194 {
195 transformer = new FileMessageAdaptorAssertingTransformer(FileContentsMessageAdapter.class, byte[].class);
196 }
197 }
198 EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(new URIBuilder(url), muleContext);
199 endpointBuilder.addTransformer(transformer);
200 if (filePayload)
201 {
202 endpointBuilder.addTransformer(new NoActionTransformer());
203 }
204 endpointBuilder.setSynchronous(true);
205 s.getInboundRouter().addEndpoint(
206 muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint(endpointBuilder));
207 final Latch latch = new Latch();
208 FunctionalTestComponent component = new FunctionalTestComponent();
209 component.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
219 component.initialise();
220 s.setComponent(new DefaultJavaComponent(new SingletonObjectFactory(component)));
221 s.setModel(muleContext.getRegistry().lookupSystemModel());
222 muleContext.getRegistry().registerService(s);
223 s.start();
224 return latch;
225 }
226
227 protected void assertRecevied(Latch latch) throws Exception
228 {
229 assertTrue(latch != null && latch.await(2000, TimeUnit.MILLISECONDS));
230 }
231
232 private class FileMessageAdaptorAssertingTransformer extends AbstractMessageAwareTransformer
233 {
234 private Class expectedMessageAdaptor;
235 private Class expectedPayload;
236
237 public FileMessageAdaptorAssertingTransformer(Class expectedMessageAdaptor, Class expectedPayload)
238 {
239 this.expectedMessageAdaptor = expectedMessageAdaptor;
240 this.expectedPayload = expectedPayload;
241 }
242
243 public Object transform(MuleMessage message, String outputEncoding) throws TransformerException
244 {
245 assertEquals(expectedMessageAdaptor, message.getAdapter().getClass());
246 assertEquals(expectedPayload, message.getAdapter().getPayload().getClass());
247
248
249 if (expectedMessageAdaptor.equals(FileMessageAdapter.class))
250 {
251 assertFilesUntouched(((FileMessageAdapter) message.getAdapter()).file);
252 }
253 return message;
254 }
255 }
256
257 }