/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.frameworks.ftpclient; import junit.framework.TestCase; import org.exoplatform.frameworks.ftpclient.client.FtpClientSession; import org.exoplatform.frameworks.ftpclient.commands.CmdCdUp; import org.exoplatform.frameworks.ftpclient.commands.CmdCwd; import org.exoplatform.frameworks.ftpclient.commands.CmdDele; import org.exoplatform.frameworks.ftpclient.commands.CmdList; import org.exoplatform.frameworks.ftpclient.commands.CmdMkd; import org.exoplatform.frameworks.ftpclient.commands.CmdNlst; import org.exoplatform.frameworks.ftpclient.commands.CmdNoop; import org.exoplatform.frameworks.ftpclient.commands.CmdPass; import org.exoplatform.frameworks.ftpclient.commands.CmdPasv; import org.exoplatform.frameworks.ftpclient.commands.CmdPort; import org.exoplatform.frameworks.ftpclient.commands.CmdPwd; import org.exoplatform.frameworks.ftpclient.commands.CmdRest; import org.exoplatform.frameworks.ftpclient.commands.CmdRetr; import org.exoplatform.frameworks.ftpclient.commands.CmdRmd; import org.exoplatform.frameworks.ftpclient.commands.CmdRnFr; import org.exoplatform.frameworks.ftpclient.commands.CmdRnTo; import org.exoplatform.frameworks.ftpclient.commands.CmdSize; import org.exoplatform.frameworks.ftpclient.commands.CmdStor; import org.exoplatform.frameworks.ftpclient.commands.CmdSyst; import org.exoplatform.frameworks.ftpclient.commands.CmdType; import org.exoplatform.frameworks.ftpclient.commands.CmdUser; import org.exoplatform.frameworks.ftpclient.data.FtpDataTransiver; import org.exoplatform.frameworks.ftpclient.data.FtpDataTransiverImpl; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import java.util.Random; /** * Created by The eXo Platform SAS . * * @author Vitaly Guly * @version $Id: $ */ public class FtpTest extends TestCase { protected static Log getLogger(String unitName) { return ExoLogger.getLogger("exo.jcr.framework.command." + unitName); } public void testNOOP() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_NOOP); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_200, client.executeCommand(new CmdNoop())); client.close(); log.info("Complete."); } public void testUSER() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_USER); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); client.close(); log.info("Complete."); } public void testPASS() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_PASS); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); client.close(); log.info("Complete."); } public void testSYST() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_SYST); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); log.info("Complete."); } public void testPWD() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_PWD); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); log.info("CURRENTPATH - [" + cmdPwd.getCurrentPath() + "]"); // assertEquals("/", cmdPwd.getCurrentPath()); log.info("Complete."); } public void testCWD() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_CWD); log.info("Test..."); // success FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd("production"))); CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals("/production", cmdPwd.getCurrentPath()); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd("../backup/"))); cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals("/backup", cmdPwd.getCurrentPath()); assertEquals(FtpConst.Replyes.REPLY_550, client.executeCommand(new CmdCwd("production"))); client.close(); // denied client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_530, client.executeCommand(new CmdCwd("production"))); client.close(); log.info("Complete."); } public void testCDUP() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_CDUP); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd("production"))); CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals("/production", cmdPwd.getCurrentPath()); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCdUp())); cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals("/", cmdPwd.getCurrentPath()); client.close(); log.info("Complete."); } public void testTYPE() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_TYPE); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_200, client.executeCommand(new CmdType("A"))); assertEquals(FtpConst.Replyes.REPLY_200, client.executeCommand(new CmdType("I"))); assertEquals(FtpConst.Replyes.REPLY_500, client.executeCommand(new CmdType("SOMETYPE"))); client.close(); log.info("Complete."); } public void testPASV() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_PASV); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); boolean connected = false; for (int i = 0; i < 15; i++) { try { if (client.getDataTransiver().isConnected()) { connected = true; break; } Thread.sleep(1000); } catch (Exception exc) { log.info(FtpConst.EXC_MSG + exc.getMessage(), exc); } } assertEquals(true, connected); client.getDataTransiver().close(); client.close(); log.info("Complete."); } public void testPORT() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_PORT); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); int MIN_PORT_VAL = 9000; int MAX_PORT_VAL = 10000; int ports = MAX_PORT_VAL - MIN_PORT_VAL + 1; Random random = new Random(); String host = "127.0.0.1"; int port = 0; boolean enableSearch = true; while (enableSearch) { port = MIN_PORT_VAL + random.nextInt(ports); if (FtpUtils.isPortFree(port)) { enableSearch = false; } } FtpDataTransiver dataTransiver = new FtpDataTransiverImpl(); dataTransiver.OpenActive(port); client.setDataTransiver(dataTransiver); try { Thread.sleep(1000); } catch (Exception exc) { log.info(FtpConst.EXC_MSG + exc.getMessage(), exc); } CmdPort cmdPort = new CmdPort(host, port); assertEquals(FtpConst.Replyes.REPLY_200, client.executeCommand(cmdPort)); boolean connected = false; for (int i = 0; i < 15; i++) { try { if (client.getDataTransiver().isConnected()) { connected = true; break; } Thread.sleep(1000); } catch (Exception exc) { log.info(FtpConst.EXC_MSG + exc.getMessage(), exc); } } assertEquals(true, connected); client.getDataTransiver().close(); client.close(); log.info("Complete."); } public void testLIST() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_LIST); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd("production"))); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(new CmdList())); client.close(); log.info("Complete."); } public void testNLST() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_NLST); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd("production"))); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(new CmdNlst())); client.close(); log.info("Complete."); } public void testMKD() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_MKD); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(new CmdMkd("/production/test_folder"))); client.close(); log.info("Complete."); } public void testRMD() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_RMD); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(new CmdMkd("/production/test_folder"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdRmd("/production/test_folder"))); client.close(); log.info("Complete."); } public void testRNFR_RNTO() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_RNFR + "_" + FtpConst.Commands.CMD_RNTO); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(new CmdMkd("/production/test_kokanoid_torename"))); assertEquals(FtpConst.Replyes.REPLY_350, client.executeCommand(new CmdRnFr("/production/test_kokanoid_torename"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdRnTo("/production/test_kokanoid_renamed"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdRmd("/production/test_kokanoid_renamed"))); client.close(); log.info("Complete."); } protected static final String FILE_CONTENT = "eXo TEST File Content..."; public void testSTOR() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_STOR); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); CmdStor cmdStor = new CmdStor("/production/test_file.txt"); byte[] data = new byte[FILE_CONTENT.length()]; char[] chars = FILE_CONTENT.toCharArray(); for (int i = 0; i < data.length; i++) { data[i] = (byte)chars[i]; } cmdStor.setFileContent(data); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdStor)); client.close(); log.info("Complete."); } public void testSIZE() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_SIZE); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_213, client.executeCommand(new CmdSize("/production/test_file.txt"))); // retrieve size here..., assert it assertEquals(FtpConst.Replyes.REPLY_550, client.executeCommand(new CmdSize("/production/test_file_absent.txt"))); client.close(); log.info("Complete."); } public void testRETR() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_RETR); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); CmdRetr cmdRetr = new CmdRetr("/production/test_file.txt"); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdRetr)); byte[] fileContent = cmdRetr.getFileContent(); assertEquals(fileContent.length, FILE_CONTENT.length()); for (int i = 0; i < fileContent.length; i++) { if (fileContent[i] != FILE_CONTENT.charAt(i)) { fail(); } } client.close(); log.info("Complete."); } public void testREST() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_REST); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); assertEquals(FtpConst.Replyes.REPLY_350, client.executeCommand(new CmdRest(9))); CmdRetr cmdRetr = new CmdRetr("/production/test_file.txt"); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdRetr)); byte[] fileContent = cmdRetr.getFileContent(); assertEquals(fileContent.length, FILE_CONTENT.length() - 9); for (int i = 0; i < fileContent.length; i++) { if (fileContent[i] != FILE_CONTENT.charAt(i + 9)) { fail(); } } client.close(); log.info("Complete."); } public void testDELE() throws Exception { Log log = getLogger(FtpConst.Commands.CMD_DELE); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdDele("/production/test_file.txt"))); client.close(); log.info("Complete."); } protected byte[] getBytes(String content) { byte[] data = new byte[content.length()]; for (int i = 0; i < data.length; i++) { data[i] = (byte)content.charAt(i); } return data; } public void testREST_STOR() throws Exception { Log log = getLogger("REST_STOR"); log.info("Test..."); FtpClientSession client = FtpTestConfig.getTestFtpClient(); client.connect(); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(new CmdUser("admin"))); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(new CmdPass("admin"))); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(new CmdSyst())); String fileName = "/production/resr_test_file.txt"; assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); byte[] data = getBytes("DATABYTES"); CmdStor cmdStor = new CmdStor(fileName); cmdStor.setFileContent(data); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdStor)); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); CmdRetr cmdRetr = new CmdRetr(fileName); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdRetr)); byte[] dataAfter = cmdRetr.getFileContent(); for (int i = 0; i < dataAfter.length; i++) { if (dataAfter[i] != data[i]) { fail(); } } assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); assertEquals(FtpConst.Replyes.REPLY_350, client.executeCommand(new CmdRest(data.length))); byte[] secondData = getBytes("_APPENDED"); cmdStor = new CmdStor(fileName); cmdStor.setFileContent(secondData); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdStor)); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); cmdRetr = new CmdRetr(fileName); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdRetr)); String secondString = "DATABYTES_APPENDED"; byte[] secondDataAfter = cmdRetr.getFileContent(); for (int i = 0; i < secondDataAfter.length; i++) { if (secondDataAfter[i] != (byte)secondString.charAt(i)) { fail(); } } assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); assertEquals(FtpConst.Replyes.REPLY_350, client.executeCommand(new CmdRest(4))); byte[] replasedData = getBytes("INT"); cmdStor = new CmdStor(fileName); cmdStor.setFileContent(replasedData); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdStor)); assertEquals(FtpConst.Replyes.REPLY_227, client.executeCommand(new CmdPasv())); cmdRetr = new CmdRetr(fileName); assertEquals(FtpConst.Replyes.REPLY_226, client.executeCommand(cmdRetr)); String readyString = "DATAINTES_APPENDED"; byte[] readyBytes = cmdRetr.getFileContent(); for (int i = 0; i < readyBytes.length; i++) { if (readyBytes[i] != (byte)readyString.charAt(i)) { fail(); } } assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdDele(fileName))); client.close(); log.info("Complete."); } }