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.ftp.server;
8   
9   import org.mule.tck.junit4.AbstractMuleTestCase;
10  import org.mule.tck.junit4.rule.DynamicPort;
11  import org.mule.transport.ftp.AbstractFtpServerTestCase;
12  
13  import java.io.File;
14  import java.io.IOException;
15  
16  import org.junit.After;
17  import org.junit.Before;
18  import org.junit.Rule;
19  import org.junit.Test;
20  
21  import static org.junit.Assert.assertEquals;
22  import static org.junit.Assert.assertFalse;
23  import static org.junit.Assert.assertTrue;
24  
25  /**
26   * Various tests against the FTPClient/Server we use in Mule ftp transport tests.
27   * This is to make sure basic ftp functionality works with our current ftp
28   * client/server before we throw Mule into the mix.
29   */
30  public class FTPServerClientTest extends AbstractMuleTestCase
31  {
32  
33      private static final String adminUser = "admin";
34      private static final String adminPassword = "admin";
35  
36      private Server ftpServer = null;
37      private FTPTestClient ftpClient = null;
38  
39      @Rule
40      public DynamicPort dynamicPort = new DynamicPort("port1");
41  
42      @Before
43      public void setUp() throws Exception
44      {
45          new File(AbstractFtpServerTestCase.FTP_SERVER_BASE_DIR).mkdirs();
46          ftpServer = new Server(dynamicPort.getNumber());
47      }
48      
49      /**
50       * Create a directory and delete it
51       * @throws IOException
52       */
53      @Test
54      public void testCreateDeleteDir() throws IOException
55      {
56          ftpClient = new FTPTestClient("localhost", dynamicPort.getNumber(), adminUser, adminPassword);
57          String dir = "/foo/";
58          assertTrue("unable to create directory: " + dir, ftpClient.makeDir(dir));
59          //verify directory was created
60          assertTrue("Directory '" + dir + "' does not exist", ftpClient.dirExists(dir));
61          assertTrue("unable to delete directory: " + dir, ftpClient.deleteDir(dir));
62          assertFalse("Directory '" + dir + "' still exists", ftpClient.dirExists(dir));
63      }
64      
65      /**
66       * Create a file and delete it
67       * @throws IOException
68       */    
69      @Test
70      public void testCreateDeleteFile() throws IOException
71      {
72          ftpClient = new FTPTestClient("localhost", dynamicPort.getNumber(), adminUser, adminPassword);
73          File testFile = File.createTempFile("fake", "file");
74          ftpClient.putFile(testFile.getAbsolutePath(),"/");
75          assertTrue("Could not find file :" + testFile.getName(), ftpClient.fileExists(testFile.getName()));
76          ftpClient.deleteFile(testFile.getName());
77          assertFalse("file was not deleted :" + testFile.getName(), ftpClient.fileExists(testFile.getName()));
78      }
79  
80      /**
81       * Create a bunch of files/dirs then recursively delete them
82       * @throws IOException
83       */
84      @Test
85      public void testRecursiveDelete() throws IOException
86      {                        
87          ftpClient = new FTPTestClient("localhost", dynamicPort.getNumber(), adminUser, adminPassword);
88          
89          assertTrue(ftpClient.makeDir("dir1/"));
90          ftpClient.dirExists("dir1/");
91          assertTrue(ftpClient.makeDir("/dir1/dir21/"));
92          ftpClient.dirExists("/dir1/dir21/");
93          assertTrue(ftpClient.makeDir("/dir1/dir22/"));
94          ftpClient.dirExists("/dir1/dir22/");
95          assertTrue(ftpClient.makeDir("/dir1/dir21/dir3/"));
96          ftpClient.dirExists("/dir1/dir21/dir3/");
97          
98          //TODO DZ: we should really be using files with data in them for more realistic testing  
99          File testFile0 = File.createTempFile("testFile0", "file");
100         File testFile1 = File.createTempFile("testFile1", "file");
101         File testFile2 = File.createTempFile("testFile2", "file");
102         File testFile3 = File.createTempFile("testFile3", "file");
103         File testFile4 = File.createTempFile("testFile4", "file");
104         File testFile5 = File.createTempFile("testFile5", "file");
105         File testFile6 = File.createTempFile("testFile6", "file");        
106         File testFile7 = File.createTempFile("testFile7", "file");
107         File testFile8 = File.createTempFile("testFile8", "file");
108         File testFile9 = File.createTempFile("testFile9", "file");
109                
110         assertTrue(ftpClient.putFile(testFile0.getAbsolutePath(), "/"));
111         ftpClient.fileExists("/" + testFile0.getName());
112         assertTrue(ftpClient.putFile(testFile1.getAbsolutePath(), "/"));
113         ftpClient.fileExists("/" + testFile0.getName());
114         assertTrue(ftpClient.putFile(testFile2.getAbsolutePath(), "/dir1/"));
115         ftpClient.fileExists("/dir1/" + testFile0.getName());
116         assertTrue(ftpClient.putFile(testFile3.getAbsolutePath(), "/dir1/"));
117         ftpClient.fileExists("/dir1/" + testFile0.getName());
118         assertTrue(ftpClient.putFile(testFile4.getAbsolutePath(), "/dir1/dir21/"));
119         ftpClient.fileExists("/dir1/dir21/" + testFile0.getName());
120         assertTrue(ftpClient.putFile(testFile5.getAbsolutePath(), "/dir1/dir21/"));
121         ftpClient.fileExists("/dir1/dir21/" + testFile0.getName());
122         assertTrue(ftpClient.putFile(testFile6.getAbsolutePath(), "/dir1/dir22/"));
123         ftpClient.fileExists("/dir1/dir22/" + testFile0.getName());
124         assertTrue(ftpClient.putFile(testFile7.getAbsolutePath(), "/dir1/dir22/"));
125         ftpClient.fileExists("/dir1/dir22/" + testFile0.getName());
126         assertTrue(ftpClient.putFile(testFile8.getAbsolutePath(), "/dir1/dir21/dir3/"));
127         ftpClient.fileExists("/dir1/dir21/dir3/" + testFile0.getName());
128         assertTrue(ftpClient.putFile(testFile9.getAbsolutePath(), "/dir1/dir21/dir3/"));
129         ftpClient.fileExists("/dir1/dir21/dir3/" + testFile0.getName());
130                
131         ftpClient.recursiveDelete("/"); //there should be no files left over after this command
132         assertEquals("there are still files left over", 0, ftpClient.getFileList("/").length);
133     }
134         
135     @After
136     public void tearDown()
137     {
138         if(ftpServer != null)
139         {
140             ftpServer.stop();
141         }                
142         
143         if(ftpClient != null && ftpClient.isConnected())
144         {
145             try
146             {
147                 ftpClient.disconnect();
148             }
149             catch (IOException e)
150             {
151                 e.printStackTrace();
152             }
153         }                
154     }
155 }