View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.file;
8   
9   import org.mule.api.MessagingException;
10  import org.mule.api.MuleException;
11  import org.mule.api.MuleMessage;
12  import org.mule.model.streaming.DelegatingInputStream;
13  import org.mule.module.client.MuleClient;
14  import org.mule.util.IOUtils;
15  
16  import java.io.ByteArrayOutputStream;
17  import java.io.File;
18  import java.io.IOException;
19  import java.io.InputStream;
20  import java.net.MalformedURLException;
21  
22  import org.junit.Test;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertNotNull;
26  import static org.junit.Assert.assertTrue;
27  
28  public class FileRequestorMoveDeleteTestCase extends AbstractFileMoveDeleteTestCase
29  {
30  
31      @Test
32      public void testMoveAndDeleteStreaming() throws Exception
33      {
34          File inFile = initForRequest();
35          File moveToDir = configureConnector(inFile, true, true, true, null);
36  
37          assertRequested(request(inFile), inFile, true);
38          assertFiles(inFile, moveToDir, true, true);
39      }
40  
41      @Test
42      public void testMoveOnlyStreaming() throws Exception
43      {
44          File inFile = initForRequest();
45          File moveToDir = configureConnector(inFile, true, true, false, null);
46  
47          assertRequested(request(inFile), inFile, true);
48          assertFiles(inFile, moveToDir, true, false);
49      }
50  
51      @Test
52      public void testDeleteOnlyStreaming() throws Exception
53      {
54          File inFile = initForRequest();
55          File moveToDir = configureConnector(inFile, true, false, true, null);
56  
57          assertRequested(request(inFile), inFile, true);
58          assertFiles(inFile, moveToDir, false, true);
59      }
60  
61      @Test
62      public void testNoMoveNoDeleteStreaming() throws Exception
63      {
64          File inFile = initForRequest();
65          File moveToDir = configureConnector(inFile, true, false, false, null);
66  
67          assertRequested(request(inFile), inFile, true);
68          assertFiles(inFile, moveToDir, false, false);
69      }
70  
71      @Test
72      public void testMoveAndDelete() throws Exception
73      {
74          File inFile = initForRequest();
75          File moveToDir = configureConnector(inFile, false, true, true, null);
76  
77          assertRequested(request(inFile), inFile, false);
78          assertFiles(inFile, moveToDir, true, true);
79      }
80  
81      @Test
82      public void testMoveOnly() throws Exception
83      {
84          File inFile = initForRequest();
85          File moveToDir = configureConnector(inFile, false, true, false, null);
86  
87          assertRequested(request(inFile), inFile, false);
88          assertFiles(inFile, moveToDir, true, false);
89      }
90  
91      @Test
92      public void testDeleteOnly() throws Exception
93      {
94          File inFile = initForRequest();
95          File moveToDir = configureConnector(inFile, false, false, true, null);
96  
97          assertRequested(request(inFile), inFile, false);
98          assertFiles(inFile, moveToDir, false, true);
99      }
100 
101     @Test
102     public void testNoMoveNoDelete() throws Exception
103     {
104         File inFile = initForRequest();
105         File moveToDir = configureConnector(inFile, false, false, false, null);
106 
107         assertRequested(request(inFile), inFile, false);
108         assertFiles(inFile, moveToDir, false, false);
109     }
110 
111     @Test
112     public void testMoveAndDeleteFilePayload() throws Exception
113     {
114         File inFile = initForRequest();
115 
116         File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
117 
118         // TODO MULE-3198
119         // assertRequested(request(inFile), inFile, false);
120         // assertFiles(inFile, moveToDir, true, true);
121     }
122 
123     @Test
124     public void testMoveOnlyFilePayload() throws Exception
125     {
126         File inFile = initForRequest();
127 
128         File moveToDir = configureConnector(inFile, false, true, false, FileMuleMessageFactory.class);
129 
130         // TODO MULE-3198
131         // assertRequested(request(inFile), inFile, false);
132         // assertFiles(inFile, moveToDir, true, false);
133     }
134 
135     @Test
136     public void testDeleteOnlyFilePayload() throws Exception
137     {
138         File inFile = initForRequest();
139 
140         File moveToDir = configureConnector(inFile, false, false, true, FileMuleMessageFactory.class);
141 
142         // TODO MULE-3198
143         // assertRequested(request(inFile), inFile, false);
144         // assertFiles(inFile, moveToDir, false, true);
145     }
146 
147     @Test
148     public void testNoMoveNoDeleteFilePayload() throws Exception
149     {
150         File inFile = initForRequest();
151 
152         File moveToDir = configureConnector(inFile, false, false, false, FileMuleMessageFactory.class);
153 
154         // TODO MULE-3198
155         // assertRequested(request(inFile), inFile, false);
156 
157         assertFiles(inFile, moveToDir, false, false);
158     }
159 
160     protected void assertRequested(MuleMessage message, File inFile, boolean streaming)
161         throws IOException, MessagingException, InterruptedException
162     {
163         // Allow time for deletes/moves, so we can then assert to check files that
164         // shouldn't havn't been moved havn't
165         Thread.sleep(2000);
166 
167         assertNotNull(message);
168         assertEquals(inFile.getName(), message.getOutboundProperty(FileConnector.PROPERTY_ORIGINAL_FILENAME));
169 
170         assertNotNull(message.getPayload());
171         if (streaming)
172         {
173             // We can't check ReceiverFileInputStream is received because it is
174             // wrapped in a DelegatingInputStream
175             assertTrue(message.getPayload() instanceof DelegatingInputStream);
176             InputStream fis = (InputStream) message.getPayload();
177             ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
178             IOUtils.copy(fis, byteOut);
179 
180             // close() not called yet, nothing should have been deleted or moved yet
181             assertFilesUntouched(inFile);
182 
183             fis.close();
184             String result = new String(byteOut.toByteArray());
185             assertEquals(TEST_MESSAGE, result);
186         }
187         else
188         {
189             assertTrue(message.getPayload() instanceof byte[]);
190             assertEquals(TEST_MESSAGE, new String((byte[]) message.getPayload()));
191         }
192     }
193 
194     protected MuleMessage request(File file) throws MuleException, MalformedURLException
195     {
196         MuleClient muleClient = new MuleClient(muleContext);
197         return muleClient.request(fileToUrl(file) + "?connector=moveDeleteConnector", 2000);
198     }
199 }