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