View Javadoc

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